最后更新:2021-11-08 15:29:33 手机定位技术交流文章
TCP 握手三次, 挥手四次是访谈的热点, 现在我们来看TCP 握手三次,
TCP是一项面向连通性的议定书,向跨运输连接传输TCP信息,而TCP运输连接的建设和释放是任何面向联通的通信中的一项关键活动。
TCP运输连接分为三个阶段:
TCP运输连接管理允许定期设置和拆除运输连接。


源端口: 16位元已写入源端口号 。确定了发送TCP提交材料的申请程序。
目的地端口: 使用 16 比特来存储目的地端口号 。标记程序接管TCP提交申请程序。
序号:32比特,数值范围[0,2,332-1],加到最后,下一个序号返回零。此 TCP 交易中装入的数据的第一个字节数 。
确认号:32位元,范围[0,232-1],确认号被添加到最后一位时,下一个确认号返回为零。请注明预计从另一方收到下一次TCP提交书中数据负荷的第一个字节的数目,同时核实以前收到的所有数据。如果确认号=n,则直至序列号n-1的所有数据均正确收到,预计收到序号n。
确认标记ACK:只有当值为 1 时字段才有效;否则,字段无效。TCP规定,在连接建立后,所有发送 TCP 的章节都设置了对称到 1 。
数据抵消: 4 位元乘以 4 字节。 表示 TCP 提交中的数据负荷部分从 TCP 提交一开始开始到多少 。 此字段实际上指定 TCP 提交中的第一个部一级 。
窗口: 需要 16 位元( 字节) 。在本报告中,提供发送该段落的一方的接收窗口。
SYN: 用于在连接 TCP 时同步序列号。 FIN: 用于释放 TCP 连接 。 RST: 用于迁移 TCP 连接 。
PSH-推推路标:当收件人的 TCP 收到带有标号1的信息时,它将尽快提交申请程序,不必等到接收缓存满后再提交。
校验和:16比特,包括TCP提交材料的初始和数据载荷元素。在计算校验和时,假头的12字节应放在TCP条目的起始处。
紧急情况准则:16位字节表示紧急数据长度。
填充: 因为选项的长度是灵活的, 请使用填充 。请检查报告的第一部分除以 4 。,(由于数据抵消了领域,即第一个部级领域,即四个字节)。
建立 TCP 连接的行为被称为握手行为,它需要客户与服务器之间交换三条TCP 信息,即三条信息,这主要是为了避免被取消的连接请求部分的意外抵达,从而造成问题。
通过建立TCP连通性解决了三个困难:
使TCP能够了解对方的存在。
2. 允许TCP谈判参数(例如,最大窗口值是否利用窗口扩展选项和时间戳选项,以及服务质量等)。
允许 TCP 转让运输实体资源(例如缓存大小链接表格中的对象,等等)。
以下是通过TCP互动的两个主机:

TCP客户端(cliet)是TCP连接形成的一个积极开端。
TCP 服务器是等待建立 TCP 连接的程序 。
TCP连接程序可以比作握手程序,这需要TCP客户端与服务器之间交换3个TCP信息。
TCP程序在前两个终点完成。

TCP服务器程序始于建立一个传输控制块,以存储TCP连接中的一些关键信息。例如, TCP 链接表、 发送和接收缓存的指针、 重复队列的指针、 当前发送和接收序列号等等。 在此之后, 他们准备接受 TCP 客户端程序的连接请求, 即 TCP 服务器程序进入监听模式并等待 TCP 客户端的连接请求 。

TCP客户程序也是第一个,旨在建立一个转让控制区。由于TCP服务器程序被动地等待TCP客户程序的连接请求,它被称为被动连接开关。

在连接时,TCP连接请求部分将传送到TCP服务器程序,并同步到发送状态。
SYN在TCP连接请求第一部分的同步位置定在1,表示它是TCP连接请求的一个部分。
作为TCP客户程序选择的初始序列号,序列号字段后继数设为初始值x。
由于TCP连接是由TCP客户程序启动的,它被称为主动打开连接。 请记住,TCP要求SYN设置为1, 以便不传输数据而消费序列号。

