TCP三次握手和四次挥手抓包详解

这是我在ensp上搭建的小实验,并通过Wireshark抓包观察TCP握手过全过程;

服务器配置

图2

 

客户端访问

图3

抓包观察

三次握手

图4

1)第一次握手

TCP 协议规定,SYN 置 1 的报文段不能携带数据,但是要消耗一个序号

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;

图5

2)第二次握手

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

图6

3)第三次握手 

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,也通知其上层应用进程:TCP连接已经建立,客户端与服务器才正式开始传送数据。

四次挥手

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。

TCP 的标准规定,FIN报文即使不携带数据信息,也需要消耗一个seq

图7

 图8

1)第一次挥手

 客户端给服务端发送TCP包,用来关闭客户端到服务端的数据传送,FIN=1,ACK=1,seq=158,ack=308。

图9

2)第二次挥手

 服务端收到客户端的FIN报文段后,回应一个应答,ACK=1,seq=308,ack=159,及y+1。

图10

3)第三次挥手

 客户端口连接已释放,第三次握手是服务器端释放连接表示我的数据已经传输完了,发送FIN报文段,FIN=1,ACK=1,seq=308,ack=159。

图11

4)第四次挥手

 客户端收到服务端的FIN报文后,回应应答,发回ACK确认,ACK=1,seq=159,ack=309。

end

猜你喜欢

转载自blog.csdn.net/weixin_54223979/article/details/124898844