深入解析TCP发送机制及其分段单元
1. TCP发送概述
TCP(传输控制协议)是一种可靠的协议,在数据传输过程中会应用流量控制。它将数据视为字节流,并为每个字节关联一个序列号,要求每个字节都得到确认。为了实现流量控制,TCP采用滑动窗口协议和拥塞控制算法。同时,TCP需要参考链路层,限制从接口传输的帧的最大大小,这也限制了TCP所能生成的分段的最大大小。此外,TCP还需要发现数据包到达目的地路径上的最小传输单元(MTU),因为如果中间路由器的某个链路提供的MTU低于我们接口的MTU,数据包将在路由器处被分片,从而影响TCP和网络性能。
应用程序无需了解数据是如何发送到对等方的,它只需通过TCP套接字以块的形式写入数据,其余的工作由TCP分段单元处理。当数据到达TCP层时,分段单元会将大块数据拆分成每个大小为1 mss(最大段大小)的小单元,并将它们排队到套接字的发送队列中。然后,会应用诸如Nagle算法、滑动窗口协议和拥塞窗口等算法来检查新分段是否可以传输。
2. TCP分段单元发送数据
2.1 无分散聚集支持的分段单元功能
当应用程序想要通过TCP套接字写入数据时,内核内部最终会调用 tcp_sendmsg() 函数。分段单元的基本原理是将大块数据拆分成每个大小为1 mss的小块。具体步骤如下:
1. 获取mss :在第1035行调用 tcp_current_mss() 获取缓存的mss。
2. 获取用户缓冲区信息 :在第1038行和第1039行分别获取用户缓冲区的数量和用户
超级会员免费看
订阅专栏 解锁全文
4

被折叠的 条评论
为什么被折叠?



