这一篇TCP总结请收下 (3)

TCP首部固定长度是20字节,下面还有4字节是可选的。内容很多,但其中有一些我们比较熟悉的:源端口,目标端口。嗯?socket不是还需要IP进行定位吗?IP地址在网络层被附加了。其他的内容后面都会慢慢讲解,作为一篇总结文章,这里放出查阅表,方便复习:

头部参数 字节数 作用
源端口和目的端口字段   各占两字节   socket是通过端口号和IP号来进行定义,这里表示发出消息的主机端口以及接收消息的目标主机端口  
序号字段   4 字节   TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。长度4字节,所以序号的范围是【0,2^32 - 1】  
确认号字段   4字节   是期望收到对方的下一个报文段的数据的第一个字节的序号。  
数据偏移(即首部长度)   4位   指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位(以 4 字节为计算单位)  
保留字段   6位   保留为今后使用,但目前应置为 0  
紧急 URG   1位   当 URG =1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)  
确认 ACK   1位   只有当 ACK=1 时确认号字段才有效。当 ACK = 0 时,确认号无效。当收到报文需要向发送方发送确认报时设置该标志位为1。  
推送 PSH   1位   接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。  
复位 RST   1位   当 RST =1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。  
同步 SYN   1位   同步 SYN = 1 表示这是一个连接请求或连接接受报文。  
终止 FIN   1位   用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接  
窗口字段   2字节   发送方接收缓存区剩下的字节 数,注意单位是字节。  
检验和   2字节   检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。主要是检验报文是否发生了错误,如某个‘1’变成了‘0’。  
紧急指针字段   2字节   指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)  
选项字段   长度不定   TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”  
填充字段   不定   这是为了使整个首部长度是 4 字节的整数倍。  

选项字段中包含以下其他选项:

选项 作用
窗口扩大选项   占 3 字节,其中有一个字节表示移位值 S。新的窗口值等于 TCP 首部中的窗口位数增大到 (16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小  
时间戳选项   占 10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节),主要是用于计算数据报在网络中传输的往返时间。  
选择确认选项   接收方收到了和前面的字节流不连续的两个字节块,需要告诉发送方目前已经接收到的数据报范围。每一个段需要两个边界,一个边界需要4字节来表示,选项字段最长是40字节,所以最多可以表示4个已接收的字段。  

讲完下面内容,再回来看这些字段就熟悉了。

TCP面向字节流特性

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxxgs.html