画图带你理清TCP协议三次握手和四次挥手(一)

pivoteic
发布于 2022-6-14 16:31
浏览
0收藏

 

TCP 特性
1.确认应答机制 (ACK)
2.超时重传
3.建立连接 - 三次握手 
4.断开连接 - 四次挥手 


1.确认应答机制 (ACK)

 

确认应答是可靠传输的最核心机制,接收方反馈一个应答报文(ACK),表示已收到

 

假设现在 A 想去 B 家里玩游戏,于是 A 给 B 发消息,若消息没有出现错误且顺序正确

结果如下所示:

画图带你理清TCP协议三次握手和四次挥手(一)-鸿蒙开发者社区

但网络传输比较复杂,由于数据的长度不同或者传输网络不同,可能存在一种情况"后发先至",也就是说先发送的数据不一定先到达,接收方接收到的数据可能是乱序的,如图:

画图带你理清TCP协议三次握手和四次挥手(一)-鸿蒙开发者社区

当 B 回复 A 的消息时,若存在对应关系,那么即使出现了"后发先至"的情况,也能顺利的确立应答

画图带你理清TCP协议三次握手和四次挥手(一)-鸿蒙开发者社区

上述方法,虽然可以顺利的确立应答,但额外的信息很多,占用的带宽很多

 

下面如图,针对发送的请求进行编号,应答的时候也针对编号进行应答,这样既能保证数据传输没有歧义,也不会浪费太多的空间和带宽

画图带你理清TCP协议三次握手和四次挥手(一)-鸿蒙开发者社区

上述情况不严谨,真实的 TCP 还不一样,TCP 是面向字节流的,此处的编号并不是按照一条两条来编的,而是按照字节来编号的 (每个字节有一个编号)

画图带你理清TCP协议三次握手和四次挥手(一)-鸿蒙开发者社区

确认应答是一种特殊的报文(ACK),所谓的应答报文,本质上就是 ACK 字段为1 的报文,此时报头中的"确认序号"字段才是生效的

 

初始序号是随机的,为了防止网络攻击;如果发送多个数据,每个数据都会带着一个序号

 

接收方收到数据后,是知道数据所带着的序号的,根据序号给出确认序号(告诉发送方下次给我发的序号),发送给发送方,发送方就知道接收方收到了哪些数据

画图带你理清TCP协议三次握手和四次挥手(一)-鸿蒙开发者社区

文章转自公众号:三友的java日记

标签
已于2022-6-14 16:31:38修改
收藏
回复
举报
回复
    相关推荐