当前位置:首页 > 经验 >

tcp协议三次握手动画(tcp四次挥手)

来源:原点资讯(m.360kss.com)时间:2022-10-29 23:24:31作者:YD166手机阅读>>

专注于Java领域优质技术,欢迎关注

作者:老钱 占小狼博客

TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地地理解TCP交互的本质。

TCP 三次握手

TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。

tcp协议三次握手动画,tcp四次挥手(1)

张三首先向李四招手(syn),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑(ack)。张三看到李四微笑后确认了李四成功辨认出了自己(进入estalished状态)。

但是李四还有点狐疑,向四周看了一看,有没有可能张三是在看别人呢,他也需要确认一下。所以李四也向张三招了招手(syn),张三看到李四向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑(ack),李四看到对方的微笑后确认了张三就是在向自己打招呼(进入established状态)。

于是两人加快步伐,走到了一起,相互拥抱。

tcp协议三次握手动画,tcp四次挥手(2)

我们看到这个过程中一共是四个动作,张三招手--李四点头微笑--李四招手--张三点头微笑。其中李四连续进行了2个动作,先是点头微笑(回复对方),然后再次招手(寻求确认),实际上可以将这两个动作合一,招手的同时点头和微笑(syn ack)。于是四个动作就简化成了三个动作,张三招手--李四点头微笑并招手--张三点头微笑。这就是三次握手的本质,中间的一次动作是两个动作的合并。

我们看到有两个中间状态,synsent和synrcvd,这两个状态叫着「半打开」状态,就是向对方招手了,但是还没来得及看到对方的点头微笑。synsent是主动打开方的「半打开」状态,synrcvd是被动打开方的「半打开」状态。客户端是主动打开方,服务器是被动打开方。

  • syn_sent: syn package has been sent
  • syn_rcvd: syn package has been received
TCP 数据传输

TCP 数据传输就是两个人隔空对话,差了一点距离,所以需要对方反复确认听见了自己的话。

tcp协议三次握手动画,tcp四次挥手(3)

张三喊了一句话(data),李四听见了之后要向张三回复自己听见了(ack)。

如果张三喊了一句,半天没听到李四回复,张三就认为自己的话被大风吹走了,李四没听见,所以需要重新喊话,这就是tcp重传。

也有可能是李四听到了张三的话,但是李四向张三的回复被大风吹走了,以至于张三没听见李四的回复。张三并不能判断究竟是自己的话被大风吹走了还是李四的回复被大风吹走了,张三也不用管,重传一下就是。

既然会重传,李四就有可能同一句话听见了两次,这就是「去重」。「重传」和「去重」工作操作系统的网络内核模块都已经帮我们处理好了,用户层是不用关心的。

tcp协议三次握手动画,tcp四次挥手(4)

张三可以向李四喊话,同样李四也可以向张三喊话,因为tcp链接是「双工的」,双方都可以主动发起数据传输。不过无论是哪方喊话,都需要收到对方的确认才能认为对方收到了自己的喊话。

张三可能是个高射炮,一说连说了八句话,这时候李四可以不用一句一句回复,而是连续听了这八句话之后,一起向对方回复说前面你说的八句话我都听见了,这就是批量ack。但是张三也不能一次性说了太多话,李四的脑子短时间可能无法消化太多,两人之间需要有协商好的合适的发送和接受速率,这个就是「TCP窗口大小」。

网络环境的数据交互同人类之间的对话还要复杂一些,它存在数据包乱序的现象。同一个来源发出来的不同数据包在「网际路由」上可能会走过不同的路径,最终达到同一个地方时,顺序就不一样了。操作系统的网络内核模块会负责对数据包进行排序,到用户层时顺序就已经完全一致了。

TCP 四次挥手

TCP断开链接的过程和建立链接的过程比较类似,只不过中间的两部并不总是会合成一步走,所以它分成了4个动作,张三挥手(fin)——李四伤感地微笑(ack)——李四挥手(fin)——张三伤感地微笑(ack)。

tcp协议三次握手动画,tcp四次挥手(5)

之所以中间的两个动作没有合并,是因为tcp存在「半关闭」状态,也就是单向关闭。张三已经挥了手,可是人还没有走,只是不再说话,但是耳朵还是可以继续听,李四呢继续喊话。等待李四累了,也不再说话了,超张三挥了挥手,张三伤感地微笑了一下,才彻底结束了。

tcp协议三次握手动画,tcp四次挥手(6)

上面有一个非常特殊的状态time_wait,它是主动关闭的一方在回复完对方的挥手后进入的一个长期状态,这个状态标准的持续时间是4分钟,4分钟后才会进入到closed状态,释放套接字资源。不过在具体实现上这个时间是可以调整的。

