天天看点

网络基础知识(TCP/UDP报文格式)四

1.TCP报文格式

网络基础知识(TCP/UDP报文格式)四

源端口号:

占用16位

,报文来自哪个端口。

目的端口号:

占用16位

,报文要传输到哪个端口。

Seq序列号:

占用32位

,一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。假设主机A和主机B进行TCP通信,A发送给B的第一个TCP报文段中,序号值被系统初始化为某个随机值ISN(Initial Sequence Number,初始序号值)。那么在该传输方向上(从A到B),后续的TCP报文段中序号值将被系统设置成ISN加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如,某个TCP报文段传送的数据是字节流中的第1025~2048字节,那么该报文段的序号值就是ISN+1025.另外一个传输方向(从B到A)的TCP报文段的序号值也具有相同的含义。

Ack确认序列号:

占用32位

,用作对另一方发送来的TCP报文段的响应。其值是收到的TCP报文段的序号值加1。假设主机A和主机B进行TCP通信,那么A发送出的TCP报文段不仅携带自己的序号,而且包含对B发送来的TCP报文段的确认号。反之,B发送出的TCP报文段也同时携带自己的序号和对A发送来的报文段的确认号。

头长度:

占用4位

,标识该TCP头部有多少个字节。因为4位最大能标识15,所以TCP头部最长是60字节。

保留位:

占用6位

,很少使用,一般为0。

控制位: URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能;

标志位(占用1位) 功能
URG 紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
ACK 确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
PSH push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
RST 重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
SYN 同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
FIN finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

窗口:

占用16位

,滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

校验和:

占用16位

,奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

紧急指针:

占用16位

,只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

选项和填充: 最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

2.UDP报文格式

网络基础知识(TCP/UDP报文格式)四

源端口号:

占用16位

,报文来自哪个端口。

目的端口号:

占用16位

,报文要传输到哪个端口。

UDP长度:

占用16位

,UDP报文的字节长度(包括首部和数据)。

校验和:

占用16位

,检验UDP首部和数据部分的正确性。

继续阅读