TCP数据处理与内存管理详解
1. TCP数据接收队列处理
在TCP数据接收过程中,我们可以根据缓冲区的序列号和序列空间,精确找到下一次读取数据的起始字节位置。下面详细介绍不同读取请求下的处理情况。
1.1 应用程序请求1 mss(n字节)数据
在第二次读取时,应用程序请求n字节(即1 mss)的数据。此时,接收队列中的第一个缓冲区已被完全消耗,它会从队列中解除链接。接收队列中的第二个缓冲区仅剩余(n - X)字节,这些字节将在第三次读取时被消耗。
1.2 应用程序请求(n - X)字节数据
第三次读取(n - X)字节后,接收队列的状态是所有数据都已被消耗,此时复制序列与接收下一个序列相同。
1.3 分页缓冲区的数据消耗
假设缓冲区共有n + 2页数据,其中n字节来自线性数据区域,另外两页来自分页数据区域。应用程序分两次读取,分别请求n字节和1页数据。
- 第一次读取n字节后,这些字节从线性数据区域消耗。
- 第二次读取1页数据后,下一次读取将从下一页的开头开始。
2. TCP紧急字节处理
TCP紧急字节有两种读取模式:
- Inline(内联)
- Out - of - band(带外)
默认情况下,套接字接收紧急字节的模式是带外模式。带外数据是套接字级别的抽象,与TCP字节流无关。在两种模式下,TCP都将紧急字节作为正常数据进行传输和接收。紧急字节接收后,其读取位置取决于接收模式。
超级会员免费看
订阅专栏 解锁全文
1336

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



