TCP的三次握手和四次挥手

TCP协议三之连接管理

TCP的建立连接过程(三次握手)和断开连接过程(四次挥手)


TCP协议一: TCP协议之特点和首部格式
TCP协议二: TCP协议之可靠传输
TCP协议四: TCP协议中的几个机制



连接管理

三次握手

1.建立连接

建立连接即通信双方各自要记录对方的信息,彼此之间要相互认同

当A向B表白,接下来B接收了A的表白,此时A有一个认同,B是A的女朋友

但是想要成为男女朋友,得双方都有一个认同,此时B也对A表白,这个时候B有一个认同,A是B的男朋友

两个认同同时存在,这时候才真正建立关系,相当于连接建立完毕,此处把这个过程的每次通信,称为一次“握手”

在这里插入图片描述

但是上面可以看到A和B是进行了四次交互,但是为什么又说建立连接是三次握手,因为其中的两次是可以合并的,为什么需要合并,因为封装分用两次数据,一定比封装分用一次数据,成本更高,例如:你在一个淘宝店铺买了多个商品,此时店家会分多个快递,还是一个快递,显然是一个快递,因为一个快递,只需要一次包装成本,一次快递费。

在这里插入图片描述

2.是否可以为两次握手

如果只有两次握手,是否可以建立连接的过程? ---- 不行,因为只有两次握手,只有A明白B是A的女朋友,但是B还没有明白,没有完全建立认同,所以要进行三次握手。

在这里插入图片描述

3.小结:

三次握手,本质上是"四次"交互,通信双方,各自要向对方发起一个"建立连接"的请求,同时再各自向对方回应一个ack,一共是四次信息交互,但是中间两次可以合并,因此构成"三次握手"。
在这里插入图片描述

SYN:客户端主动给服务器发起的建立连接请求,称为"SYN(synchronize)",同步报文段
ACK:应答报文段

4.其他作用

三次握手另外一个重要作用:验证通信双方各自的发送能力和接受能力,是否正常,一定程度的保证了TCP传输的可靠性(辅助作用)

例如两个人在开黑打游戏,需要连麦的时候,测试麦时,就会出现以下情况,需要通过三次握手来进行测试麦的情况。
在这里插入图片描述

5.TCP的状态

在这里插入图片描述
1.LISTEN:服务器状态
表示服务器已经准备就绪,随时可以有客户端来建立连接,相当于手机开机,信号良好,可以随时有人来打电话进来

2.ESTABLISHED 客户端和服务器都有
表示连接建立完成,可以正常通信,相当于电话拨打过去,已经接通

6.三次挥手的意义

1.让通信双方各自建立对对方的"认同",
2.验证通信双方各自的发送能力和接受能力是否OK
3.在握手过程中,双方来协商一些重要的参数(TCP通信过程中,有些数据,通信双方要相互同步,此时就需要有交互过程,利用三次握手的机会,来完成数据的同步)

四次挥手

四次挥手即通信双发各自向对方发起一个断开连接的请求,再各自给对方一个回应

在这里插入图片描述

1.断开连接

比如上面的A和B两人因为情感不和,所以分手了,根据下面这个流程连接彻底断开,彻底分手。

在这里插入图片描述

注意:在断开连接时,中间两次通常情况不能合并(特殊情况下可以,即两个数据发送实际相同时,才可以合并),例如:以发快递为例,如果三个快递在统一时间下单的,就可以一个包裹发过来,但是三个快递我是分别分了三周买那就不能同时发货了

2.理解合并和不能合并

在三次挥手中的中间两次能够合并,是因为他们是在同一时机的,三次握手三次交互过程,是在纯内核中完成的(应用程序无法感知,也不能干预),服务器的系统内核收到syn之后,就会立即发送ack+syn

在这里插入图片描述

在四次挥手中,FIN的发起,不是由内核控制的,而是由应用程序,调用socket的close方法(或者进程退出)才会触发FIN,ACK则是由内核控制的,是收到FIN之后,立即返回ACK,ACK和FIN会存在一个时间差

在这里插入图片描述

3.涉及的TCP状态

1.CLOSE_WAIT

出现在被动发起断开连接的一方,等待关闭(等待调用close方法关闭socket),建立连接一定是客户端主动发起请求,断开连接,可能是客户端主动发起,也有可能是服务器主动发起
2.TIME_WAIT

出现在主动发起断开连接的一方,假设是客户端主动断开连接,当客户端进入TIME_WAIT状态的时候,相当于四次挥手已经结束,此时这里的TIME_WAIT要保持当前的TCP连接状态不要立即释放

不要立即释放连接的原因,当最后一个ACK发送出去,可能会产生丢包,TIME_WAIT会保留一定时间,从而处理最后一个ACK丢包的情况,能够在收到重传的FIN之后,再进行ACK响应,但是等了一段时间后欧,也没有收到重传的FIN,此时就认为,最后一个ACK没丢,于是就彻底的释放连接

只要进入TIME_WAIT状态,一定会断开连接,因为TIME_WAIT发生在挥手两次之后,挥手已经过半,不可逆

在这里插入图片描述

4.四次挥手要做的事情

1)A发送FIN
2)B发送ACK
3)B发送FIN
4)A发送ACK

站在A的角度来看,进入TIME_WAIT的时候,这四个工作已经完成,正常情况下,A已经完成使命,除非出现丢包异常的情况,A还需进行额外保障,而TIME_WAIT就是这个额外保证,TIME_WAIT具体保持多长时间,就真正释放,约定的一个时间就是2MSL(MSL是指互联网上,两个节点之间,数据传输消耗的最大时间),没有具体时间,通常情况下是60s,但是也不能保证

在这里插入图片描述


总结

TCP作为一个有连接的协议,需要建立连接和断开连接,其建立连接就是三次握手,断开连接就是四次挥手,理解三次挥手的意义:1.让通信双方各自建立对对方的"认同",2.验证通信双方各自的发送能力和接受能力是否OK,3.在握手过程中,双方来协商一些重要的参数;四次挥手,理解为什么是四次挥手,理解FIN和ACK的传输机制以及TIME_WAIT意义和作用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值