深入解析 TCP 接收机制及队列处理
1. TCP 接收概述
在网络通信中,TCP 协议承担着可靠数据传输的重要任务。应用程序在与 TCP 套接字交互时,可能会请求内核从 TCP 套接字接收普通数据或紧急数据。内核的套接字实现需要区分这两种不同类型的请求。当应用程序希望将紧急字节作为带外(OOB)数据接收时,必须在适当的时间进行读取,否则可能会丢失该数据。
TCP 将数据视为字节流,只有按顺序接收的字节才会被 TCP 接收缓冲区排队。乱序的数据会进入单独的队列,且该队列中的数据不能用于满足应用程序的请求。
内核处理接收到的 TCP 数据可分为两部分:若应用程序被阻塞以读取数据,且接收到按顺序排列的数据,TCP 会直接将数据复制到用户缓冲区;另一种方式是将按顺序排列的数据排队到套接字的接收队列,应用程序的请求将从接收队列中得到满足。内核为接收到的 TCP 段实现了排队机制,且实现了多个队列。
2. 排队机制
2.1 接收 TCP 段的队列
接收传入 TCP 段的队列主要有三个:
- 积压队列( sk → backlog )
- 预队列( tp → ucopy.prequeue )
- 接收队列( sk → receive_queue )
其中, sk → receive_queue 包含已处理的 TCP 段,即所有协议头都已被剥离,数据准备好复制到用户应用程序。该队列只包含按正确顺序接收的数据段,而另外两个队列中的 TCP 段则需要进行处理。 </
超级会员免费看
订阅专栏 解锁全文
1056

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



