闭关修炼---网络原理之TCP协议

      最后更新:2022-07-24 13:16:46 手机定位技术交流文章

      TCP 协议段格式

      这图很重要!这图很重要!这图很重要! 重要的事说三遍,之后的TCP机制都是依靠这张图讲解。

      1.源 / 目的端口号: 指示数据来自哪个进程和哪个进程;
      2.32 位序号 /32位确认号:
      发送的数据编号——序列号(Sequence Number)  SN
      发送的第一个字节的SN一般不是0,而是一个随机值。初始序列号(Initial SN) ISN

      确认的数据编号——确认序列号(Acknowledge Sequence Number)  ASN
      3.4 TCP 报头长度:表示该 TCP 头部有多少个 32 bit (有多少个 4 字节);所以 TCP 最大头长为15*4=60
      4.6 位标志位 :
      URG: 紧急针是否有效?
      ACK:确认号是否有效
      PSH:提示接收程序立即从TCP缓冲器读取数据
      RST:另一方要求重新建立连接;我们指的是载有RST标识符的多个消息段
      SYN:请求建立连接;我们叫带有SYN标识符的同步消息段
      FIN:通知对方端口要关闭,我们说携带 FIN标识符是段落的结尾

      TCP原理

      一、安全机制

      ①确认应答机制

      该机制与序列号SN、认证序列号ASN、以及认证号是否有效ACK有关

      因为TCP协议即需要扮演了发送者(send Segment)的角色,同时还需要扮演接收者(acknowledge segment)的角色,为了TCP身兼两种不同的角色,在TCP设计之初就有一个 标志位(ACK), 在角色需要转换时扮演一个角色.

      ACK == 1开关打开          ACK == 0开关关闭

      ASN表示确认响应序列,假设A发送100数据给B,而B的确认响应始于该数据的下一个字母。 如果100数据是1到100,确认答案应以1001开始。 ASN只有在ACK==1上才有意义。

      以下图示了具体的响应过程:

      为什么ISN不设置从O开始,而是使用随机值?

      从安全的角度来看,如果ISN设计开始为O,那么恶意用户很容易推导合法SN的价值
      伪造TCP SN的成本很低,使用随机值可以相对避免这种情况。

      ②超时重传机制

      关于重传

      没有收到答复可能有两个原因。

      1.收件人没有收到,所以没有答复。

      数据还在路上,但还没有到达一段时间(可能是由于网络延迟)

      数据在途中丢失了,而且永远不可能到达那里。

      2.收件人收到了,但没有收到答复。

      答复仍在进行中,但目前尚未收到

      b.应答丢失。

      上面的1.b和2.b这种麻烦不需要,直接重发就可以了。因为有SN的存在,即使你重复了一遍, 就把它扔掉.同里,有ASN的存在,不管你是否再次得到ACK。这里需要强调的ACK是一个国家,无论收到多少次,ACK只有两个状态的开关,如果你收到太多, 扔掉它不会影响你的反应.

      但1.A和2.a超时重复机制需要解决。

      在A服务器发送数据到B服务器后,由于网络拥塞等原因,数据可能无法到达B服务器;
      如果宿主A在指定的时间间隔内不收到宿主B的确认响应,则会重复;
      但是,主机 A 未收到 B 发出的确认还可能因 ACK 丢失了;

      因此主机 B 将有许多重复数据。 TCP 该协议需要能够识别这些数据包为重复数据包和丢弃重复数据包。在此点,我们可以使用上面提到的序列数目,并很容易实现重权效应。
      那么你如何确定时间是否过时?
      首先,找出最低限度的时间来确保“确认的答复必须在该限度内返回”。
      B.但是这个时间的长短,随着网络环境的不同,是有差异的。
      C.如果超时设置太长,会影响转播效率的整体;
      D.如果超时设置太短,则有可能经常发送重复的包;
      TCP 为了确保在任何环境中都能实现高性能通信,最大加班时间是动态计算的。
      A.在Linux(如BSDUnix和Windows)中,超时由500ms的单位控制,每当一个超时重复被确定时,超时时间是500ms的整数。
      B.如果再传输后仍然没有响应,等待2*500ms再传输。
      因为TCP要做到确认应答机制(超时重传机制),TCP已发送出去的数据,需要保留。在应答之前,这些数据暂时都要留着,用来在超时时进行重传。TCP有一个发送缓冲区,为了暂时保存发送的未响应的数据,同时由于接收的数据,应用程序层不一定能理解所有数据。因此TCP也接收缓冲器。
      应用层使用TCP进行数据发送,本次发送成功,代表:数据放在本机TCP的发送缓冲区中,数据有没有发出去还不一定。这就好比我去寄快递,东西已经交给快递员了,他什么时候发车我还不知道。

      ③连接管理机制

      1.作为服务器上的TCP,它需要:每个TCP有一个内部网络来维护数据集:它们至少由ISN、当前SN、当前ASN、发送缓冲区、接收缓冲区和五元组信息组成。

      2.TCP互交换一些信息
      在正式的数据通信之前,需要和对方(TCP)进行一定的同步(synchronize)操作。A把主机的一些初识重要信息告诉了B,收到应答对于A而言也就知道了B的存在。

      由于以上两点原因,所有就有了TCP连接(Connection)的概念,以及连接管理整个寿命周期。

      基于TCP连接的概念,提取了著名的鼎鼎的三个手!

      逻辑上,连接管理机制需要四个通知,这比两个人自我介绍好。

      首先介绍(一次),听完之后说你好(第二次),

      B再次引入(三次),B完成后,A再次问好(四次)。

      在实际生活中自我介绍,A介绍完,B可以同时完成问好和自我介绍,这就做到了合并。在网络中为了减少发请求的次数提高效率,会把第二步和第三步合并发送,TCP 的 Segment 中本身就包含了SYN和ACK标记位置,可以实现联合发送。

      1.无法为第一个同步传输数据(不能确认连接已成功建立)

      2.第二 syn + ack,不能传输数据(如果传输数据增加发送费用,但失败,所以在协议设计时禁止传输数据)

      第三个问题:可以携带数据(但不是强制性)

      注意:

      尽管没有数据,SYN也占有序列数。

      假设A的ISN 初始序列号 为 a;      B的ISN初始序列号为 b

      第一次发送:syn              len=0      SN=a        ASN=0
      第二次发送:syn + ack    len=0      SN=b        ASN=a+1
      第三次发送:ack             len>=0     SN=a+1    ASN=b+1

      数以千计的词语不能真实,只有实践才能知道真相。

      以上为TCP的分段协议格式化部分,接下来,比较TCP协议格式化图来写数据。 这里,使用科学计算机可转换16位数字系统为2位数字和10位数字系统。

      十六进制 十进制 二进制
      源端口号 0xe542 58690
      目的端口号 0x22b8 8888
      SN 0xb1e9b0e0 这个数不等于获得相对值。
      ASN 0x00000000 0
      首部长度 0x8 8*4 = 32
      保留位置 (6) + 签名位置 (6) 0x002 0b000000   0 0 0 0 1 0

      找到相应的TCP协议格式 SYN = 1并不困难。

      然后看看后问题022*16=32的数据 字节,与第一个部长级完全相同(整个分区为32字节),可以在没有传输数据的情况下获得。

      ④流量控制

      接收器处理数据的速度是有限的,如果发送器发送太快,接收器缓冲区就会被填满,如果发送器继续发送,一个数据包就会丢失,导致一系列链路反应,如数据包重传输。

      因为TCP存在于缓存中,设想一下,如果TCP发送器一直在发送,超过接受缓冲区的最大容量,这时很明显,它已经满了,但发件人仍然发送,这将导致TCP的性能下降。就像一个物体粘在传输带上一样。但货物的后部仍然很难运输,所以除了增加传送带的拥挤,没有一点好处。提出了流程控制的概念。

      因此TCP 支持根据接收端的处理能力决定发送器的发送速度。 流量控制(Flow Control);

      流量控制(广义):TCP的发送端会根据对方接收能力和网络承载能力,动态地调节自己的发送流量。——提高到达率

      流量控制(狭义):Flow Control ——根据对方的接收能力来调节

      这里Flow Control流量控制来举例子如果你想解决这个问题,你只需要解决以下三个问题:

      1.你需要了解对象的接收能力,最好是实时。

      我们需要有人告诉我们。 在议会标题中,把接收器的能力传递给发送者。

      在文章开头的TCP协议分段格式图中,有一个头条 窗口字段。 发送segment 的时候,就已经把自己的接收能力(接收窗口)填写到segment header 的窗口字段中,发送给对方。

      接收窗口≈接收缓冲大小-使用大小(接收数据目前未被应用程序层读取)
      e.g.

      2.怎末拿到对方的接收能力? --> 发送流量

      最大发送者=另一方接收窗口

      在上面的例子中,对于最大20k,发送者发送最大20k

      3.用于控制传输数据的数量的哪些机制?-滑窗机制

      ⑤滑窗机制

      1)应用层发送的数据首先放在接收缓冲区,接收器返回响应并接收应用层发送的数据。

      2)但是接收窗口是一定的,而且应答发送的数据接收也不是一次性的,这就会有一种情况:应用层传入的数据(这一次的数据 + 上一次没有处理完的的数据)大于窗口大小。

      3)此时会发生拥挤和性能会发生变化,它还需要上面提到的流量控制,此时窗口会向右移动,并且窗口的大小将改变到以前没有发送的数据大小。

      4)需要注意的是:滑动窗口的大小 一定小于原本接收方的窗口大小。

      具体流程如下图。

      TCP接收缓冲区接收数据转换图

      ⑥拥塞控制

      拥塞控制Congestion Control ——根据网络的承载能力来调节

      ⑦延迟应答

      ⑧捎带应答

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

          热门文章

          文章分类