这个步骤主要的工作是:填补客户端和服务端套接字的控制信息也可以说是通信双方交换各自的控制信息并记录
如对方的ip和port配置信息,这里的连接是指通信前的准备工作
上一篇介绍查看套接字的命令时,可以看到很多信息,但是刚刚创建出来的套接字是什么信息都没有的,协议栈也因此不知道和谁通信;
客户端填补信息
这一步中调用socket的connect指定通信的服务器ip和端口还有使用的描述符,对应的套接字会保存这些信息,这样客户端的协议栈就可以知道通信对方的信息了。
协议栈的tcp模块根据ip地址和端口号接着创建tcp头部信息讲这些信息填入,协议栈的tcp模块也就知道了服务器的ip和端口 接着委托ip模块 和服务器的ip模块发送数据
服务端填补信息
和客户端不一样,创建套接字是服务器启动就会执行的,创建完成后一直在等待客户端的连接。收到客户端的连接后,也会取出对应的端口号判断出使用哪个套接字,并把相关信息保存到套接字中。
服务器的ip模块收到数据转发给tcp模块,根据头部信息的端口号找到对应的soxket链接进行双方的建立管道通信
控制信息
头部信息
控制信息用于确定通信双方,一类是头部信息,如下图所示:
上面介绍的是tcp头部的信息;ip协议也有头部在这层协议会把ip头部添加到tcp头部前面;网卡必须知道mac地址,因此也有mac头部添加到ip头部。都是在不同层进行添加的。
这类信息在连接通信断开的各个阶段都需要携带在tcp的头部。
套接字信息
还有一类信息是用于控制协议栈操作的,这部分是套接字保存的信息,不同操作系统协议栈实现不同,但套接字保存的内容有一些是共通都需要的,只要这部分信息能够确定就可以进行通信,不需要考虑不同操作系统不同协议栈导致的差异
标签:协议,ip,信息,tcp,头部,服务器,接字,连接,客户端 From: https://blog.51cto.com/u_14689064/8983902