TCP三次握手和四次断开(异常)

Posted 武云医生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP三次握手和四次断开(异常)相关的知识,希望对你有一定的参考价值。

(一)ipv4报头:

 

1、Version:版本

 

2、IHL:首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项

 

3、Type of Service:服务类型

 

4、Total Length:总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。

 

5、Identification:标识,主机每发一个报文,加1,分片重组时会用到该字段

 

6、Flags:标志位

Bit 0: 保留位,必须为0。

Bit 1: DF(Don\'t Fragment),能否分片位,0表示可以分片,1表示不能分片。

Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。

 

7、Fragment Offset:片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。

 

8、Time to Live:生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。

 

9、Protocol:协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。

 

10、Header Checksum:首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。

 

11、Source Address:源IP地址

 

12、Destination Address:目的IP地址

 

13、Options:选项字段,用来支持排错,测量以及安全等措施

 

14、Padding:填充字段,全填0

 

 

(二)TCP报文包含6个标志位:

①urg:紧急指针

 

②ack:置1时确认

 

③psh:在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。

 

④rst:复位标志,这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包

 

⑤syn:同步标志,该标志仅在三次握手建立tcp连接时有效。

 

⑥fin:断开标志,带有该标志置位的数据包用来结束一个tcp回话,但对应端口仍处于开放状态,准备接收后续数据

 

 


(三)三次握手:(华为)

 


客户端:10.1.1.2
服务端:10.1.1.1 

(1)客户端首先发送syn的请求,将syn=置1,序列号为seq=0

(2)服务端收到之后,它自己也是发送的,所以syn设置为1,发送自己的序列号seq=0,并且进行ack回复,回复的序列号为客户端的序列号+1,那ack回复的就是0+1


(3)客户端发送syn=0,表示不是第一次连接,ack置1,ack=1,并且把服务器发过来的seq序列号+1,当做ack发送,那就回复ack=1,因为对方发过来的seq=0
回复的时候是把对方的seq,用ack+1来回复

 


(四)四次挥手(华为--但是华为官方文档和现实抓包有区别,是优化机制吗?)

 

 

①正常情况:

 

②不正常情况:

 

以上图例的证明过程(异常):

 

(1)客户端发送断开的请求,将fin=1,ack=1,并且都携带序列号86,ack=65,这里的ack只是一个标志位是对上个报文的确认,在这里没啥大作用(这一步是正常的)

 

(2)服务器收到之后也发送应答,序列号设置为对方的ack号码,而自己要发送的ack是将对方的序列号+1那就为86+1=87{但是华为没有,这里如果没加1,那能确定确实是收到了对方的吗?我想的是能把,因为我原本原样的回复过去了},表示自己收到对面发来的断开请求,但是华为做了强化,还会置位自己的 fin+=1{第一次确认按照正常的话是没有fin置位的}(异常)

 

(3)服务器在发送序列号是65是对方ack的的号码,自己要发送的ack是对方的序列号+1为ack=87

 

(4)客户端回复,并且fin也是置位的,回复的ack为对端的序列号+1那么ack为65+1=66,seq还是之前第一个报文发送的值{这里应该是对方ack的值}

 


(五)疑问点:
1、为什么在四次断开的时候服务器第一次发的报文里面也要携带fin置位了?

 

2、为什么在四次断开的时候服务器第一次发ack的报文不应该是加1吗?

 

以上是关于TCP三次握手和四次断开(异常)的主要内容,如果未能解决你的问题,请参考以下文章

一文搞懂TCP的三次握手和四次挥手

学习TCP/IP - TCP三次握手连接和四次握手断开连接

007_wireshark分析TCP的三次握手和四次断开

数据的连接与断开(TCP三次握手和四次握手)

tcp三次握手和四次挥手

tcp三次握手和四次握手