TCP报文格式
TCP首部
-
源端口和目的端口,各占16bit
-
序号:SEQ序号。给发送的每个数据包标上序号。
-
确认号:ACK序号。是指即将接收的数据包序号。注意,这里指的是序号不是标志位
-
数据偏移:占4bit,指TCP首部第一个字节和数据的第一个字节之间相差的字节数。
-
标志位:共有六个。
-
URG:紧急比特,当URG=1时,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送。
-
ACK:确认比特,当ACK=1时,确认号字段才有效。
-
PSH:推送比特,告诉接收端此报文段应尽快提交给应用进程,而不再等到整个缓存都填满再提交。
-
RST:复位比特,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
-
SYN:同步比特,当SYN=1时,表示建立连接,在TCP的前两次握手中SYN置1.
-
FIN:终止比特,当FIN=1时,表示此报文段的发送端已发送完毕,要求释放连接。
-
窗口字段:占16bit。双方说出自己的数据缓存区大小,单位为byte,然后约定一个比两者中较小的大小还要小的数值作为双方通信的缓存区大小。防止出现发送方一次可以发送30000个数据,接收方一次只能接收20000个数据
-
检验和字段:占16bit。检验和字段检验的范围包括首部和数据两部分
-
紧急指针字段:占16bit。指出此报文段中紧急数据的最后一个字节的序号。
-
选项字段:长度可变。TCP只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size)。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。1
-
保留字段:占6bit。保留为今后使用,但目前应置为0。
选项字段和保留字段似乎只出现在含有SYN信号的报文段中
三次握手
-
第一次握手:客户端发送一个数据包,其SYN置1,发送序号SEQ=X,是随机生成的。
-
第二次握手:服务器返回数据包应答。其SYN和ACK均置1,同时将ACK序号+1,即ACK=X+1,发送序号SEQ=Y,随机生成。
-
第三次握手:客户端再次发送确认数据包,其SYN置0,ACK置1,同时将ACK序号加1,即ACK=Y+1,发送序号上次握手的ACK序号,即SEQ=X+1。
四次挥手
-
第一次挥手:客户端发送一个数据报文,其标志位FIN和ACK置1,序号SEQ=X,确认序号ACK=Y。2Client进入FIN_WAIT_1状态。
-
第二次挥手:服务器返回一个确认包,其标志位ACK置1,序号SEQ=Y,确认序号ACK=X+1。Server进入CLOSE_WAIT状态。
-
第三次挥手:服务器断开TCP连接,并发送一个数据包。其标志位FIN和ACK置1,Server进入LAST_WAIT状态。3
-
第四次挥手:客户端收到服务器的断开请求后,Client进入TIME_WAIT状态,发送一个确认包。其标志位ACK=1,发送序号SEQ=X+1,确认序号ACK=Y+1。Server进入CLOSED转台。
-
https://blog.csdn.net/guizaijianchic/article/details/77524825
-
序号是随机生成的。
-
有资料说这里的发送序号要加1,但我用WireShark抓包发现第三次和第二次的SEQ以及ACK的数值并没有改变。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)