一篇搞懂TCP“三次握手,四次挥手”

 

在排查网络通讯故障时,经常会说到“三次握手、四次挥手”,有人会问网络通讯为什么会握手和挥手,其实这只是一种通过拟人的手法让大家更好的来理解网络通讯中最关键的两个步骤,即网络建链和断链。

===========================================================

 

在搞懂TCP“三次握手、四次挥手”的具体过程前,有必要先对TCP/IP报头中的关键信息进行了解。

IP报头

IP报头信息

信息作用和含义

源地址

发送方的IP地址

目标地址

接受方的IP地址

TCP报头

TCP报头信息

信息作用和含义

源端口

发送方的端口

目标端口

接受方的端口

序列号

用seq来标识从源端向目的端发送的字节流,发起方发送数据时对此进行标记

确认号

用ack来标识并确认前一次接收到数据的序列号,Ack=Seq+1

控制位

URG:紧急指针

ACK:确认序号

PSH:尽快推送

RST:重置连接

SYN:建立连接

FIN:释放连接

 

===========================================================

 

当我们对这些信息有所了解后,接下来就来讲讲建链为什么要三次握手,而断链又为什么要四次挥手,它们在交互过程中又分别都做了什么?

 

三次握手

所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的,其主要目的是为了减少服务器开销和接收到失效请求发生的错误。

 

握手过程图解:

第一次握手:发送方发送建立TCP连接的请求报文,其中报文中包含seq序列号,由发送方随机生成,报文中的SYN标识置为1,表示需要建立连接。

例如:SYN=1,seq=x

 

第二次握手:接受方回复发送方发送的建立TCP连接的请求报文,其中报文包含seq序列号,由接收方随机生成,报文中的SYN、ACK标识置为1,ack序列号为前一次接收到的seq序列号上加1。

例如:SYN=1,ACK=1,seq=y,ack=x+1

 

第三次握手:发送方收到接收方的回复后再次回复,.其中报文包含seq序列,在自己原有的序列号加1,报文中的ACK标识置为1,ack序列号为前一次接收到的seq序列号上加1。

例如:ACK=1,seq=x+1,ack=y+1

 

 

四次挥手

所谓的四次挥手即TCP连接的释放。连接的释放必须是一方主动释放,另一方被动释放,TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"挥手"传输的。

 

挥手过程图解:

第一次挥手:发送方发送断开TCP连接的请求报文,其中报文中包含seq序列号,由发送方随机生成,报文中的FIN标识置为1,表示需要断开连接。

例如:FIN=1,seq=x

 

第二次挥手:接受方回复发送方发送的断开TCP连接的请求报文,其中报文包含seq序列号,由接收方随机生成,报文中的ACK标识置为1,ack序列号为前一次接收到的seq序列号上加1。

例如:ACK=1,seq=v,ack=u+1

 

第三次挥手:接受方回复发送方后,不会马上断开,服务端会确保断开前,所有传输到发送方的数据已经传输完毕,一旦确认传输数据完毕,就会再次进行回复,其中报文包含seq序列号,由接收方随机生成,报名中的FIN、ACK标识置为1,ack序列号为前一次接收到的seq序列号上加1。

例如:FIN=1,ACK=1,seq=w,ack=u+1

 

第四次挥手:接受方回复发送方发送的断开TCP连接的请求报文,其中报文包含seq序列号,在自己原有的序列号加1,报名中的ACK标识置为1,ack序列号为前一次接收到的seq序列号上加1。

例如:ACK=1,seq=u+1,ack=w+1

 

===========================================================

总结:以上初步介绍了TCP三次握手和四次挥手的过程分解说明,它能够帮忙我们在排查网络通讯故障中更快速的定位问题,由此可以发现,作为技术人员更需要加强基础原理知识的学习,这样在遇到困难或问题时才能更有效的做出判断以及解决。

注:文章均原创,部分图片及文字来源于网络,若涉及版权,请联系作者,将第一时间备注出处,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三次握手和四次挥手TCP协议中用于建立和断开连接的过程。在TCP连接建立时,客户端和服务器之间需要进行三次握手,以确保双方都能够正常通信。具体过程如下: 1. 客户端向服务器发送一个SYN包,其中SYN标志位被设置为1,表示客户端请求建立连接。 2. 服务器收到SYN包后,向客户端发送一个ACK包,其中ACK标志位被设置为1,表示服务器已经收到了客户端的请求,并准备好建立连接。同时,服务器也向客户端发送一个SYN包,其中SYN标志位被设置为1,表示服务器也请求建立连接。 3. 客户端收到服务器的SYN包和ACK包后,向服务器发送一个ACK包,其中ACK标志位被设置为1,表示客户端已经收到了服务器的确认,并准备好建立连接。 在TCP连接断开时,客户端和服务器之间需要进行四次挥手,以确保双方都能够正常断开连接。具体过程如下: 1. 客户端向服务器发送一个FIN包,其中FIN标志位被设置为1,表示客户端请求断开连接。 2. 服务器收到FIN包后,向客户端发送一个ACK包,其中ACK标志位被设置为1,表示服务器已经收到了客户端的请求,并准备好断开连接。 3. 服务器向客户端发送一个FIN包,其中FIN标志位被设置为1,表示服务器也请求断开连接。 4. 客户端收到服务器的FIN包后,向服务器发送一个ACK包,其中ACK标志位被设置为1,表示客户端已经收到了服务器的请求,并准备好断开连接。 通过三次握手和四次挥手的过程,TCP协议能够确保双方能够正常建立和断开连接,从而保证数据的可靠传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值