我的问题与发送设备上的TCP段创建有关。
我对TCP的理解是它会缓冲“非紧急”字节流量,直到达到某种内部超时......或者达到MSS。然后段完成并传输到电线上。
我的问题:如果TCP一直在缓冲“正常/非紧急”字节,然后从上层进程收到一串“紧急”字节,那么:
这个问题涉及一个可能的TCP段,其中“紧急”位设置但不是“推”位。我对RFC 793的理解是它们彼此互斥(尽管通常设置在一起)。
谢谢!
答案 0 :(得分:0)
我对TCP的理解是它会缓冲“非紧急”字节流量,直到达到某种内部超时
如果启用了Nagle算法,默认情况下是这样。否则它只会立即发送数据,但会受到窗口等的影响。
...或达到了MSS。然后段完成并传输到电线上。
不是真的。它将在可能的情况下进行传输,仅受Nagle算法,窗口,拥塞控制等的影响。
我的问题:如果TCP一直在缓冲“正常/非紧急”字节,然后从上层进程收到一串“紧急”字节,那么:
- 终止缓冲“非紧急”字节,发送非紧急段,并开始创建新的TCP段,从“紧急”字节开始......或......
- 继续构建当前缓冲的部分段,将紧急字节放在正常字节之后的段中间位置。
醇>
都不是。往上看。从实际发送的角度来看,紧急数据没有“紧急”。
RFC 1122(第4.2.2.4节)表明紧急指针指向段中紧急数据的最后字节(推断非紧急数据可以跟踪同一段内的紧急数据)。
正确,除非你的意思是“暗示”。
它没有说明一个段是否必须与紧急数据开始......或者,如果紧急数据可能是“中间”。
不要求段必须以紧急数据开头,因此不需要。
这个问题涉及一个可能的TCP段,其中“紧急”位设置但不是“推”位。
为什么呢? PUSH位对于现代TCP实现基本上没有意义,并且被忽略,并且你无法检测段边界,那你为什么要关心呢?
我对RFC 793的理解是它们彼此互斥(尽管通常设置在一起)。
为什么呢?请解释一下。