TCP中seq ack号计算

TCP包头格式

seq 和 ack 号存在于TCP报文首部中,是把控数据包顺序和丢包现象。 seq是序号,ack是确认号,都占有4个字节(于大写ACK不同,ACK是报文中控制位中之一,占用一位,仅当ACK = 1时 ack字段才有效。建立TCP连接以后,所有报文中的ACK字段都为1。)

seq:占用4个字节 即2^32位,所以序号范围为[0,2^32-1],序号增加到2^32-1之后,下一个序号又回到0,TCP是可靠的面向连接,通过TCP传送的字节流中的每个字节都按照顺序编号,而报头中的序号字段值则是本报文段数据的第一个字节的序号。

ack:占用4个字节,期望收到对方下一个报文的第一个数据字节的序号。

一、 建立TCP连接的三次握手过程中seq和ack的值

        A                                              B

1、建立连接请求报文

请求端A——>[SYN=1,ACK=0,seq=x,ack=0]——>服务端B

当请求端要和服务端通信时,A首先向B发送一个SYN=1(在TCP报文中的控制位SYN位置标志为1)和seq=x(x是随机数【范围0-2^32-1】)标记的包,请求和B建立连接。

2、回复建立连接请求报文 

请求端A<——[SYN=1,ACK=0+1,seq]<——服务端B

原文地址:https://www.cnblogs.com/gavin11/p/14392096.html