Tcp/Ip协议详解卷一 第13章 Tcp连接管理 知识点浅析 ...

      最后更新:2021-12-28 03:36:04 手机定位技术交流文章

      文章目录

      • TCP 连接建立和终止
        • TCP半关闭
        • 同时打开和关闭
        • 初始序列号
        • 连接建立超时
      • TCP选项
        • 最大段大小选项
        • 选择确认选项
        • 窗口缩放选项
        • 定时邮票和反返回序列号的备选办法
          • 精确估算重传超时
          • 防回绕
        • 用户超时选项
        • 认证选项
      • TCP的最大传输装置被发现。
      • TCP状态转换
        • 时间现状
        • FIN_WAIT_2
      • RST重置报文段
        • 对于不存在的端口的连接请求
        • 终止一条连接
        • 在其中一方消亡后,半连接。
        • 时间等待错误(时间现状时收到RST)
      • TCP服务器选项
        • TCP端口号
        • 限制本地IP地址
        • 限制外部节点
        • 进入连接队列
      • TCP 与管理有关的TCP连线袭击
        • SYN泛洪
        • 过小的MTU
        • TCP连接劫持

      TCP 连接建立和终止

      TCP 连接由4年、2个IP 地址和1个端口号组成。 更具体地说, TCP 连接由一对端点或带组成,每对端点或带由一对(IP 地址、端口号)单独指定。

      TCP连接往往分为三个阶段:连接设置、数据传输(已建立连接)和连接关闭。下文将详细介绍TCP连接的创建和关闭过程。
      在这里插入图片描述
      解释术语(说明将沿着这些行进行,尽管以上情况不会如此),应写上阿克=K+1,而不是阿克=K+1:
      SYN:标志位。
      FIN:标志位。
      ACK:标志位。
      Ack:确认安全和确认号。
      Seq: 数据区号,也称为序号。

      连接过程:

      1. 客户端发送 SYN 消息, 包括要连接的设备端口号码和起始序列号 。 I S N ( c ) ISN(c) I S N ( c )
      2. 当服务器收到客户端的 SYN 信息时,它通过发送自己的 SYN 信息作出回应,其中含有服务器的第一个序列号。 I S N ( s ) ISN(s) I S N ( s ) 服务器将包含客户的SYN信息 以确认客户的SYN信息 I S N ( c ) ISN(c) I S N ( c ) 一旦数值乘以 1 乘以 1, 返回的 Ack 是所以是个ACK。这是SYN+ACK,当他们合并。另外,每发送一个SYN,实际上,这是第一次自动添加序列号。SYN被视为数据水平=1的数据传输。然后自然的阿克将增加一个。
      3. 在从服务器接收 SYN 信息后,客户端将从服务器上确认 SYN 信息。 I S N ( s ) ISN(s) I S N ( s ) ,然后将结果乘以 1 以获得返回的 Ack 号。
      4. 到那时,这种联系已经建立,上述过程被称为三握手过程,TCP通信现在可以开始数据传输阶段。

      解释两个序号:

      • 这个分组的发件人将是他自己,接收人将是另一方。
      • Ack:首先,它反映了它从彼此得到的东西。(... , Ack-1]另一种解释是,Seq,或者你预期会收到的下一个群体,也是Ack,或者你预期包括的下一个群体。[Ack , ...)的Data。
      • 自自生成子组 Seq : 自生成子组中数据的主要序列号, 即此子组包含[Seq , ...)当数据传输正常时,Seq将和另一方传送的最后一组的Ack相同;在这种情况下,可以争辩说,它只是恰巧发送了另一方预期的该组(或序号)。

      三次握手的目的:

      • 证明隧道两侧之间是如何建立联系的。
      • 运输特定信息,如初始序号(国际安全编号,ISN),使用TCP选项。

      在这里插入图片描述
      关闭过程:

      1. 主动关闭连接( 在此示例中, 客户端) 用 FIN 字段发送一个包, 显示连接应该断开 。当然,数据包包含数据原始序列号。实际上,数据包中没有数据。尽管如此,FIN标志相当于一字节的数据。FIN部分还包括一个Ack,以验证从另一方收到的最新数据。
      2. 连接的被动关闭者(在此示例中,服务器)将K值附加到回复的阿克值,以表明它收到了主动关闭者交付的FIN。
      3. 被动关闭器将身份转换为当前活动的更近处, 并传输自己的 FIN 文本, 其中 Seq 是 L, Ack 是 K+1 。
      4. 当当前的被动关闭(即当前客户端)收到信息时, L+1成为ACK, K是Seq, 回应主动关闭以确认前FIN。

      由于TCP的双重工作通信能力,它提供半封闭的通信能力,TCP半封闭程序表明,数据流只有一个传输方向关闭,而另一边则继续发送数据直到关闭。

      TCP半关闭

      Berkeley 软件包的 API 支持半关闭操作: 应用程序可以使用关闭方法, 而不是近距离功能 。
      在这里插入图片描述
      前述过程的几个阶段:被动关闭继续在短期内传输数据。

      同时打开和关闭

      同时打开程序需要四块,但如下图所示,中间两部分可以合并。
      在这里插入图片描述
      同时,结束程序仍然需要四个条款,它们只是相互参照。
      在这里插入图片描述

      初始序列号

      当一个连接打开时,每条电文的IP地址、端口号、逻辑序列号(即幻灯片窗口)正确无误,对方将获得准确的核实。另一方面,延迟抵达部分的序号可能在幻灯片窗口中。这会造成一些问题。为了解决这个问题,我们必须在挑选序列号时谨慎行事。

      由于第一个序列号随时间而变化,每个连接都有一个新的初始序列号。

      • 同一当事方的一个链接段落的序号与另一个链接段落的序号并不重叠。
        • 比如(服务器:80) (客户-终端 IP:客户-终端端口)(客户b的IP地址:客户b的端口:服务器:80)这四组的原始序号并不重叠。
      • 同一连接的两个不同样本的序列号不能重叠。
        • 比如(服务器:80) (客户-终端 IP:客户-终端端口)关闭它几分钟,然后客户端 重新连接到服务器,所以..(服务器:80) (客户-终端 IP:客户-终端端口)它已经重新开业两次了 给你两个样本

      连接建立超时

      服务器关闭是一个常规事件。 因为 TCP 客户端在发送 SYN 软件包后没有得到所需的 ACK, 它将继续经常发送 SYN 软件包 。
      在这里插入图片描述
      如上文所述,期限为三秒、六秒、十二秒,称为指数后退。

      最初SYN的传输次数,通常为5次。

      TCP选项

      在这里插入图片描述
      每个首选字节都包含种类。 前两个选项只需要一个字节, 即该类型字节。 其他选项将根据它们的种类决定字节数量 。
      因为 TCP 头的整数是32位数的两倍, 当使用 TCP 选项时, NOP 用于填充它, 而 EOL 则用于在结尾处填充它 。

      最大段大小选项

      Maximum Segment Size,即MSS。《TCP协定》允许从另一方收到的最长报告期称为管理支助科。这个长度,实际上,它指的是TCP有效载荷协议的最长期限。因此,它排除了TCP和IP头的长度。
      在这里插入图片描述
      如上文所述,前两次握手三次,第一次,这台计算机告知100度一,我的笔记本电脑将获得1460 MSS,一旦这一信息为100度受众所知,每次将数据插入TCP协议时,将最多提供1460 字节的数据。

      如果不发出警告, MMS 默认值为536 字节。

      选择确认选项

      除了标准的累积确认之外,TCP将提供确认的选择。
      在这里插入图片描述
      接收方利用SACK传送数据接收不规则,使发送者能够有效地重新发送数据。

      窗口缩放选项

      在建立 TCP 连接时, 端点之一可能会使用 Windows 比例( 即窗口的缩放选择) 来指定接收窗口的大小 。
      在这里插入图片描述
      这个系统首次给Windows屏幕八 三次握手, 基数是八。 2 8 2^8 2 8
      在这里插入图片描述
      这个系统在三个握手器中的第一个中提供了 Windows 512, 因此这台计算机的最终接收窗口是 512*。 2 8 2^8 2 8 =13,1072. 这是上面显示的计算窗口大小 。

      定时邮票和反返回序列号的备选办法

      TSOPT是时间戳的选择。

      • 通过使用时间戳办法,发送者输入32位数作为时间戳的第一部分(TSV或TSval);
      • 收件人将收到最初填入第二部分的时间戳值( TER 或 TSecr ) 以更新可见重试字段( TER 或 TSecr ) 。 时间戳选项会给 TCP 页眉增加 10 字节( 保留两个时间标记值的8 字节, 显示选项值和长度的2 字节 ) 。

      TCP在任何特定时间都有自己的两端时间邮票,但它们没有彼此捆绑,也不需要两个主机之间的时钟同步。

      精确估算重传超时

      在这里插入图片描述
      如上文所述,发送者现在可以通过提供ACK的数据来估计TCP连接的时间。

      TCP连接的预期返回时间大多用于确定重新传送的时限,时间标记有助于我们估计重新传送需要多长时间。

      防回绕

      时间戳选项还帮助 TCP 接收器避免接收过期信息。 它被称为 PAWS( 保护安全号码不受断裂影响 ) 。

      TCP的结构显示,总序列号仅为32比特,然而,TCP作为一项以字节为基础的协议,将继续将数据传输到32比特范围以外,然后以0作为序号重新开始。

      作为32比特序列号的延伸 我们可以回到序列号上
      在这里插入图片描述

      • 从D到E的序列号已经不够用了,有一个循环,序列号从0再次使用。
      • B. B. 失踪的包裹在抵达之前在网络的一个大圆圈内。
      • F-time 的接收窗口与 B-time 的接收窗口具有相同的范围。 由于窗口范围相同, 旧数据可以用作新数据 。
        • 然而,用时间戳选项,旧报纸的时间戳2小于当前报纸的时间戳5或6,因此,受款人出于这个原因抛弃旧数据。
        • 这一古老数据的生存时间比MSL短。

      用户超时选项

      指定 TCP 发件人愿意在确认接收者未成功接收数据之前等待ACK确认数据的时间。

      认证选项

      目标是改进和取代以前的TCP-MD5技术[RCC 2385]。

      TCP的最大传输装置被发现。

      路径的最大传输单位(最大传输单位, MTU) -- -- 在两个主机之间运行的所有网络信息中最大传输单位的最小值。

      了解路径的最大传输单位 可能有助于防止TCP破碎。

      在建立连接时,TCP最少使用对方在谈话期间提供的外部接口的最大传输单位或最大段尺寸(SMSS)。

      联系的两面的运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输、运输等可能有所不同。

      在确定发送者 MTU 的起始值后, TCP 提供的每一份 IPv4 数据报告将设置 DF 字段。 不允许拆分 。

      MTU是数据链层协议有效载荷规模的价值,而MSS是TCP协议有效载荷规模的价值。

      • MOTU等于IP头、TCP头和TCP有效载荷的总和。
      • MTU等于IP头、TCP头和MSS的总和。
      • MTU = 20 + 20 + MSS
      • MTU = 40 + MSS

      TCP状态转换

      在这里插入图片描述
      一开始,你必须记得流程图。
      在这里插入图片描述
      流程图可用于推断该状态转换图的转换。 不过,这里应该提到一些具体的变换:
      在这里插入图片描述

      • 从监听转移到SYNSENT。这很罕见,伯克利不支持它。
      • 从SYN_Sent移至SYN_RCVD。由于SYN是由双方传送的,它几乎是当即打开的。
      • 发送以收听 SYN_RCVD。 当服务器在 SYN_RCVD 接收 RST 时, 就会发生这种情况 。

      在这里插入图片描述
      上述被动关闭方法说明如下:

      • 被动的关闭方收到对方的FIN, 表示对方已经终止了连接, 并且是唯一剩下的关闭连接的方。 这就是为什么它是 CLOSE_WAIT 。
      • 另一半连接在被动关闭方发送FIN后立即终止,但最后的ACK不得不推迟,因此是LAST_ACK(或被解释为LAST_ACK_WAIT)。
      • 在被动的关闭方收到最后的ACK后,整个过程完好无损地完成,整个过程被标为CLOSED。

      积极关闭缔约方的方法如下(主动关闭方在发送FIN后输入FIN_WAIT_1):

      • 主动关闭方接收到的是ACK,那么说明对方还有数据需要传输,所以进入FIN_WAIT_2。在FIN_WAIT_2时,接收到了FIN,那么发送ACK进入时间现状。
      • 主动关闭方接收到的是FIN+ACK,那么说明对方没有数据需要传输了。那么直接发送ACK从FIN_WAIT_1状态进入时间现状(从流程图看,可能会漏掉这种可能,需要注意)。
      • 向FIN公司提供了主动停机通知。因此,双方同时关闭。在这里,我们将进入 厚厚的Cuscing。设想情况与前一行大致相同。只是拆分了一下,因此,有一个快乐的媒体, 关闭。直到那时,才收到ACK, 其状况才从关闭状态改为时间-时间-世界状态。

      时间现状

      主动关闭方在时间现状,会等待2个MSL的时间(最大段生存期,Maximum Segment Lifetime)。

      时间现状存在的原因:

      1. TCP 连接已可靠终止 。
      2. 保证及时发现和销毁迟交的TCP报告。

      时间现状需要等待两个MSL的原因:

      • 活跃的结束方发送的ACK最终可能已经丢失。
      • 另一方(即被动关闭方)承认一个MSL(当另一方将再分配FIN时)缺乏ACK,并将一个MSL的FIN转发给FIN,以达到它的一方。

      时间现状会使得一个连接在2个MSL的时间内,不能重新使用。连接是指一个4元祖(源ip、源端口、目的ip、目的端口)。
      服务器断开的示例 :
      在这里插入图片描述

      • 第一次执行sock -v -s 6666因此,服务器对66个港口进行了监测。
      • 然后服务器停止, 并立即终止连接 。
      • 第二次执行sock -v -s 66664岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁,4岁192.168.10.144),和66(即指挥线参数)、全球端口和共同港口
      • 通过netstat可以看到,现在有一个4元祖符合上面说的4元祖,且处于时间现状,所以才会提示地址已经被占用。
      • 在两次MSL后,我们就能完成它。sock -v -s 6666了。

      客户断开的一个例子:
      在这里插入图片描述

      • 键盘打断了客户的谈话
      • 客户端加了-b 2091参数, 您是否想要通过重用先前使用的 2091 随机端口恢复此连接? 提示地址已经被主张 。
      • 在两辆MSL后,我们可能恢复与2091港的联系。

      通过添加参数-A,可以无视重新开始的连接是处于时间现状下的。(这条在linux上可以,在Windows上不行)

      FIN_WAIT_2

      理论上,在关闭了一半的连接后,发出四波波:

      • 主动关闭方会处于FIN_WAIT_2。
      • 被动关闭方将采用 CLOSE_WAIT 模式。

      如果活跃的关闭方 无法等待对方的FIN,那么可能会一直处于FIN_WAIT_2。在完全终止操作后(例如,关闭功能已完全禁用)。此外,关闭功能履行半关闭行动)我帮你定一个计时器然后,加班费将转到《关闭电路公约》的地位。

      RST重置报文段

      当TCP确定该条目的抵达不适合连接时,它会发送替换的RST。 RST可能导致TCP连接的快速中断。

      对于不存在的端口的连接请求

      • 当 UDP 的数据报告到达无法使用的目的地港时,将生成来自 ICMP 目的地的无法进入的信息。
      • 在TCP中产生RST。

      在这里插入图片描述

      • Telnet用于连接当地IP港口99,然而该港口并不存在。
      • 客户进行了三次握手中的第一次,并将SYN包传送到99.99港,最初的序列号为819。
      • 对立方对RST+ACK(第二数据)作出答复。
        • RST 表示此端口不存在 。
        • ACK代表验证了另一方的SYN,其编号为820(819+1)和收到SYN。

      终止一条连接

      • 正常断开,发送FIN,称为有条不紊地释放。
      • 也可以传送给RST,即所谓的释放终止。

      终止释放有两个主要特征:

      • 队列中的任何数据将被删除, 并将立即发布一个 RST 。
      • 接收 RST 的一方不会作出反应; 相反, 它会断开连接, 并通知应用程序连接正在重置 。

      将 " 保持近距离 " 软件包选项(SO_Linger)设定为零,从而终止释放。

      在其中一方消亡后,半连接。

      TCP建立连接后,其中一方,也许是客户 意外地破坏了主机在这一点上,信息不会转让给另一方(可能是服务器)。这样,就产生了半开连接。而且,数据根本不是由对方发送的。如果我使用保存的选项,我永远找不到它 如果我不使用保存的选项,我永远不会发现它。则可以发现)。

      TCP 连接仍然被当事人认为是合法的,在发送崩溃后,该当事人并未失败,而此时它传输了一些数据。 数据到达了坠毁方,而坠毁方将有一个硬面,并发送 RST 重置连接 。

      时间等待错误(时间现状时收到RST)

      在时间现状中,需要等够2MSL的时间。但在这段时间内,主动关闭方如果收到一些报文段比如RST,就会提前结束掉TIME_WAIT而到达CLOSED。
      在这里插入图片描述
      上图,时间现状中,收到了一个旧数据包Seq = L -100, Ack = K -200,然后客户返回新的序列号Ack = L不幸的是,由于服务器目前处于封闭状态, RST 将会被退回。 RST 将导致活跃的关闭方提前进入关闭状态, 从而引发问题 。

      如上图所示,2MSL大大超过作为问题主要根源的RRT(即前后一次),该党的积极关闭时间明显更长。

      许多系统会规定在时间现状中,忽略RST,这就避免了问题。

      TCP服务器选项

      当请求新建连接以到达服务器时, 服务器将获得连接, 并调用新进程或线索来处理新客户端 。

      TCP端口号

      现在有一个拥有双向 IPv4 和 IPv6 仓库的主机, 运行安全 shed 服务器 sshd 。
      在这里插入图片描述
      Netstat 命令行选项 :

      • -a报告所有网络节点,无论是否在名单中。
      • -n此选项将 IP 地址打印为小数点位数, 而不是使用 DNS 将其转换为域名。 它还打印端口号 。
      • -t只选择TCP节点。

      节点解析:

      • :::22通配符地址和本地端口 22 代表服务器(如果服务器是多主机, 可能是单独的 IP 地址) 和服务器使用 。
      • :::*可接受客户查询包括:通配符地址、通配符端口。

      在这里插入图片描述
      目前,服务器有两个连接,一个监听 TCP 软件包和一个已建立的 TCP 软件包。 人们注意到,两套服务器的同一侧有22个端口,但所建的IP 地址已经确定。

      在这里插入图片描述
      如果服务器只有一个网络接口,结果应如上图所示。设立、设立、设立、 设立、 设立、 设立、 设立、 设立、 设立在服务器的这一边, 二进制组相同 。这是因为这是同一个东道主 向客户提出的要求因此,IP地址是相同的;然而,由于每个连接都使用不同的端口,所以端口不一样。

      为了获得案文,TCP对这名4岁儿童进行了多路拆解。在 Listen 行接收 SYN 邮件不可行 。您可以使用创建的合成来从非 SYN 获取正常数据 。而上图有设立、设立、设立、 设立、 设立、 设立、 设立、 设立、 设立然后通过源IP和源端端口解析数据。
      在这里插入图片描述
      如果服务器是一个多主机, 服务器的这一侧将会有一个以上的IP地址, 如上所示 。

      限制本地IP地址

      在这里插入图片描述
      sock命令使用-s如果使用参数时遵循 ip 地址,则提供服务器的具体 ip 地址,且无法向多个主机的不同 ip 地址普及。

      限制外部节点

      在这里插入图片描述
      UDP 服务器不仅可以提供本地IP地址和端口(如前一章所测试的),还可以提供客户的IP地址和端口。 但是标准伯克利组合API不允许这样的功能。

      进入连接队列

      由于服务器为每个客户端指定了一个新的进程或线条,服务器可以平行运行,确保监听服务器始终准备处理下一个连接请求。

      在应用程序承认之前,服务器上有两个状态的新连接 :

      • SYN_RCVD的三次握手没有完成。
      • 在创建的词ED.Backlog中,它指的是已经完成但申请没有被接受的三次握手,这意味着它无法分配给新的程序。

      两个州的新连接分两个不同的队列。

      在 Linux 中应用以下规则 :

      • 当收到SYN时,检查第一个队列的大小,如果连接太大(不是向客户发送RST,而是不执行操作),则拒绝连接。net.ipv4.tcp_max_syn_backlog这个数值。
      • 列表状态中的每个节点都有一个队列可处理与以上二级连接的新连接。 队列大小与列表状态中的节点数相对应 。net.core.somaxconn这个数值。
      • 三次握手中,在客户的ACK后,我是在立州, 我在立州。然而,服务器尚未处于创建状态。另外,新连接位于已建立状态,但方案不承认。但此时,数据可能由客户发送。所以,服务器的 TCP 模块将简要保存这些数据。

      TCP 与管理有关的TCP连线袭击

      SYN泛洪

      SYN洪水袭击是TCP拒绝服务袭击的一种类型。在这种攻击中,服务器将受到SYN(首次握手)要求的轰炸。但是,客户不会得到一个ACK(第三次握手)。另一方面,服务器将为每个SYN_RCVD连接分配资源。当这种半开放连接被过度使用时,服务器的资源就耗尽了。

      RFC 4987中有一份声明说:

      Per RFC 793, when a SYN is received for a local TCP port where connection is in the LISTEN state, then the state transitions to SYN-RECEIVED, and some of the TCB is initialized with information from the header fields of the received SYN segment.

      如上文所述,窃听将按客户SYN袋头字段分配,但服务器不再分配资源,而是在这些SYN袋头字段编码。ISN(s)三次尝试后客户会接受握手ISN(s)+1通过它,服务器就可以使用它。ISN(s)在最初的握手时, 将SYN包的头字段倒转。 这个反攻击策略被称为 SYN cookies 。
      在这里插入图片描述

      过小的MTU

      袭击者用极小的 MTU 价值伪造了IPC PTB 信息( 包太大 ) 。 结果,当IPC PTB信息结束时,有效载荷只能用很小的数据填充,从而大幅降低性能。

      当IPCMP PTB 消息的下一个 MTU 跳跃小于 576 字节时, 主机的 MTU 可能被禁用 。

      TCP连接劫持

      知道连接双方的序列号 足以被劫持
      在这里插入图片描述
      如上所述,如果B在攻击者攻击后向A提供包件,A假定包件已被接受并将被放弃,因此A上的滑动窗口将永不前进。 当然,除非B发送一个。seq=b, len=100和一个seq=b+100, len=z,这样我们可以重新定位幻灯片窗口。但即使这种情况下,这导致 A 接受错误字节 。(这只是我理解的基本劫持概念。 )如有出入请告知)。然而,虽然袭击者知道双方预测的序列号,但他们不知道序列号是什么。因此,攻击者很容易继续接受双方不正确的字节流动。

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

          热门文章

          文章分类