TCP FIN 字节值?

TCP FIN byte value?

我的问题实际上分为两个部分:

从发件人的角度来看,

  1. 除了 TCP header FIN 标志之外,TCP 层是否真的在流中注入(或更像是附加,因为它应该在流的末尾)一个人工字节,意思是这个字节是 TCP 负载的一部分?
  2. 如果是,这个字节的值是多少?

从接收者的角度来看,

  1. TCP 层和应用程序都需要知道这个 FIN flag/byte。那么是不是TCP层只看FIN标志,没有对流中的字节进行特殊处理呢?
  2. 如何通知申请?通过 FIN 标志,或者,通过流中的这个特殊字节?
  3. 什么时候通知申请?就在 TCP 层接收到带有 FIN 标志的段时,或者,当该段最终冒泡到接收方的 TCP 缓冲区时?
  4. 如果在具有 FIN 标志的段最终在 TCP 缓冲区中冒泡之前应用程序没有得到特殊通知,这意味着 TCP 层必须以某种方式标记缓冲区,因为 TCP header 应该已经被剥离.那么FIN是怎么标记的呢?

in addition to TCP header FIN flag, is it true that TCP layer injects (or more like appending since it should be at the end of the stream) an artificial byte in the stream, meaning this byte is part of the TCP payload?

没有。没有实际注入的字节,只是增加了 TCP 序列号,因此很明显 ACK 是针对 FIN 而不是一些先前的数据。

这也意味着,如果接收到 FIN,则不会将特殊字节放入套接字缓冲区并传送给应用程序,而是将套接字缓冲区标记为完成。应用程序读取空的 "done" 套接字缓冲区将 return 缓冲区中没有更多数据并且永远不会,因此应用程序知道对等方已停止发送(即套接字关闭用于写入或套接字关闭)。