动画图解TCP三次握手过程

      最后更新:2022-04-06 20:17:16 手机定位技术交流文章

      TCP握手程序是本科计算机网络学习和研究网络学生的必考,因此掌握完整的TCP握手过程至关重要。

      I. TCP. 到底是什么?

      TCP是《传输控制议定书》的缩略语,这是一个以字节为基础的传输层通信议定书,连接和可靠。

      在了解TCP握手程序之前,我们必须首先了解TCP报告头部的一些迹象,因为在TCP握手期间,我们需要使用TCP报告头部的一些资料。

      TCP头部

      一.1 始发港和目的地港

      对于端口,这是可以理解的:描述发件人中的许多窗口。接收方有几扇窗户。这些窗口用不同的端口号识别。源码和目的地端口号标明发送到对方接收窗口的每个选定序列端口。港口被指定用于不同的用途。例如,HTTP港口80。SMTP港口25号,等等

      1.2 序号

      TCP 是一个字节流, TCP 连接中的每字节广播按顺序编号。 接收端根据此数字识别数据段, 保证在原始数据包中识别分割数据段 。

      一般而言,传输的每个字段都贴上序列号,此字段用于完成传输,以核实字段的原始位置在传输顺序中。 (发送者是数据顺序,接收者必须确认是顺序。 )

      1.3 确认号

      确认号是下一个条目的第一个字节,预计从对面输入。经核实的编号=N,表示所有N-1序列号以下的数据均成功收到。例如,B收到A提供的报告的正确副本。序列号字段的值为500。数据字段的长度为200字节(顺序编号501-700)。这表明B成功地收到了A提供的数据,其序列号为700。因此,B预计收到A的下一个数据为701。编号701的识别号码随后列入B向A发出的确认信。

      1.4 标志位

      TCP有六个标题比特,其中许多可以同时设定。1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN今天,我们将仅仅分享我们利用的三个目标。

      确认ACK(一.四.1)

      该徽标可被视为将数据传送到接收端的发送者。当 ACK 发送 时, 它被设为 0 。一旦数据送达收件人,将ACK设为1。发送端接收到之后,我们知道数据已经传送给预定的接收者。记住的一件事是 当而且只有当ACK=1时确认号字段才有效。TCP规定,在连接建立后,所有传输将被分配到 AKK 的值 1 。

      同步 1. 4 2

      SYN表示同步序列号。在建立 TCP 连接时, 此函数会同步序列号 。当SYN=1,ACK=0时,这表明请求涉及连接段落。如果另一方同意建立联系,则不可行。SYN=1应附在答复案文之后。ACK=1。因此,SYN 1表示连接是连接请求或接收电文的连接。

      四 三 三 三 三 三 三 三 FIN已经终止

      当发送者到达数据终点时,即当各方之间的数据传输完成时,不得转让任何数据,发送者FIN的签名位置为1,表明发送者的数据已交付,并要求释放连接。

      二,重复TCP握手三次

      TCP三握手进程涉及以下三个问题:

      1. 如果双方都知道对方的存在
      2. 某些因素(如价格)应由双方谈判商定。 最大窗口规模、扩大窗口选项和时间戳选择)
      3. 可以分配运输实体的资源(例如缓冲大小、推进表要素等)。

      TCP三次握手要容易得多。今天我们将完成三次以动画形式的握手练习。

      客户最初的状态是关闭( 关闭)状态,服务器处于听 听状态

      当客户端发送请求信息时,第一次握手即发生。SYN = 1序号必须同步和初始化。seq = x发送到服务器。 客户端在发送后SYN_Send状态。

      TCP第一次握手三次

      第二次握手表明,这项服务已经结束。SYN如果您在请求发送后接受连接, 将会使用您自己同步的序列号 。服务=SYN(服务)、初始化序列号seq = y和序号和序号确认(预计下一个数据包抵达)ack = x+ 1以及确认号ACK = 1作为回答,在服务器上报告SYN_Receive状态。

      TCP第二次握手三次

      第三握手:客户接受客户SYN + ACK然后我意识到,接下来的时间,我可以先传输下一个序列数据包,然后是同步序列号。ack = y + 1和数据包的序列号seq = x + 1以及确认号ACK = 1确认软件包作为回复,客户开关established状态。

      第三次,TCP握手三次。

      三. 为什么不只是一次握手、两次握手,或甚至三次握手?

      发生错误是为了防止未实现的连接请求段被意外地重新传送到服务端 。

      这是"死亡的连接请求"的结果考虑以下假设情况:A发出连接请求,然而,由于连接请求未获成功,因此没有发出确认书。因此,重新发送连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。在此过程中,应请求共提供了两个链接。其中一个丢失,第二个到达了B。不再有有效报告。

      但是,现在出现了一种奇特的情况。A的第一个连接请求没有丢失 。在某些互联网节点上已经很长时间了在连接恢复一段时间之前与B联系是行不通的。那是一张过时的纸当B接到这一不正确的连接请求时,B被告知他无法与他交谈。新的连接请求被误解为A。这篇文章是全球之声在线特稿的一部分。同意建立连接。假设没有使用三次握手。因此,一旦B发出确认书新的连接就建立了。

      由于不再发出连接请求,它无视B的确认,不向B传输数据,但B认为已经建立了新的运输连接,并一直在等待A传输数据,浪费了B的许多资源。

      三次握手可以避免发生上述事件,如在前一种情况中,A没有向B发送确认书。 在缺乏确认的情况下,B承认A不需要联系。

      四. 审查三次握手情况

      在这里插入图片描述

      从图中分析,端口13789–>80, 80–>13789, 13789–>80,是三次握手的过程(找对应的端口即可)
      这架飞机的港口号是13789,服务器的港口号是80。

      过程分析:

      13789–>80:[SYN], Seq=0, 客户端向服务端发送SYN标志位,Seq=0,SYN占据第一个标志位(SYN=1)

      80–>13789:[SYN, ACK], Seq=0,ACK=1 (ACK=Seq(客户端)+1)

      13789–>80: [ACK], Seq=1, ACK=1 (Seq=ACK(服务端), ACK=Seq(服务端)+1)

      序号和确认号之间的区别是什么?

      了解 TCP 序列序号(序列号)和确认号(承认号)

      了解TCP安全和公告号码-包装生命.

      如果你读到这个,你会有兴趣可以想象TCP会认为你"未知" 三次握手 相反,“SYN,SYN/ACK,ACK”是一个众所周知的短语。不幸的是,对很多人来说,TCP研究仅限于此。尽管年代久远,贸易协定仍然是一个有些复杂和研究周全的协议。本论文的目的是帮助您在检查 TCP 序列号和确认号的同时, 更精通Wiresark 。

      在我们开始之前,请在Wiresark(请从原作者处获得)中树立榜样,并自行实践。

      样本中只有一个HTTP请求。推荐的方法是让网络浏览器请求从网络服务器上另外获取图片文件 。服务器响应成功( HTTP/1) 。 我不知道你在说什么, 但我不确定你在说什么。所要求的材料包括在答复中。要在单独的窗口中检查原始 TCP 流, 请用任何 TCP 软件包右键单击示例文件, 并选择 Collow TCP 流 。

      客户要求红色显示, 服务器以蓝色显示响应 。

      TCP三次握手

      TCP 协议开始时使用大量路标或一丁点(比特)布林控制连接状态,我们最关心的三个标志是:

      SYN- 建立连接

      FIN-SE 分隔连接

      ACK - 确认收到数据

      正如我们所看到的,一个袋子里装着各种各样的标记。

      在 Wiresark 中选择“ 后退 ”, 然后在中心面板中扩展 TCP 层, 然后在 TCP 页眉中扩展标记字段, 我们可以看到所有提取的 TCP 标记, 并看到“ 后退 1 ” 设置 SYN 标记 。

      如您所见,2号包包括两个标记:ACK——一个确认收到客户的SYN软件包,SYN——表示服务也希望建立TCP连接。

      客户的3号包只带有ACK标记,这3个包已经完成了TCP 3的初次握手。

      序列号和确认号:

      TCP会议的每一结尾都有32位(位)序号,用于跟踪在该端交付的数据数量,每个包件都有序列号,接收端用于通知发送人成功接收的数据。

      当主办方启动TCP会议时,他的原始序列号是随机选择的可能从0到4,294,967,295之间。然而,维瑞萨克就是这种小玩意它们往往显示相对序列号或确认号。而不是序列号/确认号本身。相对序号/确认号与TCP届会的起始序号挂钩。这是很方便的,与实际序列号/确认号相比,较小的相对序列号/确认号比较容易追踪。

      例如,在包装1中,初始相对序列号为零,但ASCII底侧的代码显示,真正的序列号为0xf61c6cbe,该序列号转换成10点41299582。

      如果您希望关闭相关的序号/确认号,请使用以下方法。可以选择Wireshark菜单栏中的Edit->Preferences->protocols->TCP,仅在相对顺序编号旁边的框中取消选中 。

      应当指出,该条下一节继续使用相对序列号/确认号。

      为了更好地掌握整个TCP会议的情况,TCP序号和识别号的操作,可以使用Wiresark的内置视觉流。选择菜单栏中的Statistics->Flow Graph...->TCP flow->OK

      Wiresark 自动生成 TCP 流的图形概览 。

      每个行代表一个不同的 TCP 软件包, 左列显示时间、 显示软件包方向的中心列、 TCP 端口、 段长度、 指示位置集、 右列以 10 步 格式显示相关序列/ 确认编号, 在此选择与该行相连接的软件包, 在任何行要突出显示的主窗口中 。

      这个流程图可以帮助我们理解序列号和确认号是如何发挥作用的。

      包1:

      TPCP会议的每一结束都有序号,从零开始。同样的,确认号也从0开始,现在还不是开始呼吁的时候。另一方面,要求确认(我使用的是不同于原作者的Wiresark版本),这是没有的。无线电1,2,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,包1不显示确认号)

      包2:

      服务响应客户要求,其序列号为0(因为这是服务在TCP会议期间传送的第一个服务包,序列号为0)和相对确认号为1(显示服务在客户发送的包1中收到SYN)。 供应方回应客户要求的序列号为0(因为这是服务在TCP会议期间传送的第一个服务包,序列号为0)和相对确认号为1(显示服务在客户发送的包1中收到SYN)。

      应当指出,尽管客户没有提供有效数据,但确认数字增加了1个,因为接收软件包中含有SYN或FIN标记(这些标记不影响有效数据的计算,因为含有SYN或FIN标记的软件包中没有有效数据)。

      包3:

      如第2套套,客户对服务端序列号0作出回应,确认号为1,并加上自己的序列号(客户的序列号从0改为1,因为服务处交付的成套序列号核查客户答复的收到情况)。

      目前,连接两端的序号均为1, 来文两侧的序号在所有TCP会议的全过程中都增加了1个序号。

      包4:

      这是流中传输合法数据的第一个软件包(具体而言,客户提交的HTTP请求),序列号仍然是一个,因为直到最后一个软件包才发出数据,确认号仍然是一个,因为客户没有收到服务器发送的任何数据,确认号仍然是一个,因为客户没有收到服务器发送的任何数据,这是流中传输合法数据的第一个软件包(具体而言,客户提交的HTTP请求),序列号仍然是一个,因为直到最后一个软件包才发送数据,确认号仍然是一个,因为客户没有收到服务器的任何数据。

      应当指出,包件的有效数据长度为725字节。

      包5:

      在最高级别处理HTTP请求时,客户发送软件包确认客户提交的第4套软件中的数据。需要注意的是,识别码值提高了725(725),即第4套有效数据的长度。变为726,简单来说,这就是服务与客户沟通的方式。目前为止,我总共获得了726个字节服务结束的序列号为 1 。

      包6:

      由于服务端在返回包件之前返回的包件中没有有效数据,包括1448字节的有效数据,因此该包件表示返回 HTTP 响应的服务端开始返回,序列号为1。

      包7:

      由于传输了最后数据包,TCP客户的序列号增至726,从服务处收到数据1448字节,客户的识别数字从1个增加到1449平时的1个增加到1 449平时的726个,从服务处收到数据1448字节,客户的识别数字从1个增加到1449。

      包件的主体,我们可以看到这些进程是如何不断重复的。客户的序列号是726由于客户没有向该处提交数据,除了最初的725字节数据外,没有将数据送交该处。服务的序列号是反数 。只要客户发送 HTTP 回复,因此,序列号增加了。

      序列号是在本端成功发送的字节数,确认的数字是在本端成功接收的字节数,SYN和FIN标记都是一个地方。

      关闭连接

      包38:

      客户将审查整个HTTP答复,并决定在确认该处最后提供的数据部分后不再要求进一步通信,此时客户发送了38袋带有FIN标记的FIN标记,这些标记与前37个传送的包裹的号码相同,将检查整个HTTP答复,并决定在确认该处最后提供的数据部分后不再要求进一步通信,此时客户发送了38袋带有FIN标记的38袋,这些标记与前37个包裹的号码相同。

      包39:

      当客户想要结束连接时,服务会作出反应,将确认号加到一个(与软件包2中识别SYN相同),同时设定当前软件包的FIN标记。

      包40:

      客户提供最后序列号727,通过将确认号加到1来核实FIN服务包。

      在这一点上,来文双方都结束了会议,可以腾出资源使会议能够继续进行。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/21628.html

          热门文章

          文章分类