06-网络篇-socket三次握手,四次挥手说明

运行第9节的代码时,可以用wireshark软件对运行过程进行抓包,会发现客户端与服务器建立连接进行了三次握手,断开连接进行了四次挥手。

为什么建立连接是三次握手,为什么断开连接是四次挥手?

1.三次握手

bcbd8b6fd35b4e1a9e8f1a4e330791a1.png 

(1).客户端发送一个SYN=1, seq=J给服务器

(2).服务器发送SYN=1, ACK=1,ack=J+1, seq=K

(3).客户端再发送ACK=1,ack=K+1

为什么要采用3次握手,原因如下。

我们在传输数据时,首先要先确认客户端与服务器发送数据和接受数据的能力是否正常。

第一次握手,服务器知道客户端发送能力和服务端接受能力正常。

第二次握手,客户端知道客户端发送能力正常,客户端知道客户端接收能力正常,客户端知道服务器发送能力和接受能力正常。

第三次握手,服务器知道客户端接受能力和服务器发送能力正常。

通过三次握手:

1.客户端知道客户端与服务器发送与接受能力均正常。

2.服务器知道客户端与服务器发送和接受能力均正常。

 

2.四次挥手

41e7098a731c4731925cc3533aa2efec.png 

四次挥手原理:

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;

第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;

第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;

第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

为什么是4次挥手而不是3次挥手?

原因如下:

第一次挥手,客户端告诉服务端,我没有数据传了。

第二次挥手,服务器告诉客户端我知道了。

第一次,第二次挥手,客户端关闭了发送能力,但客户端的接受能力还存在。

若服务端需要传输给客户端的数据传输完后,服务器会开始第三次挥手

第三次挥手,服务器告诉客户端,我没数据了。

第四次挥手,客户端告诉服务器,我收到了。

四次挥手后,客户端和服务器均知道自己和对方再无数据传输,连接也就断开了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值