一、前言

本系列文章旨在复习核算机网络中心常识,进一步夯实根底,为今后 参与物联网、音视频、直播、即时通讯等领域的项目做必定的常识储藏。

文章列表:

  • 01-核算机网络中心常识|核算机网络通识【核算机网络功能指标、网络协议分层的几种方法、OSI七层模型概念通识】
  • 02-核算机网络中心常识|【搭建调试环境、新建Java项目、核算机通信根底、核算机衔接方法、集线器/网桥/交换机/路由器】
  • 03-核算机网络中心常识|【MAC地址、IP地址的组成、IP地址的分类、CIDR、子网掩码、超网】
  • 04-核算机网络中心常识|【 静态路由、动态路由、数据包的传输、ISP、服务器机房、网络分类、家用无线路由器、公网IP、
  • 05-核算机网络中心常识|物理层/数据链路层【模拟信号&&数字信号、数据链路层】
  • 06-核算机网络中心常识|网络层【IP数据包Packet、网络协议、Checksum、源IP地址和方针IP地址、ping】
  • 07-核算机网络协议中心常识|【传输层-UDP】
  • 08-核算机网络协议中心常识|【传输层-TCP之牢靠传输】
  • 09-核算机网络中心常识|传输层TCP2【流量操控原理、拥塞操控:slow start、congestion avoidance、快速重传、快速康复】
  • 10-核算机网络协议中心常识|【传输层-TCP衔接】
  • 11-核算机网络协议中心常识|【 应用层】
  • 12-核算机网络中心常识|【Cookie、Session(概念、生命周期、有用期、浏览器的要求等)、跨域(概念、 同源策略、跨域处理方
  • 13-核算机网络协议中心常识|【 代理/CDN/网络安全
  • 14-核算机网络协议中心常识|【(非)对称加密/数字签名/证书】
  • 15-核算机网络协议中心常识|【HTTPS】
  • 16-核算机网络中心常识|HTTPS协议【HTTP2、HTTP3】

本文首要重视:
TCPUDP杂乱,也是一个难点,在面试过程中也是会被大概率提问的。

二、TCP

TCP(Transmission Control Protocol):传输操控协议。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

TCP的几个关键:牢靠传输、流量操控、拥塞操控、衔接管理(树立和开释衔接)。也正由于这几点使得首部变得很杂乱。

1. 数据偏移(Reserved

占4位,取值范围是0x0101 ~ 0x1111

乘以4便是首部长度(Header Length)。所以取值范围是5 ~ 60字节,由于首部固定部分占用20字节,所以可选部分至多占用40字节(和网络层首部相同)。

为什么叫数据偏移?由于相对TCP报文向右偏移首部长度后便是数据部分。

UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部 + 数据)。可是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度。

剖析:UDP首部中占16位的长度字段是冗余的,朴实是为了确保首部是32bit对齐。TCP/UDP的数据长度,完全能够由IP数据包的首部估测出来,传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度

2. 保存(Reserved

占6位,现在全为0。

3. 查验和(Checksum

与UDP相同,TCP查验和的核算内容:伪首部 + 首部 + 数据。伪首部占用12字节,仅在核算查验和时起作用,并不会传递给网络层。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

4. 标志位(Flags

总共占6位或9位。

有些资猜中,TCP首部的保存(Reserved)字段占3位,标志(Flags)字段占9位。Wireshark中也是如此。是由于标志位中的前3位是无用的,所以两种说法都不能说是错的。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

4.1. URG(Urgent

意思:紧迫。当URG=1时,紧迫指针字段才有用。标明当前报文段中有紧迫数据,应优先赶快传送。

紧迫指针寄存的是长度值,标明TCP的前多少字节是需求紧迫优先处理的。

4.2. ACK(Acknowledgment

意思:承认。当ACK=1时,承认号字段才有用。

4.3. PSH(Push

意思:推。一般用在交互式网络中。PUSH标志位所表达的是发送方通知接纳方传输层应该赶快的将这个报文段交给应用层。

4.4. RST(Reset

意思:重置。当RST=1时,标明衔接中呈现严峻过失,有必要开释衔接,然后再从头树立衔接。

4.5. SYN(Synchronization

意思:同步。当SYN=1 & ACK=0时,标明这是一个树立衔接的恳求。若对方同意树立衔接,则回复SYN=1 & ACK=1。恳求方再发送SYN=0 & ACK=1时标明开端传输数据。这也是三次握手的流程。

4.6. FIN(Finish

意思:完成。标明数据现已发送结束,要求开释衔接。

5. 序号(Sequence Number

占4字节。首先,传输的每一个字节都会有一个编号(接连的字节编号也是接连的)。在树立衔接后,序号代表这一次传给对方的TCP数据部分的第一个字节的编号。

6. 承认号(Acknowledgment Number

占4字节。在树立衔接后,承认号代表期望对方下一次传过来的TCP数据部分的第一个字节的编号。

7. 窗口(Window

占2字节。这个字段有流量操控功用,用以奉告对方下一次答应发送的数据巨细(字节为单位)。

三、牢靠传输

1. 中止等候ARQ协议

ARQ(Automatic Repeat-reQuest),主动重传恳求。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

  • 无过失情况
    • A发送数据M1到B,B收到数据M1后向A发送承认信号M1;
    • A收到承认信号M1后,持续向B发送数据M2,B接纳后向A发送承认信号M2。
  • 超时重传
    • A发送数据M1到B,A在发送数据途中丢包或B发现数据M1有错误直接丢掉,导致B无法向A发送承认信号M1;
    • A在必定时刻间隔后发现没有收到B发送的承认信号M1,A会持续向B发送数据M1;
    • B收到数据M1后向A发送承认信号M1,A收到承认信号M1后,持续向B发送M2数据。

通过承认与超时重传机制完成牢靠传输,在发送完一个分组后,有必要暂时保存已发送的分组的副本。分组和承认分组都有必要进行编号。超时计时器的重传时刻应当比数据在分组传输的均匀往复时刻更长一些。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

  • 承认丢掉
    • A发送数据M1到B,B接纳到数据M1后,向A发送承认信号M1;
    • B在向A发送承认信号M1半途丢包,此刻A在必定时刻间隔后发现没有收到B发送的承认信号M1,A会持续向B发送数据M1;
    • B收到数据M1后会丢掉重复的数据M1(之前现已收到数据M1,仅仅A不知道),持续向A发送承认信号M1;
    • A收到承认信号M1后,持续开端发送M2数据。
  • 承认迟到
    • A发送数据M1到B,B接纳到数据M1后,向A发送承认信号M1;
    • B在向A发送承认信号M1时,由于网络推迟等原因导致A在必定时刻段内未收到承认信号;
    • A会持续向B发送数据M1,B收到数据M1后丢掉重复的数据M1,并向A发送承认信号M1;
    • A收到承认信号M1后,持续开端发送M2数据,M2数据刚发送出去,此刻A刚好接纳到B在第一次发送的承认信号M1,但由于之前现已成功接纳并处理了第2次的承认信号M1,所以A在收到承认信号后什么也不做。

呈现过失或丢掉的时候,发送方会将自己备份的副本再重传一次,直到收到接纳的承认信息。当接纳方收到重复的数据时,会直接丢掉,可是会给发送方请承认自己现已收到了。

上面的中止等候协议每发送一组数据就有必要比及接纳方回复承认后,再主张第二组数据,假如呈现超时重传的话,功率更低。因此为了进步传输的功率,改进了等候传输协议。

2. 接连ARQ协议和滑动窗口协议

接连ARQ协议和滑动窗口协议的机制是以接纳方回复承认为单位,每次接连发送一个滑动窗口指定的数据组。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

  • A发送数据给B时,一次性发送M1~M4(A和B树立衔接时,B告知A自己的缓存池能够包容多少字节数据,A根据这个缓存池的巨细构建一个同巨细的发送窗口–也能够理解为发送缓存池),此刻A开端等候承认,B收到悉数数据后会向A发送承认信号M4(以最终一个编号为准);
  • A收到承认信号后,持续向B发送M5~M8(A把之前构建的窗口滑动并确定到对应巨细的数据段上,即M5~M8),以此往复直到数据传输结束。

假如接纳窗口最多能接纳4个包(窗口巨细),但发送方只发了2个包,接纳方怎样确定后边还有没有2个包?

答案:接纳方会在等候必定时刻后发现没有第3个包,就会返回收到2个包的承认信号给发送方。

2.1. 什么是滑动窗口协议?(发送方怎样发送数据)

滑动窗口是由发送方保护的类似指针的变量,在每收到一个接纳方的承认消息后,该指针向前移动并发送数据,到窗口指定巨细的数据组时停下,等候接纳方的承认。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

2.2. 接纳方怎样回复承认?

累积承认机制: 发送方不对收到的分组逐个发送承认,而是对按序到达的最终一个分组发送承认,这样就标明:到这个分组为止的一切分组都已正确收到了。

  • 长处:简单完成,即使承认丢掉也不必重传。
  • 缺陷:不能向发送方反映出接纳方现已正确收到的一切分组的信息。

Go-back-N(回退 N): 为了处理上述同一窗口中数据组不能完好承认的问题,接连ARQ协议采用了回退机制。比如说:发送方发送了前5个分组,而中心的第3个分组丢掉了。这时接纳方只能对前两个分组发出承认。发送方无法知道后边三个分组的下落,而只好把后边的三个分组都再重传一次。这就叫做 Go-back-N(回退 N),标明需求再退回来重传已发送过的N个分组。

定论:当通信线路质量不好时,接连ARQ协议会带来负面的影响。或许还不如传统的中止等候协议。

3. TCP牢靠传输的完成

  • TCP衔接的每一端都有必要设有两个窗口——一个发送窗口和一个接纳窗口。
  • TCP的牢靠传输机制用字节的序号进行操控。TCP一切的承认都是根据序号而不是根据报文段。
  • TCP两头的四个窗口经常处于动态改变之中。
  • TCP衔接的往复时刻RTT也不是固定不变的。需求使用特定的算法预算较为合理的重传时刻。

3.1. 以字节为单位的滑动窗口技能

滑动窗口是面向字节流的,为了方便记住每个分组的序号,现在假设有一个1200字节的数据,分12组,每一组数据是100个字节,代表一个数据段的数据(每一个数据都有自己的TCP首部),每一组给一个编号(1~12)。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

3.2. 挑选承认(SACK)

TCP通信时,假如发送序列中心某个数据包丢掉,TCP会通过重传最终承认的分组后续的分组,这样原先现已正确传输的分组也或许重复发送,降低了TCP功能。

SACK(Selective Acknowledgment,挑选承认)技能,使TCP只从头发送丢掉的包,不必发送后续一切的分组,并且提供相应机制使接纳方能告知发送方哪些数据丢掉,哪些数据现已提早收到等。

在树立TCP衔接时,就要在TCP首部的选项中加上“答应SACK”的选项,而两边有必要都事前商定好。原来首部中的“承认号字段”的用法仍然不变。仅仅今后在TCP报文段的首部中都增加了SACK选项,以便陈述收到的不接连的字节块的鸿沟。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

Kind:占1个字节,值为5代表这是SACK选项。 Length:占1个字节,标明SACK选项总共占用多少字节。 Left Edge:占4个字节,左鸿沟。 Right Edge:占4个字节,右鸿沟。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

上图的着色模块代表已接纳数据,空白代表未接纳数据。左右鸿沟意思是会把未接纳结束的TCP数据包的已接纳数据进行左右标记。

由于TCP的选项不能超越40个字节,去除Kind和Length占用的2个字节,还剩余38个字节给左右鸿沟使用。一组鸿沟占用8个字节(左右鸿沟各占4个字节),所以鸿沟不能超越4组。也能够因此推断出SACK选项的最大占用字节数是4 * 8 + 2 = 34

考虑:超越选项鸿沟的数据怎样办?

超越鸿沟的数据需求从头传输,但这现已很大程度进步了传输功率。

能够测验访问http://icp.chinaz.com测验抓包TCP数据探究SACK:

3.3. 超时重传时刻的挑选

重传机制是TCP中最重要和最杂乱的问题之一。TCP每发送一个报文段,就对这个报文段设置一次计时器。只需计时器设置的重传时刻到但还没有收到承认,就要重传这一报文段。那么这个重传时刻到底应该设置多少呢?主张跳过,有兴趣的能够去查阅相关材料。

08-计算机网络核心知识|传输层TCP1【数据偏移和保留、Checksum、标志位、序号、确认号、窗口、ARQ、滑动窗口协议、SACK】

4. 考虑

为什么挑选在传输层就将数据分割成多个段,而不是比及网络层再分片传递给数据链路层?

由于能够进步重传的功能。需求清晰的是,牢靠传输是在传输层进行操控的。

  • 假如在传输层不分段,一旦呈现数据丢掉,整个传输层的数据都得重传

  • 假如在传输层分段了,一旦呈现数据丢掉,只需求重传丢掉的那些段即可