tcp的三次握手与四次挥手

相比于socket的udp传输协议来讲,tcp在数据的传输过程中可以保证数据的安全和稳定,这些都是由于tcp本身的特性所决定的:在建立连接时的三次握手,在数据传输过程中对数据的实时校验,以及在断开连接时客户端与服务器的四次挥手。正是有了这些通信过程的校验,使得tcp可以安全地为用户传输数据。下图为tcp完整的通信过程解析。



在最初,客户端与服务器还没有建立连接。此时,服务器的accept处于阻塞的状态,一直在等待新的客户端连接;而客户端的connect连接服务也处于阻塞状态,等待用户主动向客户端发起连接请求。

当客户端主动连接服务器,connect启动,这是三次握手中的第一次:客户端向服务器发送了SYN请求,并发送了一个随机的数据''seq=x'';

若服务器收到客户端的请求信息,会向客户端回复信息,这是第二次握手:服务器在客户端发来的数据基础上发了一个新的ACK,并将客户端的发送来的SYN信息改为:‘’seq=y‘’,发送到客户端;

客户端收到服务器的反馈信息后,确认数据的一致性,然后再向服务器反馈ACK的值:‘’y+1‘’,此时服务器收到客户端的消息,在确认数据正确后,完成第三次握手。到这时,客户端与服务器正式建立了连接,可以进行数据的传输与发送了。


一般在面试中,可以将tcp的三次握手总结为一句话:客户端发出SYN连接请求,服务器返回ACK应答并且有新的SYN请求,然后客户端返回ACK应答给服务器。


 在理解四次挥手的时候,由于tcp是全双工的传输协议,可以假想客户端与服务器之间,具有一个双线的连接通道。

客户端A发送一个“FIN”报文段给服务器B,其中该报文中的FIN标志位被置为1;
服务器B收到了FIN报文段后,它会向客户端发送“ACK”报文段,表示允许断开该TCP连接了。同时它还会通知高层应用程序,客户端已经请求释放连接。此时客户端已经不再会给服务器发送数据了,但是服务器到客户端的TCP连接还没有断开,所以服务器还是可以向客户端发送数据,此时状态称为“半关闭状态”;
当服务端的高层程序已经没有数据要发送了,它会通知TCP可以断开连接了,这时候,服务器就会向客户端发送FIN报文段;

客户端收到FIN报文段后,客户端会发送“ACK”报文段给服务器,同时客户端会进入一个叫“TIME-WAIT”的状态,需要再等待两个报文寿命(MSL)时间后,才进入最后的“CLOSE”状态。

当然,tcp的四次挥手也可以总结为一句话:客户端发出断开连接请求FIN,然后服务器给出ACK应答给客户端,然后服务器向客户端发出断开连接请求,然后客户端向服务器返回ACK应答。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值