它就好比主动分手方要承担的责任,是你提出的要分手,你得付出代价。这个后果就是持续4分钟的time_wait状态,不能释放套接字资源(端口),就好比守寡期,这段时间内套接字资源(端口)不得回收利用。

它的作用是重传最后一个ack报文,确保对方可以收到。因为如果对方没有收到ack的话,会重传fin报文,处于time_wait状态的套接字会立即向对方重发ack报文。

同时在这段时间内,该链接在对话期间于网际路由上产生的残留报文(因为路径过于崎岖,数据报文走的时间太长,重传的报文都收到了,原始报文还在路上)传过来时,都会被立即丢弃掉。4分钟的时间足以使得这些残留报文彻底消逝。不然当新的端口被重复利用时,这些残留报文可能会干扰新的链接。

4分钟就是2个MSL,每个MSL是2分钟。MSL就是maximium segment lifetime——最长报文寿命。这个时间是由官方RFC协议规定的。至于为什么是2个MSL而不是1个MSL,我还没有看到一个非常满意的解释。四次挥手也并不总是四次挥手,中间的两个动作有时候是可以合并一起进行的,这个时候就成了三次挥手,主动关闭方就会从finwait1状态直接进入到timewait状态,跳过了finwait_2状态。

总结

TCP状态转换是一个非常复杂的过程,本文仅对一些简单的基础知识点进行了类比讲解。关于TCP的更多知识还需要读者去搜寻相关技术文章进入深入学习。如果读者对TCP的基础知识掌握得比较牢固,高级的知识理解起来就不会太过于吃力。

栏目热文

tcp三次握手和4次挥手(tcp出现大量closewait解决办法)

tcp三次握手和4次挥手(tcp出现大量closewait解决办法)

作者:ThinkWon原文:https://blog.csdn.net/ThinkWon/article/details...

2022-10-29 23:56:05查看全文 >>

什么是tcp协议通俗易懂(tcp协议几种)

什么是tcp协议通俗易懂(tcp协议几种)

优质文章,及时送达本文来源于嵌入式LinuxTCP 是互联网核心协议之一,本文介绍它的基础知识。一、TCP 协议的作用互...

2022-10-29 23:56:34查看全文 >>

tcp三次握手和4次挥手的过程(tcp三次握手和4次挥手的过程图)

tcp三次握手和4次挥手的过程(tcp三次握手和4次挥手的过程图)

推荐阅读:PS:通俗一点的解释都会在引用块中Nothing is true, Everything is permitt...

2022-10-29 23:21:24查看全文 >>

一文看懂tcpip协议(tcpip协议详解入门)

一文看懂tcpip协议(tcpip协议详解入门)

专注于Java领域优质技术,欢迎关注 作者:涤生_Woo 一图看完本文一、 计算机网络体系结构分层计算机网络体系结构分层...

2022-10-29 23:55:23查看全文 >>

tcpip必背十个问题(100个通信基础知识普及)

tcpip必背十个问题(100个通信基础知识普及)

本节重点1.理解传输层的作用, 深入理解TCP的各项特性和机制 2.对整个TCP/IP协议有系统的理解 3.对TCP/I...

2022-10-29 23:41:25查看全文 >>

tcpip协议基础知识(tcpip协议详细步骤)

tcpip协议基础知识(tcpip协议详细步骤)

参考书籍为《图解tcp/ip》-第五版。这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及...

2022-10-29 23:47:10查看全文 >>

图解tcp ip协议(modbus tcp通讯协议详解)

图解tcp ip协议(modbus tcp通讯协议详解)

为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候...

2022-10-29 23:08:20查看全文 >>

tcpip协议详细步骤(怎么实现TCPIP协议)

tcpip协议详细步骤(怎么实现TCPIP协议)

1.1.TCP/IP协议简介tcp/ip协议运行在各种操作系统上的一种网络通信协议,各个系统通过实现tcp/ip的相关协...

2022-10-29 23:09:37查看全文 >>

plc与第三方tcpip通讯实例(plc与上位机tcp通讯)

plc与第三方tcpip通讯实例(plc与上位机tcp通讯)

来源:安帝实验室写在前面前面我们分享了西门子、施耐德、三菱、罗克韦尔等工业巨头的主要工控协议及其端口:也原创了很多工业协...

2022-10-29 23:46:40查看全文 >>

tcpip协议与osi协议功能有区别吗(我们现在用的是tcpip还是osi协议)

tcpip协议与osi协议功能有区别吗(我们现在用的是tcpip还是osi协议)

tcp/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层:应用...

2022-10-29 23:22:29查看全文 >>

文档排行