当TCP服务器程序收到TCP连接请求时,如果该连接被接受,TCP确认请求被送交TCP客户程序,与接收国同步。
请铭记,该项目也不包括数据,因为它是作为报告一部分而设立的一个SYN,但确实使用序号。

在TCP客户程序收到TCP连接确认请求后,将标准TCP确认部分送交TCP服务器程序,并建立了连接。
请记住,TCP规定,典型的TCP证明数据是可以运输的,然而,如果数据无法携带,则不会浪费序列号,在这种情况下,下一个传送的数据电文的序列号x+1。

在收到确认后,TCP服务器程序也附属于既定状态,现在两个TCP都连接到既定状态,从而得以在既定TCP线路上进行可靠的数据传输。

TCP 连接形成程序包括三小时握握。 在握手之前,活跃的开放客户端完成了 CLOSE 阶段, 被动的开放服务器终止了 CLOSE 阶段, 并开始了 ListEN 阶段 。
第一个客户端向服务器发送 SYN 包, 等待确认, 地点 :
2 当服务器从客户端获得SYN软件包时,该软件包得到验证,Listen阶段完成,发送TCP信息,其中包括以下信息:
3 在收到所提供的SYN+ACK包件后,从客户到服务器的数据流显然正常,使SYN-Sent阶段接近尾声。
服务器从核实收到服务器数据的客户收到信息后,发现从服务器到客户的数据流动正常,完成了SYN-RECV阶段,进入了设定的阶段,完成了三次握手。
为什么TCP客户程序最终会提供标准的TCP确认部分?
在这种情况下,TCP客户程序发出了TCP连接请求,但报告文本在某些网络节点停留了很长一段时间,导致不可避免地重新传送文本。
只要TCP服务器程序正确收到重新传送的信息,TCP服务器就向TCP客户程序发送一个TCP连接请求确认部分,并进入已建立的连接。

请记住,由于我们转向双向握手,TCP服务器程序在转交TCP连接确认请求后,进入了连接状态,而不是同步接收状态,如三向握手那样,等待TCP客户程序发送确认TCP连接请求的一般确认部分。
两个TCP缔约方现在都处于连通状态,这意味着它们可以相互发送数据,然后它们可以通过四份报告发布连接,两个TCP都处于关闭状态。

一段时间后,未成功的TCP网络连接请求到达了TCP服务器程序,该程序错误地将其误认为另一个TCP客户程序,启动了一个新的TCP连接请求,并将TCP客户送至TCP程序,以确认连接请求并加入已建立的连接。
该段达到了TCP客户程序,但由于它没有提出新的TCP连接请求,而且处于封闭状态,因此被置之不理。
尽管如此,TCP服务器程序已经连接,他认为新的TCP连接已经创建,正在等待TCP客户程序提供的数据。这将消耗TCP服务器程序所在地主机的大部分资源。

简言之,使用三次握手而不是两次握手来建立TCP连接是为了避免过期的连接请求被送回TCP服务器程序,从而造成故障。
三次握手的根本目标是确保其发送和接收正常,无论是对本人还是对另一方而言,保证双方能够可靠地进行沟通,如果是两次握手,则在第二次握手后形成连接,客户知道服务器通常能够接收其传输的数据,而服务器不知道客户能否接收其发送的数据。
我们知道,网络往往不理想(拖放软件包和延迟),当客户提出创建连接的请求时,如果服务器直接创建连接并将包含SYN、ACK和Seq的数据包返回客户,则数据包因网络传输而丢失,客户在丢失后从未收到返回的数据包。 由于客户在一段时间后可能安排加班,客户可能关闭创建连接和重新启动新请求的要求,而服务器不知道如果服务器客户没有被第三次握手告知是否接收服务器传输的数据,服务器上的港口将一直开放,直到客户因加班而再次提出请求。 从长远来看,这类港口越来越多,造成服务器费用的浪费。
本文由 在线网速测试 整理编辑,转载请注明出处。