25、深入解析 TCP 接收机制及队列处理

深入解析 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 段则需要进行处理。 </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值