TCP紧急指针,缓冲区管理和“发送”调用

时间:2016-02-03 18:48:12

标签: networking tcp

我的问题与发送设备上的TCP段创建有关。

我对TCP的理解是它会缓冲“非紧急”字节流量,直到达到某种内部超时......或者达到MSS。然后段完成并传输到电线上。

我的问题:如果TCP一直在缓冲“正常/非紧急”字节,然后从上层进程收到一串“紧急”字节,那么:

  1. 终止缓冲“非紧急”字节,发送非紧急段,并开始创建新的TCP段,从“紧急”字节开始......或......
  2. 继续构建当前缓冲的部分片段,将紧急字节放在之后正常字节的中间位置。
  3. RFC 1122(第4.2.2.4节)表明紧急指针指向一个段中的紧急数据的最后一个字节(推断非紧急数据可以跟踪同一段内的紧急数据)。它没有说明一个部门是否必须与紧急数据相关......或者,如果紧急数据可能是“在中间”。

    这个问题涉及一个可能的TCP段,其中“紧急”位设置但不是“推”位。我对RFC 793的理解是它们彼此互斥(尽管通常设置在一起)。

    谢谢!

1 个答案:

答案 0 :(得分:0)

  

我对TCP的理解是它会缓冲“非紧急”字节流量,直到达到某种内部超时

如果启用了Nagle算法,默认情况下是这样。否则它只会立即发送数据,但会受到窗口等的影响。

  

...或达到了MSS。然后段完成并传输到电线上。

不是真的。它将在可能的情况下进行传输,仅受Nagle算法,窗口,拥塞控制等的影响。

  

我的问题:如果TCP一直在缓冲“正常/非紧急”字节,然后从上层进程收到一串“紧急”字节,那么:

     
      
  1. 终止缓冲“非紧急”字节,发送非紧急段,并开始创建新的TCP段,从“紧急”字节开始......或......
  2.   
  3. 继续构建当前缓冲的部分段,将紧急字节放在正常字节之后的段中间位置。
  4.   

都不是。往上看。从实际发送的角度来看,紧急数据没有“紧急”。

  RFC 1122(第4.2.2.4节)表明紧急指针指向段中紧急数据的最后字节(推断非紧急数据可以跟踪同一段内的紧急数据)。

正确,除非你的意思是“暗示”。

  

它没有说明一个段是否必须与紧急数据开始......或者,如果紧急数据可能是“中间”。

不要求段必须以紧急数据开头,因此不需要。

  

这个问题涉及一个可能的TCP段,其中“紧急”位设置但不是“推”位。

为什么呢? PUSH位对于现代TCP实现基本上没有意义,并且被忽略,并且你无法检测段边界,那你为什么要关心呢?

  

我对RFC 793的理解是它们彼此互斥(尽管通常设置在一起)。

为什么呢?请解释一下。