浅谈:三次握手四次挥手

三次握手(建立连接)

在这里插入图片描述

三次握手其实就是客户端与服务器端之间进行的三次数据报文发送(客户端向服务端告白)。
1.客户端将SYN置1,产生序列号seq=x,将该数据包(情书)打包发送给服务器端,请求服务器端连接(我喜欢你,在一起吧)。
2.服务器收到请求后,由标志位SYN=1知道客户端请求连接,于是将SYN、ACK都置为1,ack=x+1,产生序列号seq=y,打包发送给客户端,表示自己已收到请求,表示我愿意(好的)。
3.客户端收到服务器的数据包后,很开心,于是将ACK=1,ack=y+1,产生序列号seq=x+1打包发给服务器,说好的,你情我愿那就在一起吧。

为什么要建立三次握手,不是两次就够了吗?不是客户端发送请求,服务器端收到就可以了吗?
其实不然,因为网络这一不确定性因素的存在。
如果只握手两次:当客户端向服务器端发送请求了,但是因为网络原因却受阻停留在了网络中,这时候客户端就在等服务器端回应,当然没有回应,因为服务器就还没收到,由于存在超时重传的过程,客户端会再向服务器端发送第二次请求,这时客户端收到了,客户端回应请求,两次握手就建立连接了,但是过会,网络又好了,客户端收到了阻塞在网络中的第一次请求,那么客户端服务端又会建立一次连接,会消耗不必要的资源。但是如果需要三次握手才能建立连接,那么客户端收到回应后需要再次确认,由于已经失效客户端就不会确认建立二次连接。

四次挥手(释放连接)

在这里插入图片描述
四次挥手,客户端与服务端断开连接(分手了)。
1.客户端将FIN=1,产生序列号seq=u,打包发送给服务器,请求断开连接。
2.服务器端收到数据包,根据FIN=1,知道客户端请求断开,于是将ACK=1,ACK=U+1,产生序列号seq=v发送给客户端,确认断开。
3.客户端没有信息要发送的时候,将FIN,ACK=1,ack=u+1,产生序列号seq=w打包发给客户端,等待客户端确认。
4.客户端收到后,将ACK=1,ACK=w+1,产生序列seq=u+1,确认请求。此时客户端进入等待状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。

为什么最后客户端要等待2MSL?
同样因为网络问题,如果在第4步客户端发送的请求阻塞在了网络中,那么服务器会一直等待客户端的确认请求,直到发送下次重传。但是客户端此时已经关闭了,这会造成服务器一直在等待状态。所以需要客户端发送确认请求后再等2MSL秒,这里1MSL秒等于一次发送到接收整个过程的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值