Tcp 协议栈实现要点内容来源于网络,由 boywhp 整理一、协议分层tcp 实现分为 socket 接口层、tcp 层、ip 以及传输接口层,socket 层负责同用户程序交互,对外提供一个 tcp 接口封装,简化起见,socket 层并没有使用标准的 socket 接口,而是使用最简化的读写接口(支持同步和异步模型);一般情况下,用户程序不能直接操作内部 tcp 数据结构;tcp 层负责 tcp 协议的具体实现,IP 和传输接口层负责网络的底层数据接口,IP 层相对比较简单,IP 和网络接口层实现了 Arp 协议,以便处理 MAC 地址处理,通过协议的分层处理可以使得系统比较简明易懂,功能代码集中在相关模块,调试查询相对简单。二、TCP 数据头以及状态迁移图TCP 头数据结构比特 0比特 15 比特 16比特 31源端口(16)目的端口(16)序列号(32)确认号(32)TCP 偏移量(4)保留(6)标志(6)窗口(16)校验和(16)紧急(16)选项(0或 32)数据(可变)源端口:指定了发送端的端口SOCKETTCPIP/ARP 网络接口层目的端口:指定了接受端的端口号序号:指明了段在即将传输的段序列中的位置确认号:规定成功收到段的序列号,确认序号包含发送确认的一端所期望收到的下一个序号TCP偏移量:指定了段头的长度。段头的长度取决与段头选项字段中设置的选项保留:指定了一个保留字段,以备将来使用标志:SYN、ACK、PSH、RST、URG、FINSYN:表示同步ACK:表示确认PSH:表示尽快的将数据送往接收进程RST:表示复位连接URG:表示紧急指针FIN:表示发送方完成数据发送窗口:指定关于发送端能传输的下一段的大小的指令校验和:校验和包含TCP段头和数据部分,用来校验段头和数据部分的可靠性紧急:指明段中包含紧急信息,只有当URG标志置1时紧急指针才有效选项:指定了公认的段大小,时间戳,选项字段的末端,以及指定了选项字段的边界选项TCP 状态图Tcp 三次握手过程TCP在三次握手的时候完成通信双方随机初始序号、Tcp 选项的交互,确保了 TCP 通信的可靠安全。三、TCP 发送(一)TCP 发送流程1用户层调用 Socket_write 发送 Tcp 数据2Socket_write_buf 将用户层数据依次写入 socket 发送缓存3Socket_send_buffersocket 层将数据切割成小的 skb 并交给 tcp4tcp 将 skb 挂入发送队列,并发送5tcp 接受到对方的 ACK,确认发送数据,释放发送队列6通知 socket 层发送完成,释放 socket 缓存,并重新发送过程(二)TCP 滑动窗口协议滑动...