• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:网络是如何请求的第二章上-一条TCP连接的生命周期

java 搞代码 4年前 (2022-01-27) 37次浏览 已收录 0个评论
文章目录[隐藏]

用电信号传输 TCP/IP 数据

全书基于一个简略场景:用户向浏览器输出一条URL到响应返回,一条网络申请的生命周期。

全书共分六合局部:

  1. 应用层客户端生成HTTP,委托给操作系统的协定栈
  2. 协定栈(TCP/IP模块)调用网卡驱动生成电信号
  3. 网卡如何通过路由器达到用于接入互联网的路由器
  4. 互联网外部接力传输
  5. 达到web服务器之后先通过防火墙的查看
  6. web服务器是如何收取数据的

第二章次要介绍,操作系统中的协定栈和网卡是如何将应用程序的音讯发给服务器的:

  1. 创立套接字
  2. 连贯服务器
  3. 收发数据
  4. 从服务器断开连接并删除套接字
  5. IP与以太网的包收发操作
  6. 用UDP收发数据的操作


如上图所示,本文介绍 1 至 4,对应 TCP 模块的整个生命周期。

次要看点如下:

  1. 协定栈的内部结构
  2. 套接字的实体是什么?有什么工具能间接察看到吗?
  3. “连贯”的过程中产生了什么?三次握手
  4. 收发数据时的具体工作流程。
  5. “断开”的过程中产生了什么?四次挥手

0. 概述

开始摸索之前作者先梳理了几个概念

0.1 协定栈的内部结构

所谓协定栈分成高低两局部,

  1. 接管应用程序委托收发数据的TCP UDP模块。
  2. 管制网络包发送的IP模块,IP模块蕴含ICMP协定和ARP协定
  3. 网卡驱动负责管制网卡硬件,用于监听发送网线中的光电信号
浏览器,邮件等个别应用程序个别用TCP
DNS查问等收发较短的控制数据个别用UDP

0.2 套接字的实体

先用 netstat 直观的感受一下

套接字:协定栈中用于寄存管制信息的内存空间
管制信息:协定类型 ip地址 端口号 状态…

套接字中记录了通信单方的信息以及通信所处的状态,
而协定栈是依据套接字中的管制信息来工作的

1. 创立套接字

<code class="java">int socket(int af, int type, int protocol);

af:地址族,即IP地址类型,罕用的有 AF_INET 和 AF_INET6
  AF_INET 代表 IPv4,例如 127.0.0.1
  AF_INET6 代表 IPv6,例如 1030::C9B4:FF12:48AA:1A2B
type:数据传输方式/套接字类型,罕用的有 SOCK_STREAM,SOCK_STREAM
  SOCK_STREAM 流格局套接字/面向连贯的套接字 
  SOCK_DGRAM 数据报套接字/无连贯的套接字
protocol:传输协定,罕用的有 IPPROTO_TCP 和 IPPTOTO_UDP
  IPPROTO_TCP:TCP 传输协定 
  IPPTOTO_UDP:UDP 传输协定
返回值:描述符

详见 socket()函数详解,介绍了 linux windows 两种版本

创立套接字的工作流程

  1. 向内存管理器申请一块内存 –> malloc()
  2. 初始化管制信息(协定类型 ip地址 端口)
  3. 返回描述符给应用程序,用于惟一标识套接字(管制信息),后续通信应用程序与协定栈交互会带上描述符。

2. 连贯服务器

连贯是什么

int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);
sock        套接字文件描述符
serv_addr    地址族 ip port
addrlen        serv_addr 大小

以太网的网线始终处于连通状态,无需连贯。
连贯理论是通信单方替换管制信息。

连贯时做了什么:

  1. 应用程序将服务端ip port交给协定栈
  2. 协定栈发动开始通信的申请
  3. 交互管制信息
  4. 开拓收发数据的缓冲区

负责保留管制信息的头部

通信操作中的管制信息分两类:

  1. 客户端与服务器相互联系时替换的管制信息。即各类协定的头部,TCP、IP、MAC。头部用于记录和替换管制信息
  2. 保留于套接字中,用于控制协议栈操作的信息。从应用程序传递来的信息以及从通信对象接管到的信息。

对于套接字中的管制信息,不同协定栈有不同实现,只有通信时按规定生成协定头部即可。

TCP头部信息:

管制信息:

通信操作中的管制信息分两类:
1. 头部中记录的信息
2. 套接字(协定栈中的内存空间)中记录的信息

可用netstat查看套接字
应用 wireshark(windows) 或 tcpdump(linux) 查看协定头

—– 未完待续

连贯操作的理论过程

TCP 的三次握手

以TCP举例连贯操作的理论过程,先来看一下三次握手。

TCP 连贯操作的理论过程


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:网络是如何请求的第二章上-一条TCP连接的生命周期

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址