网络通信协议 ---转自别人的文档笔记

发布时间 2023-09-03 13:01:12作者: huh&uh

网络

网络性能指标

速率

比特(bit/s或bps)是计算机中最小的数据量单位。

\[1bit=8Byte(字节) 1KB=2^{10}B 1MB=2^{10}KB=2^{20}B 1GB=2^{10}MB=2^{20}KB=2^{30}B 1TB=2^{10}GB=2^{20}MB=2{30}KB=2^{40}B \]

速率是计量数据传输速度的指标,表示单位时间内传输的数据量。它是衡量数据传输速度的基本概念。

速率通常以比特率(bit rate)来表示,即每秒传输的比特数(bps)。比特是最小的数据单位,可以表示0或1。常见的速率单位还包括千比特每秒(Kbps)、兆比特每秒(Mbps)、千兆比特每秒(Gbps)等。

速率与数据传输相关,它表示在网络或传输介质中单位时间内可以传输的数据量。例如,如果一个网络的速率为10 Mbps,则表示每秒可以传输10兆比特的数据。

\[1KB/s = 10^3b/s(bps)\\ 1MB/s = 10^3KB/s=10^6b/s\\ 1GB/s = 10^3MB/s=10^6KB/s=10^9b/s\\ 1TB/s = 10^3GB/s=10^6MB/s=10^9KB/s=10^{12}b/s \]

带宽

带宽原本指某个信号具有的频带宽度,即最高频率与最低频率之差,单位是赫兹(Hz)。计算机网络中,带宽用来表示网络的通信线路传送数据的能力,通常是指单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。单位是“比特每秒”,b/s,kb/s,Mb/s,Gb/s。网络设备所支持的最高速度。

吞吐量

表示在单位时间内通过某个网络(或信道、接口)的数据量。单位b/s, kb/s,Mb/s等。吞吐量受网络的带宽或网络的额定速率的限制。

时延

指数据(一个报文或分组)从网络(或链路)的一端传送到另一端所需要的总时间,它由4部分构成,发送时延、传播时延、处理时延、排队时延

总时延=发送时延+传播时延+处理时延+排队时延

发送时延

结点将分组的所有比特推向(传输)链路所需要的时间,即从发送分组的第一个比特算起,到该分组的最后一个比特推向传输链路所需要的时间。也称传输时延

\[发送时延= \frac{信道宽度(发送速率)}{分组长度(数据长度)} \]

假设我们的发送速率为 10b/s ,数据长度为10个bit,所以我们的发送时延为1秒

传播时延

电磁波在信道中传播一定的距离需要花费的时间,即一个比特从链路的一端传播到另一端所需要的时间。

\[传播时延= \frac{信道长度(链路长度)}{电磁波在信道中的传播速率} \]

我们假设AB之间的链路长度为100米,传输数率为10m/s,则传播时延为10秒。
一般在链路中,传输速率为\(2.0×10^8 m/s\) 左右

排队时延
分组在进入路由器后要先在输入队列中排队等待处理。因为路由器可能也同时在处理其他链路传过来的数据,所以需要等待。然后终于等到路由器来处理你的数据了,路由器处理完你的数据后,会给你一个转发端口,然后你就拿着这个端口号又在输出队列中排队等待转发,因为等待转发的不止你一个啊,路由器一下会处理很多的数据,这就产生了排队时延。

处理时延

数据在交换结点为存储转发而进行的一些必要的处理所花费的时间。

例如:分析分组的首部、从分组中提取数据部分、进行差错检验或查找适当的路由等

时延带宽积

指发送端发送的第一个比特即将到达终点时,发送端已经发出了多少个比特。

因此又称为以比特为单位的链路长度

\[时延带宽积 = 传播时延×信道带宽 \]

往返时间

往返时间(RRT)是指双向交互一次所需要的时间

\[RRT=往返传播时延+末端处理时间\\ 往返传播时延=传播时延\times 2 \]

利用率

指出某一信道有百分之多少的时间是有数据通过的。利用率包括信道利用率和网络利用率

\[信道利用率=\frac{有数据通过时间}{(有+无)数据通过时间}\\ 网络利用率= 信道利用率加权平均值 \]

丢包率

丢包率(Packet Loss Rate)是指在数据传输过程中丢失的数据包的比例。丢包率通常以百分比形式表示,即在数据传输过程中丢失的数据包数量与发送的数据包总数之比。例如,如果发送了100个数据包,但只有95个数据包到达了目的地,那么丢包率就是5%。

OSI七层模型

OSI(Open Systems Interconnection)是国际标准化组织(ISO)制定的一个用于网络通信的参考模型,它将网络通信的功能划分为七个层次,被称为OSI七层模型。每个层次都有特定的功能和责任,通过逐层协作来实现端到端的数据传输和通信。下面是OSI七层模型的各个层次:

  1. 物理层(Physical Layer): 物理层是最底层的层次,负责在物理媒介上传输原始的比特流。它定义了电气、光学和机械接口的规范,以及数据传输的基本单位、数据传输速率等参数。
  2. 数据链路层(Data Link Layer): 数据链路层建立了相邻节点之间的数据链路,负责数据的可靠传输。它将原始的比特流组织成帧(Frame)并进行物理寻址、差错检测和纠正等操作。
  3. 网络层(Network Layer): 网络层负责在整个网络中寻址和路由数据。它将数据分割成更小的数据包(Packet)并进行逻辑寻址,然后通过路由选择算法将数据包从源节点传输到目标节点。
  4. 传输层(Transport Layer): 传输层提供端到端的可靠数据传输服务。它负责分割和重组数据,确保数据的完整性、顺序和可靠性。常见的传输层协议有TCP(传输控制协议)和UDP(用户数据报协议)。
  5. 会话层(Session Layer): 会话层负责建立、管理和终止通信会话。它提供了会话控制机制,可以在不同节点之间建立会话并管理会话的状态和同步。
  6. 表示层(Presentation Layer): 表示层负责数据的表示和转换,确保不同系统之间的数据格式兼容。它处理数据的加密、压缩、编码和解码等操作,以便数据在网络中传输和解释。
  7. 应用层(Application Layer): 应用层是最高层的层次,提供了网络服务和应用程序之间的接口。它包括了各种应用协议,如HTTP、FTP、SMTP等,用于实现特定的网络应用功能。

OSI七层模型的分层结构使得网络通信的功能分散到不同的层次,每个层次都可以独立设计和实现。这种分层的架构有助于网络的可扩展性、互操作性和模块化。同时,它也提供了一个通用的参考框架,便于理解和描述网络通信的各个方面。然而,实际的网络协议栈(如TCP/IP)并不完全遵循严格的OSI七层模型,但该模型仍然是学习和理解网络通信的基础。

OSI五层模型

  1. 物理层(Physical Layer): 物理层是最底层的层次,负责传输比特流(bitstream)的物理介质和电信号。它定义了连接设备之间的传输媒介、电压电平、物理连接的规范和接口等。
  2. 数据链路层(Data Link Layer): 数据链路层建立了相邻节点之间的数据链路,负责将原始的比特流组织成帧(Frame)并进行物理寻址、差错检测和纠正等操作。它可以进一步分为逻辑链路控制(LLC)子层和介质访问控制(MAC)子层。
  3. 网络层(Network Layer): 网络层负责在整个网络中寻址、路由数据包(Packet)并进行交换。它将数据包从源节点传输到目标节点,解决了不同网络之间的数据传输问题。常见的网络层协议有 IP(Internet Protocol)。
  4. 传输层(Transport Layer): 传输层提供端到端的可靠数据传输服务。它负责分割和重组数据,确保数据的完整性、顺序和可靠性。常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。
  5. 应用层(Application Layer): 应用层是最高层的层次,提供了网络服务和应用程序之间的接口。它包括了各种应用协议,如 HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等,用于实现特定的网络应用功能。

OSI 五层模型提供了一个通用的参考框架,用于理解和描述网络通信的各个方面。然而,在实际的网络中,广泛采用的是 TCP/IP 协议栈,它由 TCP 和 IP 协议作为核心,并集成了 OSI 模型中的多个层次的功能。

数据发送流程

在计算机网络中,数据传输经过OSI(Open Systems Interconnection)参考模型的每一层时,会发生以下操作:

  1. 物理层(Physical Layer):

    • 物理层负责传输比特流,将比特流转化为物理信号并在网络媒介上进行传输,如电缆、光纤等。
    • 在发送端,物理层将比特流转换为电压、光信号等物理形式。
    • 在接收端,物理层将物理信号转换为比特流。
  2. 数据链路层(Data Link Layer):

    • 数据链路层将比特流划分为帧(Frame),并为每个帧添加首部和尾部,形成数据包。
    • 在发送端,数据链路层负责将数据包从物理层传递到接收端,确保可靠的传输。
    • 在接收端,数据链路层接收数据包,并进行帧同步、差错检测和纠正。
  3. 网络层(Network Layer):

    • 网络层负责数据包的路由和转发,将数据包从源主机发送到目标主机。
    • 网络层使用IP(Internet Protocol)地址来标识主机和路由器,并根据目标地址选择最佳路径。
    • 在发送端,网络层将数据包添加网络层首部,包含源IP地址和目标IP地址。
    • 在接收端,网络层根据目标IP地址将数据包传递给适当的主机或路由器。
  4. 传输层(Transport Layer):

    • 传输层提供端到端的可靠数据传输服务,通过端口号将数据传递给应用层。
    • 传输层使用TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)来实现可靠或不可靠的传输。
    • 在发送端,传输层将数据分割为较小的数据段,并添加传输层首部,包含源端口号和目标端口号。
    • 在接收端,传输层重新组装数据段,并将数据传递给适当的应用程序。
  5. 会话层(Session Layer):

    • 会话层建立、管理和终止会话(Session)或连接,使不同主机上的应用程序能够进行通信。
    • 会话层负责建立和维护会话标识、同步数据传输和处理异常情况。
  6. 表示层(Presentation Layer):

    • 表示层处理数据的格式、编码和加密,以确保应用程序之间的正确解释和交流。
    • 表示层负责数据的压缩、加密、解密、解析和格式转换。
  7. 应用层(Application Layer):

    • 应用层是最高层,提供网络服务和应用程序之间的接口。
    • 应用层包括各种协议和服务,如HTTP、FTP、SMTP等,用于实现不同的应用需求。

总结:在数据传输过程中,OSI模型的每一层都承担不同的功能和任务。物理层负责传输物理信号,数据链路层将数据组装为帧,网络层进行路由和转发,传输层提供端到端的可靠数据传输,会话层管理会话和连接,表示层处理数据格式和加密,应用层提供网络服务和应用程序接口。每一层通过添加首部和尾部或执行特定的操作,将数据从发送端传递到接收端,确保可靠的传输和正确的解释。

物理层

物理层基本概念

消息:指在计算机网络中传输的数据单元,可以是文本、图像、音频、视频或其他形式的数据。

信息:消息所包含的含义和内容,也就是对接收方有意义的数据。消息是信息的载体。

通信:在一点精确或近似地再生另一点的信息。例如人与人之间的对话。

信号:在传输信道中传递信息的载体。

数据:对客观事物的性质状态以及相互关系等进行记载的符号及其组合,通常可以是数字,文字图像等,也可以是其他抽象符号。

信道:信道是信号传输的介质,或信道是以传输介质为基础的信号通道。

数据通信系统模型:

Snipaste_2023-07-31_11-05-48

各部分的功能如下。

  • 信源:将消息转换为信号的设备,如电话机、摄像机、计算机等。
  • 发送设备:将信源产生的信号进行适当的变换的装置,使之适合于在信道中传输。变换的方式主要包括编码和调制。
  • 信道:信号传输的媒介,总体上可以分为有线信道和无线信道两大类,具体的类型包括双绞线、同轴电缆、光纤、大气层、外层空间等。
  • 接收设备:完成发送设备的反变换,即进行译码和解调,还原原始的发送信号。
  • **信宿****:信号的终点,并将信号转换为供人们能识别的消息。
  • 噪声源:自然界和通信设备中所固有的,对通信信号产生干扰和影响的各种信号。噪声对通信系统是有害的,但又无法完全避免。

这是通信系统的一般模型,而数据通信系统的模型是其中的一种类型,其中的信源和信宿被限定为能够产生、存储和处理二进制数据的设备,如计算机、智能终端等,区别于传统的电话通信系统、广播电视通信系统。

模拟通信和数字通信:

信系统根据信号种类可分为模拟通信系统和数字通信系统,其区别在于信道中传输的是模拟信号还是数字信号。

  • 模拟信号是指信号的因变量完全随连续消息的变化而变化的 信号。模拟信号的自变量可以是连续的,也可以是离散的,但其因变量一定是连续的, 传统的电视图像信号、电话语音信号,各种传感器的输出信号以及许多遥感遥测信号都是模拟信号。
  • 数字信号是指表示消息的因变量是离散的,自变量时间的取值也是离散的信号,数字信号的因变量的状态是有限的。如计算机数据、数字电话和数字电视等都是数字信号

虽然模拟信号与数字信号有着明显的差别,但二者之间并没有存在不可逾越的鸿沟,在一定条件下它们是可以相互转化的。模拟信号可以通过采样、量化和编码等步骤变成数字信号,而数字信号也可以通过解码、平滑等步骤恢复为模拟信号。

物理层解决的问题

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指连接计算机的具体的物理设备或具体的传输媒体。

物理层的作用是尽可能地屏蔽计算机网络中的物理设备、传输媒体、通信方式等方面的差异,使数据链路层感觉不到这些差异。

物理层协议的主要任务

物理层的主要任务描述为确定与传输媒体的接口的一些特性,即:

  1. 机械特性 :指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。
  2. 电气特性 :指明在接口电缆的各条线上出现的电压的范围。
  3. 功能特性 :指明某条线上出现的某一电平的电压表示何种意义。
  4. 过程特性 :指明对于不同功能的各种可能事件的出现顺序。

物理层下传输媒体

导引型传输媒体

  1. 双绞线(Twisted Pair):双绞线是一种常用的传输介质,由两根绝缘的铜线以螺旋形缠绕在一起。双绞线通常用于以太网网络,支持多种速率和距离要求。常见的双绞线包括无屏蔽双绞线(UTP)和屏蔽双绞线(STP)。
  2. 同轴电缆(Coaxial Cable):同轴电缆由一个中心导体、绝缘层、金属外层导体和外部绝缘层组成。它通常用于电视信号传输和有限的局域网(如10BASE2和10BASE5以太网)。
  3. 光纤(Fiber Optic):光纤是一种使用光信号传输数据的导引型传输媒介。它由细长的玻璃或塑料纤维组成,通过内部的全反射现象来传输光信号。光纤传输具有高带宽、低衰减、抗电磁干扰等优点,被广泛用于长距离高速数据传输和通信网络。
    • 多模光纤 :可以存在多条不同角度入射的光线在一条光纤中传输。这种光纤就称为多模光纤。
    • 单模光纤:若光纤的直径减小到只有一个光的波长,则光纤就像一根波导那样,它可使光线一直向前传播,而不会产生多次反射。这样的光纤称为单模光纤。
  4. 导线电缆(Leased Line):导线电缆是通过物理导线(如铜线)连接两个或多个网络设备的专用传输线路。它提供点对点的连接,不需要共享带宽,通常用于实现可靠的长距离数据传输。

非导引型传输媒体

  1. 无线电波(Radio Waves):无线电波是一种电磁波,用于无线通信和广播。无线电波可以在空气中传播,通过调制和解调的过程,将数据转换为无线电信号进行传输。
  2. 微波(Microwaves):微波是一种高频的无线电波,用于微波通信和卫星通信。微波信号可以在空间中传播,并通过天线和卫星系统进行发送和接收。
  3. 红外线(Infrared):红外线是一种电磁波,具有较短的波长,适用于近距离的无线数据传输。红外线传输常用于红外遥控器、红外数据传输等应用。
  4. 激光(Laser):激光是一种高强度、高聚焦的光束,可以用于光通信和光纤通信。激光光束通过光纤传输数据,具有高带宽和长距离传输的能力。

无线局域网使用的 ISM 频段

要使用某一段无线电频谱进行通信,通常必须得到本国政府有关无线电频谱管理机构的许可证。但是,也有一些无线电频段是可以自由使用的。例如:ISM。各国的 ISM 标准有可能略有差别。

传输方式

串行传输

串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

使用一条数据线,将数据一位一位地依次传输。
一般来说,远距离的通信都是采用串行传输,计算机之间也采用串行通信。
成本低,相对简单。

并行传输

并行传输指的是数据以成组的方式,在多条并行信道上同时进行传输,是在传输中有多个数据位同时在设备之间进行的传输。

使用多条数据线,将数据以组的形式进行同时传输。
一般来说,计算机内部,如CPU、内存之间的传输。通常采用总线形式,常见的总线宽度有8位、16位、32位、64位等。
成本高,适用于计算机内部通信。

数据传输

是指数据在传输过程中的时钟同步方式。它分为同步传输和异步传输。

同步传输(Synchronous Transmission)

在同步传输中,数据的传输速率是以固定的时钟信号为基准进行同步的。发送端和接收端的时钟需要保持高度同步,以确保数据能够按照预定的速率和时间间隔进行传输。在同步传输中,数据按照块(帧)的形式进行传输,每个数据块的开始和结束都与时钟信号的边沿对齐。这种传输方式适用于高速、连续的数据传输,如音视频传输和高速数据网络。

异步传输(Asynchronous Transmission)

在异步传输中,数据的传输不需要严格的时钟同步。每个数据字符或数据块都附带有起始位和终止位,用于标识数据的开始和结束。数据的传输速率可以是不固定的,每个数据字符之间的时间间隔可以是任意的。异步传输常用于低速、间断的数据传输,如串口通信、键盘输入等。

区别:

  • 同步传输依赖于时钟同步,数据按照固定的时钟信号进行传输,适用于高速、连续的数据传输。异步传输不需要时钟同步,数据通过起始位和终止位进行标识,适用于低速、间断的数据传输。
  • 同步传输的传输速率固定,数据的开始和结束都与时钟信号的边沿对齐。异步传输的传输速率可以不固定,每个数据字符之间的时间间隔可以是任意的。
  • 同步传输通常需要更复杂的硬件和软件支持来确保时钟同步和数据的同步传输。异步传输相对简单,硬件和软件开销较小。

选择同步传输还是异步传输取决于具体的应用需求和传输环境。高速、连续的数据传输通常采用同步传输,而低速、间断的数据传输则常用异步传输。

单工

单工(Simplex):单工传输是指数据在通信过程中只能在一个方向上进行传输。在单工传输中,通信的一方作为发送方,而另一方则作为接收方,数据只能单向传输,不能进行双向交流。这种模式类似于广播电台或电视台向用户发送信号,用户只能接收而无法回复。

半双工

半双工(Half-duplex):半双工传输允许数据在通信的两个方向上进行传输,但不能同时进行。在半双工传输中,通信的双方可以交替地发送和接收数据,但同一时间点只能有一个方向上的数据传输。类似于对讲机或无线电,一方发言时,另一方需要等待,然后切换到接收模式。

全双工

全双工(Full-duplex):全双工传输允许数据在通信的两个方向上同时进行传输。在全双工传输中,通信的双方可以同时发送和接收数据,无需交替。这种模式类似于电话通话,双方可以同时说话而不需要等待。

异步通信

异步数据传输是以字符为单位独立进行发送,次传输 一个字符, 每个字符用5~8位来表示,在每个字符前面加一个起始位,以指明字符的开始,每个字符后面增加1个或2个停止位,以指明字符的结束:无字符发送时,发送方就一直发送停止位。接收方根据起始位和停止位判断字符的开始和结束,并以字符为单位接收数据。异步传输不需要在收发两端间传输时钟信号,所以实现起来比较简单,但是传输效率较低,只适用于低速数据传输系统。

同步通信

同步数据传输以数据块为单位进行发送。每个数据块内包含有多个字符,每个字符可用5~8个位表示,在每个数据块的前面加一个起始标志,以指明数据块的开始,在其后面增加一个结束标志,以指明数据块的结束。接收方根据起始标志和结束标志以数据块为单位进行接收。同步传输方式的传输效率高,开销小,但收发双方需建立同步时钟,实现和控制比较复杂。同步传输方式适合于高速数据传输系统。

信道

Snipaste_2023-07-31_11-24-28

信道是通信系统中连接发送端与接收端的通信设备,实现从发送端到接收端的信号传送。信道的定义区分为广义信道和狭义信道。狭义信道即为信号传输介质,广义信道包括信号传输介质和通信系统的一些变换装置,如发送设备、接收设备、天线、调制器等。通常,在讨论通信的一般原理时,采用广义信道,在研究信道的一般特性时,主要考虑狭义信道。一般情况下,将广义信道简称为信道。

广义的信道定义除了包括传输介质,还包括传输信号的相关设备。按照功能划分,可以将广义信道划分为调制信道和编码信道两类。

调制信道:

调制信道是指信号从调制器的输出端传输到解调器的输入端经过的部分,对于调制和解调是指信号在调制信道上经过的传输介质和变换设备都对信号做出了某种形式的变换,调制信道、输入信号、输出信号存在以下特点。

  1. 信道总具有输入信号端和输出信号端。
  2. 信道一般是线性的, 即输入信号和对应的输出信号之间满足线性叠加原理。
  3. 信道是因果的,即输入信号经过信道后,相应的输出信号响应具有延时。
  4. 信道使通过的信号发生畸变,即输入信号经过信道后,相应的输出信号会发生衰减。
  5. 信道中存在噪声,即使输入信号为零,输出信号仍然会具有一定功率。

如果信号通过信道发生的畸变是时变的,这种信道称为随机参数信道,简称为随参信道。如果畸变与时间无关,这种信道称为恒定参数信道,简称为恒参信道。通常,比较常见的架空明线、电缆、波导、中长波地波传播、超短波及微波视距传播、卫星中继、光导纤维以及光波视距传播等传输介质构成的信道均属于恒参信道,其他介质构成的信道属于随参信道。

编码信道:

编码信道是指数数字信号由编码器输出端传输到译码器输入端经过的部分,包括其中的所有变换装置与传输介质。从编译码的角度来看,编码器输出的数字序列经过编码信道上的一系列变换之后,在译码器的输入端成为另组数字序列,通常只关心这两组数字序列之间的变换关系, 而并不关心这一系列变换 发生的具体物理过程,甚至并不关心信号在调制信道上的具体变化。

编码信道是包括调制信道及调制器、解调器在内的信道,与调制信道模型有明显的不同,调制信道对信号的影响是使调制信号发生“模拟”变化,而编码信道对信号的影响则是一种数字序列的变换,即把一种数字序列变换为另一种数字序列。因此,有时把调制信道看成是一种"模拟”信道,而把编码信道看成是一种数字信道。

编码信道可分为无记忆编码信道和有记忆编码信道。

  • 无记忆编码信道是指信道中码元的差错发生是相互独立的,即当前码元的差错与其前后码元的差错没有依赖关系。
  • 有记忆编码信道是指信道中码元差错的发生不是独立的,即当前码元的差错与其前后码元的差错是有联系的。通过信道编码可以实现对编码信道数据传输过程中的差错检测或纠正。

信道传输特性

不同类型的信道对信号传输的影响差异较大,恒参信道的传输特性变化小,缓慢,可以视为恒定,不随时间变化。随参信道的传输特性是时变的。

恒参信道特性

  • 对信号幅值产生固定的衰减
  • 对信号产生固定的时延

满足上述特性的理想恒参信道的信号传输称为无失真传输。恒参信道也并非总是如此“理想”,当实际信道的传输特性偏离了理想信道特性时,就会产生失真(或称畸变

随参信道特性

  • 信号的传输衰减随时间随机变化。
  • 信号的传输时延随时间随机变化。
  • 存在多径传播现象。

随参信道的传输特性随时间随机快速变化。多径传播是指由发射天线发出的电磁波可能经过多条路径到达接收端,每条路径对信号产生的衰减和时延都随时间随机变化,因此,接收端接收的信号是经多条路径到达的衰减与时延随时间变化的多路信号的合成。多径传播对信号传输质量影响很大,这种影响称为多径效应

编码与调制

消息,数据和信号

  1. 消息(Message):消息是数据通信中的抽象概念,表示需要传输的信息或要交换的内容。它可以是文字、声音、图像、视频等形式的数据,代表着通信的目的和意义。消息通常由发送方产生,并传输给接收方。是运送消息的实体。
  2. 数据(Data):数据是消息的具体表现形式,是以离散的数字或字符形式表示的信息。在计算机系统中,数据可以是二进制位(比特)的序列,例如01010101。数据可以由消息进行编码而来,用于在通信中传输和存储。
  3. 信号(Signal):信号是数据在传输介质中的物理表现形式。它是根据数据产生的电压、电流、光脉冲或其他物理量的变化。信号在传输介质上传播,并在接收端解码还原为原始的数据。信号可以是模拟信号或数字信号,用于在传输媒介上传输和传递数据。信号分为:
    • 数字基带信号:
    • 模拟基带信号:

编码

数字信号在数字信道中传输。模拟信号模拟信道中传输。在不改变信号性质的情况下,仅对数字基带信号的波形进行变换,称为编码。

常见编码:

  1. 非归零编码(Non-Return-to-Zero, NRZ):NRZ编码中,逻辑1表示为一种电平(例如高电平),逻辑0表示为另一种电平(例如低电平)。NRZ编码简单直观,但容易受到时钟漂移和直流分量的影响。
  2. 归零编码(Return-to-Zero, RZ):RZ编码中,每个位时间被划分为两个相等的时间间隔。逻辑1表示为一个电平的脉冲(例如正脉冲),逻辑0表示为零电平。RZ编码在每个位时间内都有信号变化,可以提高同步性能,但传输带宽要求较高。
  3. 曼彻斯特编码(Manchester Encoding):曼彻斯特编码将每个位时间划分为两个相等的时间间隔。逻辑1由信号的上升沿和下降沿表示,逻辑0则是信号的下降沿和上升沿。曼彻斯特编码具有自同步的特性,但传输速率比NRZ编码低一半。
  4. 差分曼彻斯特编码(Differential Manchester Encoding):差分曼彻斯特编码通过信号的变化来表示数据位,而不依赖绝对的电平。逻辑1由信号变化表示,逻辑0则是信号不变。它提供了自同步和时钟恢复的能力,且没有直流分量。

image-20230708193547971

4B/5B编码:4B/5B编码是一种多对多编码方式,将4位数据编码为5位码字。它用于高速串行通信中,可提供更好的信号传输特性和错误检测能力。

将欲发送数据的每4位作为一组,然后按照4B/5B编码规则将其转换成相应的5位码。5位码共32种组合,但只采用其中的16种对应16种不同的4位码,其他的16种作为控制码(帧的开始和结束、线路的状态信息等)或保留。

32种组合中选取16种的规则:

①. 每个5比特码组中不含多于3个“0”;
②. 或者5比特码组中包含不少于2个“1”;
Snipaste_2023-07-08_19-43-02

调制

把数字基带信号的频率范围搬移到较高的频段,并转换为模拟信号,称为调制。

基本调制(二元制)

  • 调幅(Amplitude Modulation, AM):调幅调制是通过改变载波信号的幅度来表示数字数据。
  • 调频(Frequency Modulation, FM):调频调制是通过改变载波信号的频率来表示数字数据。
  • 调相(Phase Modulation, PM):调相调制是通过改变载波信号的相位来表示数字数据。

混合调制(多元制)

  • 正交振幅调制(Quadrature Amplitude Modulation, QAM):QAM是一种复合调制技术,同时调整载波信号的幅度和相位,以表示更多的数字数据。

码元

在使用时间域的波形表示数字信号时,代表不同离散数值的基本波形。称为码元。

举个例子,假设有一个二进制信号流用于数字通信,其中 0 表示低电平,1 表示高电平。那么每个比特就是一个码元。以下是一个示例的二进制码元序列:

010101000110000101011001

在这个序列中,每个比特都是一个码元,共有 24 个码元。每个码元表示了相应时间点的电平状态。

另一个例子是多级调制中的码元。假设使用四进制调制,其中每个码元表示两个比特。以下是一个示例的四进制码元序列:

23010212

在这个序列中,每个码元表示两个比特,共有 8 个码元。每个码元的取值可以是 0、1、2 或 3,分别表示不同的信号状态。这些码元可以通过调制和解调技术在传输过程中转换为模拟信号或数字信号,用于高效地传输数据。

码元与比特率的关系:

  • 当1个码元只携带1比特的信息时,则波特率(码元/秒)与比特率(比特/秒)在数值上是相等的。
  • 当1个码元携带n比特的信息时,则波特率转化成比特率时,数值要乘以n

信道的极限容量

造成信号失真因素

码元传输速率

信号传输距离

噪声干扰

传输媒体质量

奈氏准则

奈氏准则:在理想低通(没有噪声、带宽有限)的信道中,为了避免码间串扰,极限码元传输率为2W Baud(波特即码元/s)。若用V表示每个码元离散电平的数目(码元的离散电平数目是指有多少种不同的码元,比如有16种不同的码元,则需要4位二进制位,因此数据传输率是码元传输率的4倍),则极限数据率为:理想低通信道下的极限数据传输率.

\[理想低通信道下的极限数据传输率=2W \log_2 V \space \space(单位:b/s) \]

  • W:理想低通信道的带宽,单位为Hz。
  • V:表示每个码元离散电平的数目

由奈氏准则,可以得出以下结论:

  1. 在任何信道中,码元传输的速率是有上限的。若传输速率超过此上限。就会出现严重的码间串扰问题(是指在接收端收到的信号的波形失去了码元之间的清晰界限),使接收端对码元的完全正确识别成为不可能。
  2. 信道的频带越宽(即能通过的信号高频分量越多),就可以用更高的速率进行码元的有效传输。
  3. 奈氏准则给出了码元传输速率的限制,但并没有对信息传输速率给出限制,也就是说没有对一个码元可以对应多少个二进制位作出限制。
  4. 由于码元的传输速率受奈氏准则的制约,所以要提高数据的传输速率,就必须设法使每个码元能携带更多个比特的信息量,这就是需要采用多元制的调制方法。

香农公式

信道容量:指信道中信息无差错传输的最大速率。
信道模型中定义了两种广义信道,调制信道和编码信道。
调制信道是一种连续信道,可以用连续信道的信道容量来表征;编码信道是一种离散信道,可以用离散信道的信道容量来表征。

\[C=W\times \log_2(1+\frac{S}{N}) \]

C:信道的极限传输速率

W:信道带宽(单位:HZ)

S:信道内所传信号的平均功率

N:信道内的高斯噪声功率

S/N:信噪比,使用分贝(dB)作为度量单位

\[信噪比(dB)=10\times \log_{10}(\frac{S}{N})\space \space (dB) \]

香农公式的意义如下:

  1. 量化了信道的容量:香农公式通过数学公式给出了一个通信信道的理论最大传输速率,即信道容量。这个容量表示了在给定的信噪比条件下,可以在该信道上传输的最高信息速率。它提供了一个基准,帮助人们评估和设计通信系统的性能。
  2. 确定了通信系统的极限:香农公式所计算出的信道容量是一个极限值,表示了在没有编码和调制方案的限制下,通信系统可以实现的最高速率。这个极限值对于设计和优化通信系统非常重要,使得工程师可以了解到底有多少信息可以在特定信道上传输。
  3. 提供了信息编码和调制的指导:由于信道容量是一个上限,实际通信系统往往不能达到这个极限。为了接近信道容量,需要使用有效的信息编码和调制技术。香农公式的存在可以指导通信系统的设计和优化,帮助工程师选择合适的编码方案、调制方案和其他通信参数,以尽可能接近信道容量。
  4. 奠定了信息理论的基础:香农公式的提出标志着信息论的诞生,并为信息理论奠定了重要的基础。信息论研究了信息的量化、传输和存储,是现代通信和数据处理的重要理论基础。香农公式是信息论的核心内容之一,对于信息论的发展和应用起到了重要的推动作用。

数据链路层

目的:在原始的、有差错的物理传输线路的基础上,采取差错检测,差错控制和流量控制等方法,将有差错的物理线路改进成逻辑上的无差错的数据链路,以便向他的上一层网络层提供高质量的服务。

服务:组帧,链路接入,可靠交付,差错控制。

链路:从一个节点到相邻节点的一段物理线路,而没有任何其他的交换节点。

数据链路:把实现通信协议的硬件和软件加到链路中,构成了数据链路。

数据链路层以帧为单位传输和处理数据。

封装成帧

封装成帧:指数据链路层给上层交付的协议数据单元添加到帧头和帧尾使之成为帧。帧头和帧尾中含有重要的控制信息。

帧头和帧尾的作用:帧定界

透明传输:指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。

  1. 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
  2. 面向比特的物理链路使用比特填充的方法实现透明传输。

常用的透明传输实现方法

  • 字节计数法:是一种以一个特殊字符代表一个帧的起始,并以一个专门的字段来标识当前帧内字节数的帧同步方法。接收端可以通过对该特殊字符的识别从比特流中区分出每个帧的起始,并从专门字段中获知每个帧后面跟随的“数据”(Data)字段的字节数,从而可确定出每个帧的结束位置。
  • 比特填充的首尾定界符法:是通过在帧头和帧尾各插入一- 个特定的比特串(如 1111110) 来标识-一个数据帧的起始与结束,这个帧头、帧尾特定比特串称为帧标志符。如传输的比特流为 100110101, 组装成帧后就是 01111110100111010101111110。而为了透明传输,也就是为了避免在信息位中出现的与帧起始和结束标志符相似的比特串时被误判为帧的首、尾标志,采用了比特填充的方法。比如上面采用的特定模式为 0111, 则对信息位中的任何连续出现的 5 个“1”(因为帧标志符中是有 5 个连续“1”),发送端自动在其后插入一个“0”。
  • 字符填充的首尾定界符法: 是用一些特定的控制字符来定界-一个帧的起始与结束,如 IBM 的 BSC 协议在每个数据块的头部用一个或多个同步字符“SYN”来标记数据块的开始;尾部用字符“ETX“来标记数据决的结束。另外,为了不使数据信息中与以上特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据帧的帧头填充一个转义控制字符(Data Link Escape -Startof Text, DLE),这就属于“透明传输”的范围了
  • 违法编码法:是在物理层采用特定的比特编码方法时采用。例如,曼彻斯特编码方法,将数据“1”编码成“高-低”电平对(在半个码元处跳变),将数据“0”编码成“低-高”电平对。而高-高电平对和低-低电平对在数据比特中是违法的,因此可以借用这些违法编码序列来定界帧的起始与终止。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适用于采用冗余编码的特殊编码环境。

差错检测

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错: 1可能会变成0,而0也可能变成1。这称为比特差错。

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。

使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

在信道传输过程中受到的噪声干扰大致分为:随机噪声和冲击噪声两大类:

  • 随机噪声:包括热噪声,传输介质引起的噪声等,具有典型的随机特征。
  • 冲击噪声:指突然发生的噪声,如雷击,电机启动停止等,具有很强的突发性。

差错控制的基本方式:

  • 检错重发:在检错重发方式中,发送端对待发送数据进行差错编码,编码后的数据通过信道传输,接收端利用差错编码检测数据是否出错,对于出错的数据,接收端请求发送端重发数据加以纠正,直到接收端接收到正确数据为止。
  • 前向纠错:接收端进行差错纠正的种差错控制方法。前向纠错机制需要利用纠错编码,即这类编码不仅可以检测数据传输过程中是否发生了错误,而且还可以定位错误位置并直接加以纠正。在前向纠错机制中,发送端首先对数据进行纠错编码,然后发送包含纠错编码信息的帧,接收端收到帧后利用纠错编码进行差错检测对于发生错误的帧直接进行纠错。前向纠错机制比较适用于单工链路或者对实时性要求较高的场合
  • 反馈校验:接收端将收到的数据原封不动的发回发送端,发送端通过对比接收端反馈的数据与发送的数据可以确认接收端是否正确无误的接收了已发送的数据。如果发送端发现有不同,则认为接收端没有正确接收到发送的数据,则立即重发数据,直到收到接收端反馈的 数据与已发数据一致为止。反馈校验方式的优点是原理简单,易于实现, 无须差错编码:缺点是需要相同传输能力的反向信道,传输效率低,实时性差。
  • 检错丢弃:不纠正出错的数据,而是直接丢弃错误数据,这种差错控制方式就是检错丢弃。显然,这种差错控制方式通常适用于容许一定比例的差错存在,只适用于实时性要求较高的系统。

奇偶校验

奇偶校验码(PPC)是奇校验码和偶校验码的统称,是一种有效检测单个错误的检错方法。是根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验的。采用“1”的奇数个校验的方法称为奇校验,反之称为偶校验,但采用何种校验是事先确定好的。

它的基本校验思想是在原信息代码的最后添加一位用于奇校验或偶校验的代码,这样最终的帧代码是由n-1位信元码和1位校验码组成,可以表示成为(n,n-1)。加上校验码的最终目的就是要让传输的帧中“1”的个数固定为奇数(采用奇校验时)或偶数(采用偶校验时),然后通过接收端对接收到的帧中“1”的个数的实际计算结果与所选定的校验方式进行比较,就可以得出对应帧数据在传输过程中是否岀错了。如果是奇校验码,在附加上一个校验码以后,码长为n的码中“1”的个数为奇数;如果是偶校验码,则在附加上一个校验码以后,码长为n的码中“1”的个数为偶数(0个“1”也看成是偶数个“1”)。

缺点:奇偶校验方法只可以用来检査单个码元错误,检错能力较差,所以一般只用于本身误码率较低的环境,如用于以太局域网中、用于磁盘的数据存储中等

汉明码

汉明码(Hamming code)是一种用于错误检测和纠正的编码技术,由理查德·汉明(Richard Hamming)于1950年提出。它通过在数据中插入冗余位(校验位)来检测并纠正传输过程中可能引入的单位错误。汉明码的设计允许纠正单个位的错误,并且对于错误位置的纠正具有较好的性能。

汉明码的编码方式是通过插入冗余位(校验位)来实现错误检测和纠正。汉明码采用一种特殊的方式来计算和插入这些冗余位,以便在接收端能够检测和纠正可能发生的错误。

下面是汉明码的编码步骤:

编码参考:(1条消息) 【通俗易懂的通信】信道编码之——汉明码_汉明码编码_Norstc的博客-CSDN博客

  1. 假设要传输的数据是 n 位(其中 n 为数据位的数量),并且汉明码将有 m 个冗余位(其中 m 为冗余位的数量)。冗余位的数量 m 需要满足以下条件:

    \[2^m ≥ n + m + 1 \]

    这意味着要有足够的冗余位来检测和纠正可能的错误。

  2. 确定冗余位的位置:汉明码的编码方式是将冗余位插入到数据中的特定位置。冗余位的位置是汉明码的一个重要特性,它们应该在二进制表示中对应于2的幂次位置,即第1位,第2位,第4位,第8位,等等,从左到右编号为1,2,3,4,等等。

  3. 确定分组:冗余位所在的位置决定了他负责管理哪几组数据的奇偶校验,第一位冗余位负责管理二进制索引第1位的数据的奇偶校验,第二位冗余位负责管理二进制索引第2位的数据的奇偶校验,以此类推。

  4. 填写冗余码:如果采用偶校验,如果第一组内的值为1的数据为偶数个,则第一位冗余码为0,否则为1。如果第二组内的值为1的数据为偶数个,则第二位冗余码为0,否则为1。以此类推。

    如果采用奇校验,如果第一组内的值为1的数据为奇数个,则第一位冗余码为0,否则为1。如果第二组内的值为1的数据为奇数个,则第二位冗余码为0,否则为1。以此类推。

例如:假设我们需要传输的7位数据位:1011001,使用奇校验。

根据公式冗余位数量为4。总长度为冗余位数+数据位数量=4+7=11位,其二进制索引如下:

Snipaste_2023-07-30_20-31-27

分组可得

冗余位 数据组
1 1,3,5,7,9,11
2 2,3,6,7,10,11
3 4,5,6,10,11,
4 8,9,10,11

由于采用奇校验,所以各个数据组(加上冗余位)中值为1的个数要为奇数个。即:

第一组中的3,5,7,9,11 ,如果该组中值为1的个数为奇数,则第一位冗余位值为0,否则为1 。

第二组3,6,7,10,11 ,如果该组中值为1的个数为奇数,则第二位冗余位值为0,否则为1 。

第三组5,6,10,11 ,如果该组中值为1的个数为奇数,则第三位冗余位值为0,否则为1 。

第四组9,10,11 ,如果该组中值为1的个数为奇数,则第四位冗余位值为0,否则为1 。

最后结果为:10111000101

循环冗余校验(CRC)

循环冗余校验(CRC)是一种根据传输或保存的数据而产生固定位数校验码的方法,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收端进行检验确定数据是否发生变化。

步骤如下:

  1. 收发双方约定好一个生成多项式G(x)。
  2. 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
  3. 接收方通过生成多项式来计算收到的数据是否产生了误码;

CRC计算方法:

例如数据串为1101011011,生成多项式如下:

\[G(x)=x^6+x^4+x^2+x+1 \]

步骤一:将多项式还原

\[G(x)=1\times x^6+0\times x^5 +1\times x^4 + 0\times x^3 + 1\times x^2 + 1\times x^1 +1\times x^0 \]

步骤二:取得除数 ,除数为多项式还原后的系数

\[CRC除数=1010111 \]

步骤三:在原数据串末端加上0,0的数量由生成多项式的最高次幂决定,在本例中是6,所以原数据串为1101 0110 1100 0000

步骤四:计算CRC校验和,将数据串与除数对齐,按位进行异或操作。

\[异或结果为=111011 \]

可靠传输

使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。

数据链路层向上提供的服务类型:

  • 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
  • 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。

一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。

比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。

分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。

可靠传输实现机制

可靠数据传输基本原理:防止数据报在传输过程中出现乱序,数据丢失等问题。采取如下措施:

  1. 差错检测:利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)。差错编码就是在数据上附加冗余信息(通常在数据后),这些冗余信息建立了数据(位)之间的某种逻辑关联。数据发送方对需要检测差错的数据,如协议数据单元,进行差错编码,然后将编码后的数据(包括差错编码附加的冗余信息)发送给接收方;接收方依据相同的差错编码规则(或算法),检验数据传输过程中是否发生比特差错。
  2. 确认:接收方向发送方反馈接收状态。基于差错编码的差错检测结果,如果接收方接收到的数据未发生差错,并且是接收方期望接收的数据,则接收方向发送方发送ACK数据包,称为肯定确认(Positive Acknowledgment),表示已正确接收数据:否则发送NAK数据包,称为否定确认(Negative Acknowledgmen),表示没有正确接收数据。
  3. 重传:发送方重新接收方没有正确接收的数据。发送方如果收到接收方返回的ACK数据包,则可以确认接收方已正确接收数据,可以继续发送新的数据;如果收到NAK,表明接收方没有正确接收数据,则将出错的数据重新向接收方发送,纠正出错的数据传输。
  4. 序号:确保数据按序提交。由于底层信道不可靠,可能出现数据乱序到达,因此对数据包进行编号,这样,即便数据包不是按序到达的,接收方也可以根据数据包的序号纠正数据顺序,实现向上层按序提交数据。另外,在数据包中引入序号,还可以避免由于重传可能引起的重复数据被提交的问题。
  5. 计时器:解决数据丢失问题。虽然上述措施在应对数据差错时已经足够有效,但是却无法解决数据丢失问题。因为,当发生数据丢失时,接收方不会收到相应的数据包,自然也就不会对丢失的数据包进行确认,发送方也就不会重发丢失的数据包来纠正这一错误。引入计时器就可以解决这一问题,发送方在发送了数据包后就启动计时器,在计时器发生超时时还没有收到接收方的确认,就主动重发数据包,从而可以纠正数据丢失问题。当然,如果计时器的超时时间设置太短,则可能导致原本没有丢失的数据包也被重发了,从而可能导致接收方收到两份(甚至多份)相同的数据包副本。这种状况虽然不是理想状态(因为浪费了网络传输能力),但是接收方可以根据重复数据包的序号判断出是重复数据包,这样就可以将重复的数据包丢弃,只向其上层提交一份数据,因此可靠数据传输的目标并未被破坏。

停止-等待协议sw

停止-等待协议的工作流程如下:

  1. 发送方准备要发送的数据,并给每个数据包分配一个唯一的序列号。
  2. 发送方发送第一个数据包,并启动一个定时器来跟踪该数据包。
  3. 接收方收到数据包后,检查数据包的序列号是否按预期顺序到达。如果数据包按预期顺序到达,接收方将确认(ACK)该数据包,并将确认消息发送回发送方。
  4. 发送方收到确认消息后,停止定时器,并发送下一个数据包。
  5. 如果接收方检测到一个不按预期顺序到达的数据包,它将丢弃该数据包,并发送一个否定确认(NAK)消息给发送方。发送方接收到NAK消息后,会重新发送该数据包。
  6. 如果发送方在定时器超时之前未收到确认消息,它会假设数据包已经丢失,会重新发送该数据包。
  7. 重复步骤3至6,直到发送方将所有数据包都成功发送并接收方确认。

停止-等待协议的主要特点是发送方在发送每个数据包后都需要等待接收方的确认才能发送下一个数据包,这种方式确保了数据的可靠传输,但同时也引入了较大的延迟,特别是在网络延迟较高的情况下。因此,这种协议在高延迟的网络环境中效率较低。

sw协议遇到的问题:

  • 接收方检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率高的点对点的链路,为使发送方尽早重传,也可给发送方发送NAK分组。

  • 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于SW的停等特性,只需1个比特编号(0或1)即可。

  • 超时计时器设置的重传时间应仔细选择,一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。

    • 在数据链路层点对点的往返时间比较确定,重传时间比较好设定

    • 而在传输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易

SW的信道利用率

\[信道利用率U=\frac{ T_D}{T_D+RTT+T_A}\\ T_D:发送方发送分组数据的发送延时\\ RTT:收发双方之间的往返延时\\ T_A:接受方发送确认分组所耗费的发送延时(该时间远小于T_D,通常忽略不计) \]

回退N帧协议GBN

GBN协议允许发送方连续发送多个数据包,而无需等待接收方的确认,从而提高了传输效率。

GBN协议的主要特点是发送方维护一个发送窗口(Send Window)和一个确认窗口(Acknowledgement Window),并采用滑动窗口的方式进行数据传输

GBN采用三比特给分组编序号,即序号0~7.

\[发送窗口的尺寸W_T取值范围为 1<W_T<=2^3-1\\ 接受窗口的尺寸W_R=1 \]

工作流程如下:

  1. 发送方将要发送的数据分割为多个数据包,并为每个数据包分配一个唯一的序列号。发送方将发送窗口中的数据包依次发送出去。
  2. 发送方启动一个定时器,用于检测超时情况。定时器时间设置为发送窗口中最早发送的数据包的往返时间(Round-Trip Time,RTT)。
  3. 接收方收到数据包后,检查数据包的序列号是否按预期顺序到达。如果数据包按预期顺序到达,接收方将确认该数据包,并发送一个确认消息(ACK)给发送方。确认消息中包含了接收方期望接收的下一个数据包的序列号。
  4. 发送方接收到确认消息后,将发送窗口向前滑动,将已确认的数据包从发送窗口中移除,并发送新的数据包。
  5. 如果发送方在定时器超时之前收到了所有数据包的确认消息,那么传输完成。
  6. 如果发送方在定时器超时后仍未收到确认消息,它会假设有数据包丢失,将发送窗口中的所有数据包重新发送。
  7. 接收方接收到重复的数据包时,会丢弃重复的数据包,并发送一个确认消息,告知发送方它已经接收到了这个数据包。
  8. 重复步骤3至7,直到所有数据包都成功发送且接收方确认。

GBN协议的优点是可以实现高效的传输,因为发送方无需等待每个数据包的确认,可以连续发送多个数据包。然而,GBN也存在一些问题,如发送方需要维护发送窗口的状态和重传机制,且对于每个数据包都需要设置定时器,这增加了复杂性和开销。此外,GBN协议对网络延迟和传输错误敏感,如果网络延迟较高或存在数据包丢失,可能会导致性能下降。

选择重传协议SR

与回退N帧协议(GBN)不同,SR协议允许发送方连续发送多个数据包,发送方仅重传丢失或损坏的数据包。

SR协议的工作流程如下:

  1. 发送方将要发送的数据分割为多个数据包,并为每个数据包分配一个唯一的序列号。发送方将发送窗口中的数据包依次发送出去。
  2. 发送方启动一个定时器,用于检测超时情况。定时器时间设置为发送窗口中最早发送的数据包的往返时间(Round-Trip Time,RTT)。
  3. 接收方收到数据包后,检查数据包的序列号。如果数据包按预期顺序到达,接收方将确认该数据包,并发送一个确认消息(ACK)给发送方。
  4. 如果接收方检测到一个丢失或损坏的数据包,它将发送一个否定确认消息(NAK)给发送方,指示发送方重传丢失或损坏的数据包。
  5. 发送方接收到ACK消息后,将已确认的数据包从发送窗口中移除,并发送新的数据包。
  6. 如果发送方在定时器超时之前收到了所有数据包的确认消息,那么传输完成。
  7. 如果发送方在定时器超时后仍未收到确认消息,它会假设有数据包丢失,将发送窗口中的所有数据包重新发送。
  8. 接收方接收到重复的数据包时,会丢弃重复的数据包,并发送一个确认消息,告知发送方它已经接收到了这个数据包。
  9. 重复步骤3至8,直到所有数据包都成功发送且接收方确认。

\[SR协议发送窗口大小W_T必须满足 1\leq W_T\leq 2^{n-1}\\ 接收窗口大小W_R必须满足 1\leq W_R\leq W_T\\ 若W_T=1\space 与停止-等待协议相同\\ 若W_T>2^{n-1}\space 造成接收方无法分辨新,旧数据分组问题\\ 若W_R=1\space 与回退N帧协议相同\\ 若W_R>W_T\space 无意义 \]

  • 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
  • 发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;若收到未按序到达的确认分组时。对其进行记录。以防止其相应数据分组的超时重发。但发送窗口不能向前滑动。
  • 接收方可接收未按序到达但没有误码并且序号落在接收窗口内的数据分组;
    • 为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认。而需要对每个正确接收到的数据分组进行逐—确认!
      接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。

PPP协议

PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:

  1. 对各种协议数据报的封装方法(封装成帧)
  2. 链路控制协议LCP ,用于建立、配置以及测试数据链路的连接
  3. 一套网络控制协议NCPs, 其中的每一个协议支持不同的网络层协议

PPP协议都可用于面向字节的异步链路,面向比特的同步链路。

帧格式

+------------------------------------------------------+------------------------+----------------------------+
|				帧的首部								|		帧的数据部分		 |		帧的尾部				|
+--------------+---------------+---------------+--------------+----------------------------------------------+
|  标志(1字节)  | 地址(1字节)  | 控制(1字节)  | 协议(2字节)  |   数据(不超过1500字节)	| 帧校验序列(2字节)|标志(1字节)|
+--------------+---------------+---------------+--------------+-----------------------------------------------+

  1. 标志(Flag)字段:固定为0x7E,表示帧的开始和结束。
  2. 地址(Address)字段:预留字段,通常设置为0xFF,表示广播地址。在PPP中,该字段很少用于实际寻址,大多数情况下都是广播。
  3. 控制(Control)字段:预留字段,通常设置为0x03,表示无确认的无序传输。该字段用于控制PPP链路上的帧流控制和错误检测。
  4. 协议(Protocol)字段:指定上层协议类型,表示封装在PPP帧中的数据的协议类型。常见的协议类型包括IP(0x0021)、IPX(0x002B)等。
    1. 0x0021:表示帧的数据部分为ip数据报
    2. 0xc021:表示帧的数据部分为LCP分组
    3. 0x8021:表示帧的数据部分为NCP分组
  5. 数据(Data)字段:实际上层协议的数据部分。
  6. 帧校验序列(FCS)字段:CRC计算出的校验码

透明传输实现

在面向字节的异步链路采用字节填充法,即插入转义字符

  • 发送方的处理:

    • 出现的每一个7E (PPP帧的定界符)字节转变成2字节序列(7D,5E)。

    • 出现的每一个7D (转义字符)字节转变成2字节序列(7D,5D)。

    • 出现的每一个ASCII码控制字符(数值小于Ox20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上ox20。

  • 接收方的处理:

    • 进行反变换即可恢复出原来的帧的数据部分。

在面向比特的同步链路中采用比特填充法,即插入比特0

  • 发送方的处理:
    • 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0。
  • 接收方的处理:
    • 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除。

差错检测

接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务。

工作状态

image-20230710195032912

媒体接入控制MAC

MAC用于协调在共享信道多个发送和接收站点对一个共享传输媒体的占用。

媒体接入控制技术主要分为两类:一类是静态划分信道;另一类是动态接入控制

静态划分信道

  1. 频分多址
  2. 时分多址
  3. 码分多址

静态划分通道都是预先分配好通道,这类方法非常的不灵活,对于突发性数据传输信道利用率会很低。通常在无线网络的物理层中使用,而不是在数据链路层中使用。

动态接入控制

  1. 受控接入
    1. 集中控制:有一个主站以循环方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据。最大缺点是存在单点故障问题。该方法已淘汰
    2. 分散控制:各站点是平等的,并连接成一个环形网络。令牌(一个特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据。并在发送完数据后将令牌传递给下一个站点。该方法已淘汰
  2. 随机接入:所有站点通过竞争,随机地在信道上发送数据。如果恰巧有两个或更多的站点在同一时刻发送数据,则信号在共享媒体上就要产生碰撞(即发生了冲突)。使得这些站点的发送都失败。因此,这类协议要解决的关键问题是如何尽量避免冲突及在发生冲突后如何尽快恢复通信。著名的共享式以太网采用的就是随机接入。

随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。

静态划分信道-信道复用

复用(Multiplexing) 是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。

频分复用FDM

将传输线路的频带资源划分成多个子频带,形成多个子信道。各子信道之间需要留出隔离频带,以免造成子信道间的干扰。当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上。接收端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。

Snipaste_2023-07-10_21-06-34

时分复用TDM

横坐标为时间,将时间划分成一个个的时隙。时分复用技术将传输线路的带宽资源按时隙轮流分配给不同的用户,每个用户只在所分配的时隙里使用线路传输数据。时分复用技术将时间划分成了一段段等长的时分复用帧,每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度。
Snipaste_2023-07-10_21-08-41

波分复用WDM
  波分复用其实就是光的频分复用。如图所示,这是8路传输速率均为2.5Gbit/s的光载波,其波长均为1310nm。经光调制后,分别将波长变换到1550-1561.2nm,每个光载波相隔1.6nm。这8个波长很接近的光载波,经过光复用器或称合波器,就在一根光纤中传输。因此,在一根光纤上数据传输的总速率就达到了8 × \times× 2.5 Gbit/s = 20 Gbit/s。光信号传输一段距离后会衰减,因此对衰减了的光信号必须进行放大才能继续传输。现在已经有了很好的掺耳光纤放大器,两个光纤放大器之间的光缆线路长度可达120km,而光复用器和光分用器或称分波器之间可以放入四个掺耳光纤放大器,使得光复用器和光分用器之间的无光电转换的距离可达600km。
Snipaste_2023-07-10_21-09-42

码分复用CDM

码分复用 CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)。同理,频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词是频分多址FDMA(Frequency Division Multiple Access)和时分多址TDMA(Time Division Multiple Access)。

复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立、互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分。
多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)。

某种程度上,FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用。

  • 与FDM和TDM不同, CDM的每一个用户可以在同样的时间使用同样的频带进行通信。
  • 由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
  • CDM最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。
  • 随着技术的进步,CDMA设备的价格和体积都大幅度下降,因而现在已广泛用于民用的移动通信中。
  • 在CDMA中, 每一个比特时间再划分为m个短的间隔,称为码片(Chip) 。通常m的值是64或128。为了简单起见,在后续的举例中,假设m为8。

使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence)。

  • 一个站如果要发送比特1,则发送它自己的m bit码片序列;
  • 一个站如果要发送比特0,则发送它自己的m bit码片序列的二进制反码;

例如:

指派给CDMA系统中某个站点的码片序列为00011011

发送比特1:发送自己的码片序列00011011
发送比特0:发送自己的码片序列的二进制反码11100100

为了方便,我们按惯例将码片序列中的O写为-1,将1写为+1。则该站点的码片序列是(-1 -1 -1+1+1 -1 +1+1)。

这种通信方式称为直接序列扩频 DSSS。
码片序列的挑选原则如下:

  1. 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
  2. 分配给每个站的码片序列必须相互正交(规格化内积为0)。

令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。两个不同站S和T的码片序列正交,就是向量S和T的规格化内积为0:

\[S\cdot T =\frac{1}{m}\sum\limits_{i=1}^m{S_iT_i}=0\\ S\cdot {取反T}=0\\ S\cdot S=\frac{1}{m}\sum\limits_{i=1}^m{S_iS_i}=\frac{1}{m}\sum\limits_{i=1}^m{\pm1}^2=1\\ S\cdot{取反S}=-1 \]

例: 共有4个站进行CDMA通信,这4个站的码片序列分别为:
     A:(-1 -1 -1 +1 +1 -1 +1 +1)
     B:(-1 -1 +1 -1 +1 +1 +1 -1)
     C:(-1 +1 -1 +1 +1 +1 -1 -1)
     D:(-1 +1 -1 -1 -1 -1 +1 -1)
     现收到码片序列(-1 +1 -3 +1 -1 -3 +1 +1)。问是哪些站发送了数据?发送的是比特1还是0?
     分析: 用收到的码片序列分别与各站的码片序列进行求内积运算。 若计算结果为数值1,则被判断的站发送了比特1;若计算结果为数值-1,则被判断的站发送了比特0;若计算结果为数值0,则被判断的站未发送数据。

Snipaste_2023-07-10_21-55-59

动态接入控制-随机接入-CSMA/CD协议

早期的共享式以太网采用载波监听多址接入/碰撞检测(CSMA/CD)协议来协调总线上各主机的工作,尽量避免产生碰撞。

  • 多址接入MA

​ 多个站连接在一条总线上,竞争使用总线。

  • 载波监听CS

    • 每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧(先听后说) 。

    • 若检测到总线空闲96比特时间,则发送这个帧。

    • 若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后发送这个帧。

  • 碰撞检测CD

​ 每一个正在发送帧的站边发送边检测碰撞(边说边听)。
一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送(一旦冲突,立即停说,等待时机,重新再说)。

CSMA/CD协议的工作原理

  1. 多点接入MA:多个主机连接在一条总线上,竞争使用总线;
  2. 载波监听CS:发送帧前先检测总线,若总线空闲96比特时间,则立即发送;若总线忙,则持续检测总线直到总线空闲96比特时间后再重新发送;
  3. 碰撞检测到CD:边发送边检测碰撞,若检测到磁撞,则立即停止发送,退避一段随机时间后再重新发送。
  4. 上述过程可比喻为:先听后说,边听边说;一旦冲突,立即停说;等待时机,重新再说。

使用CSMA/CD协议的以太网的争用期 (碰撞窗口)

  1. 发送帧的主机最多经过以太网端到端往返传播时延2τ ττ这么长时间,就可检测到本次传输是否发生了碰撞,2τ ττ称为争用期;
  2. 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞;
  3. 以太网规定2τ ττ的取值为512比特时间(即发送512比特所耗费的时间) ,对于10Mbps的以太网,2τ ττ为51.2μs;

使用CSMA/CD协议的以太网的最小帧长和最大帧长

  1. 最小帧长 = 争用期 x 信道带宽(数据发送速率),对于10Mbps的传统以太网,其争用期为51.2μs,因此最小帧长为512b,即64字节;
  2. 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遇了碰撞。如果检测到碰撞,则停止发送帧的剩余部分,退避一段随机事件后,重新发送该帧;
  3. 为了防止主机长时间占用总线,以太网的帧也不能太长;以太网V2的MAC帧最大长度为1518字节(1500字节数据载荷,18字节首尾字段);插入VLAN标记的802.1Q帧最大长度为1522字节(1500字节数据裁荷,22字节首尾字段) ;

CSMA/CD协议使用的截断二进制指数退避算法

  1. 随机退避时间 = 争用期2τ ττ x 随机数r,其中r从离散的整数集合{0, 1, …, (2^k -1)中随机取出一个,k= Min[重传次数,10];
  2. 当重传达16次仍不能成功时,这表明同时打算发送数据的主机太多以至于连续发生碰撞,则丢弃该帧井向高层报告。

以太网的信道利用率

\[S_{max}\uparrow=\frac{1}{1+a\downarrow} \space\space\space 参数a的值尽量小,以提高信道利用率\\ a\downarrow=\frac{\tau\downarrow}{T_0\uparrow} \space\space\space \tau以太网端到端的距离受到限制\space T_0以太网帧的长度应尽量长些 \]

CSMAVCD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中。现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议。

MAC地址

MAC地址是以太网的MAC子层所使用的地址。也称为物理地址(Physical Address),它是一个用来确认网络设备位置的位址,类似于门牌号。

当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;在每个主机发送的帧中也必须携带标识发送主机和接收主机的地址。 由于这类地址是用于媒体接入控制MAC(Media Access Contro),因此这类地址被称为MAC地址;

  1. MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
  2. MAC地址有时也被称为物理地址。请注意:这并不意味着MAC地址属于网络体系结构中的物理层!

一般情况下, 用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。

MAC地址,一共48 bit,即6个字节。

常用的表示方法:

  • xx:xx:xx:xx:xx:xx 例如 10:7B:44:80:F4:6A
  • xx-xx-xx-xx-xx-xx 例如 10-7B-44-80-F4-6A
  • xxxx.xxxx.xxxx 例如 107B.4480.F46A

Snipaste_2023-07-11_14-14-45

第一字节b1位 第一字节b0位 MAC地址类型 地址数量占比 总地址数量
0 0 全球管理,单播地址,厂商生产网络设备(网卡,交换机,路由器)时固化 1/4 2的48次幂
0 1 全球管理。多播地址,标准网络设备所支持的多播地址,用于特定功能 1/4 2的48次幂
1 0 本地管理,单播地址,由网络管理员分配,覆盖网络接口的全球管理单播地址 1/4 2的48次幂
1 1 本地管理,多播地址,用户对主机进行软件配置, 1/4 2的48次幂

如果剩余的46位全为1,就是广播地址FF-FF-FF-FF-FF-FF

IP地址

IP地址是因特网 (Internet) 上的主机和路由器所使用的地址,用于标识两部分信息:

  1. 网络编号:标识因特网上数以百万计的网络
  2. 主机编号:标识同一网络上不同主机(或路由器各接口)

很显然, 之前介绍的MAC地址不具备区分不同网络的功能。如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)。如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。

从网络体系结构的角度看看IP地址与MAC地址的封装位置。如下图所示,以五层原理体系结构为例。

Snipaste_2023-07-11_14-34-33

应用层封装好的应用层报文将其向下交付给运输层,运输层看不懂也无需看懂应用层报文的结构与内容,用黑色表示,仅仅给其添加一个运输层首部。运输层将封装好的协议数据单元向下交付给网络层,网络层看不懂也无需看懂运输层协议数据单元的结构与内容,仅仅给其添加一个网络层首部。网络层将封装好的协议数据单元向下交付给数据链路层,数据链路层看不懂也无需看懂网络层协议数据单元的结构与内容,仅仅给其添加一个数据链路层首部和一个数据链路层尾部。数据链路层将封装好的协议数据单元向下交付给物理层,物理层看不懂也无需看懂数据链路层协议数据单元的结构与内容,仅仅将它们看作是比特流,以便将它们转换为相应的电信号发送到传输媒体。
  由于IP地址属于网络体系结构中网络层的范畴,因此在网络层首部中应该封装有源IP地址和目的IP地址。相应的,由于MAC地址属于网络体系结构中数据链路层的范畴,因此在数据链路层首部中应该封装有源MAC地址和目的MAC地址。

Snipaste_2023-07-11_14-35-53

首先,数据包转发过程中源IP地址和目的IP地址保持不变,其次,数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。

ARP协议

MAC地址属于数据链路层范畴,IP地址属于网络层范畴。网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口。因此我们需要进行IP地址与物理地址之间的转化。对于IPv4来说,我们使用ARP地址解析协议来完成IP地址与物理地址的转化(IPv6使用邻居发现协议进行IP地址与物理地址的转化,它包含在ICMPv6中)。

  • ARP协议提供了网络层地址(IP地址)到物理地址(mac地址)之间的动态映射,ARP协议是地址解析的通用协议。
  • ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。

ARP协议工作原理

  1. 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
  2. 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
  3. 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
  4. 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
  5. 当本网络的所有主机收到该 ARP 数据包时:
    1. ​ 首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
    2. 如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
    3. 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
  6. 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

集线器与交换机

早期的总线型以太网最初使用粗同轴电缆作为传输媒体,后来演进到使用价格相对便宜的细同轴电缆。当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠,而无源的电缆线才是最可靠的。然而这种使用无源电缆和大量机械接头的总线型以太网,并不像人们想象的那么可靠。后来以太网发展出来了一种使用大规模集成电路可靠性非常高的设备,叫做集线器,并且使用更便宜更灵活的双绞线作为传输媒体。

  • 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
  • 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
  • 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。

以太网交换机(Ethernet Switch)是一种用于局域网(LAN)中的网络设备,它用于在局域网中传输数据包。交换机通过检查数据包中的目标MAC地址,将数据包从一个接口转发到另一个接口,从而实现了高效的数据传输和分发。

  • 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。
  • 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。
  • 以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
  • 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
  • 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
  • 帧的两种转发方式:
    1. 存储转发
    2. 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否有差错)

以太网交换机与集线器的区别:使用集线器互连而成的共享总线式以太网上的某个主机要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机。使用交换机互连而成的交换式以太网上的某个主机要给另一个主机发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机而不是网络中的其他各个主机。很显然,交换机具有明显的优势。

集线器属于早期以太网的互联设备,工作在OSI体系结构的物理层,对接收到的信号进行放大、转发,使用集线器作为互连设备的以太网仍然属于共享总线式以太网。集线器互连起来的所有主机共享总线带宽,属于同一个碰撞域和广播域。

交换机是目前以太网中使用最广泛的互连设备,工作在OSI体系结构的数据链路层(也包括物理层)根据MAC地址对帧进行转发,使用交换机作为互连设备的以太网,称为交换式以太网。交换机可以根据MAC地址过滤帧,即隔离碰撞域。交换机的每个接口是一个独立的碰撞域,交换机隔离碰撞域但不隔离广播域(VLAN除外)。

以太网交换机自学习和转发帧的流程

以太网交换机工作在数据链路层(也包括物理层)。以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。

Snipaste_2023-07-11_16-19-13

  1. 收到帧后进行登记。登记的内容为帧的源MAC地址及进入交换机的接口号;
  2. 根据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况:
    1. 明确转发:交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)。
    2. 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)。
    3. 明确丢弃:交换机知道不应该转发该帧,将其丢弃。
  3. 帧交换表中的每条记录都有自己的有效时间,到期删除。原因如下:
  4. 交换机的接口改接了另一台主机;
  5. 主机更换了网卡。

以太网交换机的生成树协议STP

添加冗余链路可以提高以太网的可靠性。但是,冗余链路也会带来负面效应——形成网络环路。网络环路会带来以下问题:

  1. 广播风暴:大量消耗网络资源,使得网络无法正常转发其他数据帧;
  2. 主机收到重复的广播帧:大量消耗主机资源
  3. 交换机的帧交换表震荡(漂移)

以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。

  1. 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
  2. 最终生成的树型逻辑拓扑要确保连通整个网络;
  3. 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。

虚拟局域网

虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。

以太网交换机工作在数据链路层(也包括物理层)。 使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域相应扩大。巨大的广播域会带来很多弊端:如 广播风暴(广播风暴会浪费网络资源和各主机的CPU资源!), 难以管理和维护, 潜在的安全问题。使用路由器可以隔离广播域,但路由器的成本较高,虚拟局域网VLAN技术应运而生。

VLAN数据帧格式

要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用于标识数据帧所属的VLAN。VLAN标签在VLAN数据帧中的位置如图所示。

Snipaste_2023-07-11_16-45-55

  • Destination address:目的地址
  • Source address:源地址
  • Length/Type:类型或者长度
  • Data:数据
  • VLAN Tag:VLAN标志
    • TPID:Tag Protocol Identifier(标签协议标识符),表示数据帧类型。取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致。
    • PRI:Priority,表示数据帧的802.1p优先级。取值范围为0~7,值越大优先级越高。当网络阻塞时,交换机优先发送优先级高的数据帧。
    • CFI:Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。
    • VID:CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094。
  • FCS: 帧校验序列。用于验证帧在传输过程中是否出现错误。

以太网帧主要有以下两种形式:

  • 有标记帧(Tagged帧):加入了4字节VLAN标签的帧。
  • 无标记帧(Untagged帧):原始的、未加入4字节VLAN标签的帧。

以太网链路包括接入链路(Access Link)和干道链路(Trunk Link)。接入链路用于连接交换机和用户终端(如用户主机、服务器、傻瓜交换机等),只可以承载1个VLAN的数据帧。干道链路用于交换机间互连或连接交换机与路由器,可以承载多个不同VLAN的数据帧。在接入链路上传输的帧都是Untagged帧,在干道链路上传输的数据帧都是Tagged帧。

交换机内部处理的数据帧一律都是Tagged帧。从用户终端接收无标记帧后,交换机会为无标记帧添加VLAN标签,重新计算帧校验序列(FCS),然后通过干道链路发送帧;向用户终端发送帧前,交换机会去除VLAN标签,并通过接入链路向终端发送无标记帧。

VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN。
802.1Q帧是由交换机来处理的,而不是用户主机来处理的。

  • 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称 “打标签”。
  • 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称 “去标签”。

网络层

网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。

数据包在传输过程中可能会出现误码,也有可能由于路由器繁忙而被路由器丢弃,还有可能出现按序发送的数据包不能按序到达接收方。如果网络层对于上述传输

错误不采取任何措施,则提供的是不可靠传输服务;如果网络层对于上述传输错误采取措施并使得接收方能正确接收发送方所发送的数据包,则提供的是可靠传输

服务。不同网络体系结构所提供的服务可能是不同的,例如因特网使用的TCP/IP协议体系的网际层提供的是无连接的不可靠的数据报服务,而ATM、帧中继和X.25

的网络层提供的都是面向连接的、可靠的虚电路服务。

由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层

与IP协议配套使用的还有三个协议:

  • 地址解析协议ARP (Address Resolution Protocol)
  • 网际控制报文协议ICMP (Internet Control Message Protocol)
  • 网际组管理协议IGMP(Internet Group Management Protocol)

网络层提供的服务

面向连接的虚电路服务
虚电路服务的核心思想是可靠通信由网络来保证。 当两台计算机进行通信时,必须建立网络层的连接——虚电路VC(Virtual Circuit),以保证通信双方所需的一切网络资源。然后通信双方沿着已建立的虚电路发送分组。目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)。这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复)。通信结束后,需要释放之前所建立的虚电路。很多广域分组交换网都使用面向连接的虚电路服务。例如,曾经的X.25和逐渐过时的帧中继FR、异步传输模式ATM等。

无连接的数据报服务
数据报服务的核心思想是可靠通信应当由用户主机来保证。当两台计算机进行通信时,不需要建立网络层连接。每个分组可走不同的路径。每个分组的首部必须携带目的主机的完整地址。这种通信方式所传送的分组可能误码、丢失、重复和失序。由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心。

对比方面 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当有用户主机来保证
连接的建立 必须建立网络层连接 不需要建立网络层连接
终点的地址 仅在建立阶段有用,每个分组采用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组可走不同的路由
当节点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终点 到达终点时不一定按照发送顺序
服务质量的保证 可以将通信资源提前分配给每一个虚电路,容易实现 很难实现

网络层拥塞控制

网络拥塞:指在计算机网络中,由于网络流量过大或网络资源有限,导致数据包在传输过程中出现延迟增加、丢包率上升或带宽利用率下降的现象。

拥塞控制:指端系统或网络节点,通过采取某些措施来避免拥塞发生,或者对已发生的拥塞做出反应,以便快速消除拥塞。

拥塞控制原则:根据网络的通过能力和网络拥挤程度,来调整数据发送速率和数据量。

发生拥塞的原因:

  • 缓冲区容量有限
  • 传输线路的带宽有限
  • 网络结点的处理能力有限
  • 网络中某些部分出现故障

流量控制:指发送数据的一方根据接收数据的一方的接收数据能力,包括接收缓存,处理速度等,调整数据发送速率和数据量,以避免接收方被数据淹没。

网络出现拥塞就意味着负载暂时大于网络资源的处理能力,因此对于拥塞的解决一般可从两个方面进行:

  1. 增加网络资源或者是减小网络负载。增加网络资源,就是在网络出现拥塞前为网络中的各个结点分配更多可用的资源,从而降低拥塞出现的可能性,即拥塞预防
  2. 减小网络负载,一般是指在网络中 已经出现负载大于资源的情况下(即拥塞),通过减小当前网络的负载来实现对拥塞的消除,这种策略一般被称作拥塞消除

网络拥塞解决措施

流量路由感知

流量路由感知是指网络设备(如路由器)在进行数据包转发时,不仅仅考虑传统的路由算法,还会考虑当前网络拥塞状态,根据流量状况进行智能化的路由选择。

网络振荡现象是指网络中由于路由选择策略的变化或者其他因素导致流量在不同路径上反复来回传输,从而导致网络性能不稳定的现象

解决这种振荡现象的成功方法主要有两种:

  1. 多路径路由, 即两个区域间流量的传输分散到两条不同的链路上,从而使得其中任一链路上的负载都不会太大:
  2. 将负载过大的链路上的流量,缓慢地转移至另条链路上,而不是次性将全部流量从一条链路转移到另-条链路上。

流量感知路由是一种拥塞预防措施, 可以在一定程度上缓解或预防拥塞的发生。

准入控制

准入控制是一种广泛应用于虚电路网络的拥塞预防技术。准入控制的基本思想是对新建虚电路审核,如果新建立的虚电路会导致网络变得拥塞,那么网络拒绝建立该新虚电路。对于一个处于拥塞边缘的虚电路网络来说,任何新虚电路的建立都会使得整个网络变得拥塞,因此,当判断网络处于即将发生拥塞的边缘时,拒绝新虚电路的建立将有效避免网络发生拥塞。

准入控制实现的关键,在于当建立条新虚电路会导致整个网络 发生拥塞时,应该如何反应。显然,需要某种方法来对网络中的流量、拥塞状况进行量化。常用的方法是基于平均流量和瞬时流量,来判断是否有能力接受新虚电路而不会发生拥塞。

流量调节

在网络发生拥塞时,可以通过调整发送方向网络发送数据的速率来消除拥塞。

常用方法:

  • 抑制分组:通知拥塞上游的最直接的方式是直接告知发送方。感知到拥塞的路由器选择一个被拥塞的数据报,给该数据报的源主机返回一个抑制分组,抑制分组的目的地址即从被拥塞数据报的源地址得到。同时,需要对选择的被拥塞数据报(该数据报可能继续向目的传送)的首部进行修改,即修改其首部中的一个标志位,从而使得该数据报在后续传输过程中,不会被后续的路由器再次选择来发送抑制分组。
  • 背压:让抑制分组在从拥塞结点到源结点的路径上的每跳,都发挥抑制作用。当抑制分组从拥寒结点传输到上游的第一跳时,接收到抑制分组的结点便会立即降低其向拥塞结点发送分组的速率,从而在极短的时间内使得拥塞结点的拥塞状况得到缓解。但是,由于上游的第一跳的上游结点并没有降低发送速率(因为还没有收到抑制分组),而其向链路输出数据的速率却降低了,因此需要在其输出端口分配更多的缓冲区,当抑制分组到达拥塞结点上游的第二跳时,又能使得第一跳的拥塞状况立即得到改善,以此类推。最终,直到抑制分组到达源结点(如某端系统),才使得造成网络拥塞的过快发送方的发送速率真正地降低下来。使抑制分组逐跳发挥作用的背压方式,可以使拥塞结点的拥塞状况很快得到缓解,但其 代价是抑制分组途径的每跳都需 要分配更大的缓冲区。

负载脱落

通过有选择地主动丢弃一些数据报。 来减轻网路负载,从而缓解或消除拥寒。

IPv4地址

IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。 IP地址由因特网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。我国用户可向亚太网络信息中心APNIC(Asia Pacitic Network information Center)申请IP地址,需要缴费。 2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕。我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。

IPv4地址由两部分组成,即网络地址主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机,二者是主从关系。

32比特的IPv4地址不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。

例如:

\[32位比特IPv4地址:00001010\space\space 11110000\space\space 00001111\space\space 10101010\\ 每8位一组:\underbrace{00001010}_{8个}\space\space\underbrace{11110000}_{8个}\space\space\underbrace{00001111}_{8个}\space\space\underbrace{10101010}_{8个}\space\space\\ 写成点分十进制:10.240.15.170 \]

IPv4数据报格式

Snipaste_2023-07-13_15-07-18

  • 版本:占4比特,表示IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)

  • 首部长度:占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。最小十进制取值为5,表示lP数据报首部只有20字节固定部分,最大十进制取值为15,表示lP数据报首部包含20字节固定部分和最大40字节可变部分。

  • 可选字段:长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理P数据报的开销。实际上可选字段很少被使用。

  • 填充字段:确保首部长度为4字节的整数倍。使用全0进行填充。

  • 区分服务:占8比特,用来获得更好的服务。该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组IETF把这个字段改名为区分服务。利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

  • 总长度:占16比特,表示IP数据报的总长度(首部+数据载荷)。最大取值为十进制的65535,以字节为单位。

  • 标识、标志、片偏移:这三个字段共同用于IP数据报分片。

    • 标识:占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
    • 标志:占3比特,各比特含义如下:
      • DF位:1表示不允许分片,0表示允许分片,
      • MF位:1表示"后面还有分片",0表示“"这是最后—个分片"。
      • 保留位:必须为0。
    • 片偏移:占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位。
  • 生存时间TTL:占8比特,最初以秒为单位,最大生存周期为255秒,路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。现在以“跳数"为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为O就转发,否则就丢弃。

  • 协议:占8比特,指明IPv4数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值如下

    • 协议名称 ICMP IGMP TCP UDP IPv6 OSPF
      协议字段值 1 2 6 17 41 89
  • 首部检验和:占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。

  • 源IP地址和目的IP地址:各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。

IP数据报分片

数据链路层所能承载的协议帧所能承载的最大数据量称为该链路的最大传输单元(MTU),网络层数据报作为数据链路层协议帧的有效载荷,其总长度受到数据链路层MTU大小限制,即IP数据报的总长度最大可达65535,而实际IP数据报的总长度很少超过1500字节。

当IP数据报转发至某个输出端口,如果IP数据报的总长度大于该端口的链路层的MTU时,需要对IP数据报进行分片或丢弃,当IP数据报的DF=0时,对数据报进行分片,当DF=1时,则丢弃。

由于这些IP分片都属于同一个IP数据报,所以所有的IP分片都具有相同的协议版本,标识,源IP地址,目的IP地址等等,

注意路由器只对IP数据报进行分片,不进行IP数据报分片的重组,IP数据报分片的重组由最终目的主机IP来完成。

分片机制

IP 数据报分片 :要根据首部的标识 , 标志 , 片偏移进行相应处理 ,同一个 IP 数据报的分片 , 使用相同的标识 ; IP 数据报大小超过 MTU 时 , 将数据报分片 , 分片完成的 IP 数据报分片 , 其标识都是相同的 。

标志 由 3 位组成 , 只有 2 位有意义 ;

  • 最高位 : 是保留位 , 没有意义 。
  • 中间位 : DF 位 , DF = 1 时 , 禁止分片 ; DF = 0 时 , 允许分片 。
  • 最低位 : MF 位 , MF = 1 时 , 后面还有分片 ; MF = 0 时 , 本分片就是该分组的最后一个分片 , 后面没有分片 ,只有 DF = 0 时 , MF 才有意义 。

片偏移: 较长的分组的分片 , 中间的某个分片 , 在原来的 IP 分组中的相对位置 ; 单位是 8 字节 ,也就是说除了最后一个分片 , 每个分片的长度是 8 字节的整数倍

计算方法

假设原IP数据报的总长度为L字节,待转发的链路的MTU为M字节,如果L>M,且DF=0,则将该数据报进行分片。分片时每个IP数据报分片的标识等于原IP数据报的标识字段,MF标志位除了最后一个分片的值为0之外,其余的都为1,通常分片时会将原IP数据报分成尽可能少的分片,即除了最后一个分片外,其余分片的长度为MTU的最大值。

  • MF=1 :表示后面还有分片数据报
  • MF=0 :表示后面没有分片数据报
  • DF=0 :表示能分片
  • DF=1 :表示禁止分片

\[MTU=IP数据报首部(固定20字节大小)+数据部分 \]

最大分片可封装的数据长度 d 为(单位:字节)

\[d=\lfloor\frac{M-20}{8}\rfloor\times 8\\ \lfloor\rfloor表示向下取整 \]

  1. (M - 20):首先,将MTU(m)减去IP头的长度(通常为20个字节),得到一个值,这个值表示在一个IP分片中除去IP头部分的最大有效数据部分大小。
  2. (M - 20) / 8:将上一步得到的值除以8,这是因为在IP分片中,每个分片的大小必须是8字节的倍数。这样得到的结果表示在一个IP分片中除去IP头部分后,每个分片的最大有效数据部分大小,以8字节为单位。
  3. \lfloor\frac{M-20}{8}\rfloor:应用向下取整函数,将上一步得到的结果向下取整。这是为了确保每个分片的大小不超过每个分片的最大有效数据部分大小,以满足分片的要求。
  4. 最后,将上一步得到的向下取整结果乘以8,得到最大分片可封装的数据长度(d)。这是因为每个分片的大小必须是8字节的倍数,所以需要再次乘以8来保证每个分片的大小符合要求。

IP分片总数(n)计算公式:

\[n=\lceil \frac{L-20}{d}\rceil\\ \lceil\rceil表示向上取整 \]

  1. (L - 20):首先,将IP数据报的总长度(L)减去IP头的长度(通常为20个字节),得到一个值,这个值表示在一个IP数据报中除去IP头部分的有效数据部分大小。
  2. (L - 20) / d:将上一步得到的值除以最大分片可封装的数据长度(d)。这个结果表示在一个IP数据报中,有多少个最大分片可封装的数据长度(d)的部分。
  3. \lceil\frac{L-20}{d}\rceil:应用向上取整函数 ,将上一步得到的结果向上取整。这是为了确保分片的数量能够覆盖整个数据报的有效数据部分,而不会有任何数据被丢弃。

每个IP分片的片偏移字段取值计算公式

\[F_i=\frac{d}{8}\times(i-1)\\ 1\leq i\leq n\\ F_i为第i个ip分片的偏移量 \]

每个IP分片的总长度字段计算公式:

\[L_i=\begin{cases} d+20& 1\leq i < n\\ L-d\times(n-1)&i=n \end{cases} \]

每个IP分片的MF字段值计算公式:

\[MF_i=\begin{cases} 1,&1\leq i<n\\ 0,& i=n \end{cases} \]

例如:

假设我们有一个IP数据报的总长度(L)为 2000 bytes,链路的最大传输单元(MTU)为 1500 bytes,IP头的长度(H)为 20 bytes。

首先,计算最大分片可封装的数据长度(d): d = (MTU - H)/8*8 = (1500 - 20 )/8*8= 1480 bytes

然后,计算IP分片的数量(n): n = ceil(L / d) = ceil(2000 / 1480) = ceil(1.35) ≈ 2

向上取整得到 2,这意味着在给定的网络环境中,需要将原始的 2000 bytes 的IP数据报分成 2 个IP分片,以便在网络中传输。

接下来,计算每个IP分片的偏移量(O): 对于第一个分片,偏移量取值为 0 bytes,因为它是原始IP数据报的起始位置。 对于第二个分片,偏移量取值为 d = 1480 bytes,因为它在原始IP数据报中的位置紧随第一个分片。

所以,最终结果如下: IP分片数量(n):2 每个IP分片的最大可封装数据长度(d):1480 bytes 每个IP分片的偏移量(O):第一个分片为 0 bytes,第二个分片为 1480 bytes。

分类编址的IPv4地址

分类编址的IPv4地址分为A、B、C、D、E五类,如下图所示

Snipaste_2023-07-11_21-35-09

A类地址网络号部分最高位固定为0

B类地址网络号部分最高2位固定为10

C类地址网络号部分最高3位固定为110

D类地址网络号部分最高4位固定为1110

E类地址网络号部分最高4位固定为1111

注意事项:

  1. 只有A类、B类和C类地址可分配给网络中的主机或路由器的各接口。

  2. 主机号为“全0”的地址是网络地址,不能分配给主机或路由器的各接口。

  3. 主机号为“全1"”的地址是广播地址,不能分配给主机或路由器的各接口。

Snipaste_2023-07-12_14-16-35

Snipaste_2023-07-12_14-17-06

Snipaste_2023-07-12_14-18-03

Snipaste_2023-07-12_14-18-40

划分子网IPv4

子网掩码的概念:它是就是用来分割子网和区分哪些是同一个网段的,哪些不是同一网段的,通过子网掩码可得知,IP地址的网络位。

子网划分原理:

IP地址由网络位+主机位组成,子网划分就是借用现有网段的主机位的最左边某几位作为子网位,划分出多个子网。

把原来有类网络IPv4地址中的“网络号”部分向“主机号”部分借位

把一部分原来属于“主机号”部分的位变成“网络号”的一部分(通常称之为“子网号”)。

因此IP地址进行转变:网络号+主机号 变成 网络号+子网号(m)+主机号(n)

32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号, 子网掩码使用连续的比特1来对应网络号和子网号
子网掩码使用连续的比特0来对应主机号,将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址

给定一个分类的IP地址和其相应的子网掩码,就可知道子网划分的细节:

  1. 划分出的子网数量
  2. 每个子网可分配的IP地址数量
  3. 每个子网的网络地址和广播地址
  4. 每个子网可分配的最小和最大地址

例如: 已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节。

由网络号可知该网络是c类网络,即(192<218<223)

Snipaste_2023-07-12_14-46-37

默认的子网掩码是指在未划分子网的情况下使用的子网掩码。

Snipaste_2023-07-12_14-49-23

无分类分址的IPv4协议

1993年,IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing)的RFC文档:RFC 1517~1519和1520。CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念;CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。CIDR使用“斜线记法”,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量。

例如:128.14.35.7/20,其中,前20比特位用于网络前缀,后12比特位用于主机编号。

CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节:

  1. 地址块的最小地址
  2. 地址块的最大地址
  3. 地址块中的地址数量
  4. 地址块聚合某类网络(A类、B类或C类)的数量
  5. 地址掩码(也可继续成为子网掩码)

例如:请给出CIDR地址块128.14.35.7/20的全部细节(最小地址,最大地址,地址数量,聚合C类网数量,地址掩码)。

Snipaste_2023-07-12_15-09-31

路由聚合(构造超网)

由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合 ,它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上千个)路由。路由聚合也称为构成超网。

路由聚合(构造超网)的方法是找共同前缀;网络前缀越长,地址块越小,路由越具体;若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。

例如: 在子网192.168.4.0/30中,能接收目的地址为192.168.4.3的IP分组的最大主机数是?

Snipaste_2023-07-12_15-13-35

题目中给定IP分组的目的地址为192.168.4.3,是该网络的广播地址,因此该网络上的所有主机都能收到。由于该网络只有两个可分配的IP地址,因此网络中的主机数量最大为2,那么可以收到该IP分组的最大主机数就是2。

IPv4地址的应用规划

定长的子网掩码FLSM(Fixed Length Subnet Mask)

  • 使用同一个子网掩码来划分子网
  • 每个子网所分配的IP地址数量相同,造成IP地址的浪费

变长的子网掩码VLSM(Variable Length Subnet)

  • 使用不同的子网掩码来划分子网
  • 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费

例如:假设申请到的C类网络为218.75.230.0,请使用定长的子网掩码给下图所示的小型互联网中的各设备分配IP地址。应用需求如下:将C类网络218.75.230.0划分成5个子网,每个子网上可分配的IP地址数量不得少于各自的需求。

Snipaste_2023-07-12_15-34-36

使用定长子网掩码方法如下:

Snipaste_2023-07-12_15-36-09

使用变长子网掩码方法如下:

Snipaste_2023-07-12_15-46-32

定长的子网掩码FLSM(Fixed Length Subnet Mask)

  1. 使用同一个子网掩码来划分子网
  2. 子网划分方式不灵活:只能划分出2的n次方个子网(n是从主机号部分借用的用来作为子网号的比特数量)
  3. 每个子网所分配的IP地址数量相同,容易造成IP地址浪费。

变长的子网掩码VLSM(Variable Length Subnet Mask)

  1. 使用不同的子网掩码来划分子网
  2. 子网划分方式灵活:可以按需分配
  3. 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费

IPv6地址

IPv6数据报格式:

Snipaste_2023-07-30_12-25-32

1、版本(Version):4 bit,值为 6(二进制值为 0110)表示 IPv6 报文。

2、流量类别(Traffic Class):8 bit,这相当于 IPv4 协议中的 ToS 字段。但是,考虑到 ToS 字段这些年的发展,现在都用来做区分服务等级(Differentiated Class of Service,DiffServ)了。所以,即使这个字段和旧的 ToS 字段有些相似,它们的名字要比所传送的值更能确切地反映目前的用处。

3、流标签(Flow Label):20 bit,IPv6 中新增。流标签可用来标记特定流的报文,以便在网络层区分不同的报文。转发路径上的路由器可以根据流标签来区分流并进行处理。由于流标签在 IPv6 报文头中携带,转发路由器可以不必根据报文内容来识别不同的流,目的节点也同样可以根据流标签识别流,同时由于流标签在报文头中,因此使用 IPSec 后仍然可以根据流标签进行 QoS 处理。

4、有效载荷长度(Payload Length):16 bit,以字节为单位的 IPv6 载荷长度,也就是 IPv6 报文基本头以后部分的长度(包括所有扩展头部分)。IPv4 的总长度字段是 16 位的,但 IPv6 的有效载荷长度字段却是 20 位,这就意味着该字段能够指定更长的有效载荷(1 048 575 字节,相对 IPv4 中只有 65 535 字节)(本句源自《 TCP / IP 路由技术 》,有误)。

5、下一报头(Next Header):8 bit,用来标识当前头(基本头或扩展头)后下一个头的类型。此域内定义的类型与 IPv4 中的协议域值相同。IPv6 定义的扩展头由基本头或扩展头中的扩展头域链接成一条链。这一机制下处理扩展头更高效,转发路由器只处理必须处理的选项头,提高了转发效率。

6、跳数限制(Hop Limit):8 bit,和 IPv4 中的 TTL 字段类似。每个转发此报文的节点把此域减 1,如果此域值减到 0 则丢弃。注意:IPv4 中的 TTL 设计之初是以秒(s)为单位的,但实际使用时跟 IPv6 中的 Hop Limit 一样,是以跳数为单位。

7、源地址(Source Address):128 bit,报文的源地址。

8、目的地址(Destination Address):128 bit,报文的目的地址。

IPv6地址表示方式

IPv6地址长度为128位,由8个16位的字段组成,每个字段使用4个十六进制数表示,并以冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B,这是IPv6地址的首选格式。

为了书写方便,IPv6还提供了压缩格式,以上述IPv6地址为例,具体压缩规则为:

  • 每组中的前导“0”都可以省略,所以上述地址可写为:FC00:0:130F:0:0:9C0:876A:130B。

  • 地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替,所以上述地址又可以进一步简写为:FC00:0:130F::9C0:876A:130B。

需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”, 否则当计算机将压缩后的地址恢复成128位时,无法确定每个“::”代表0的个数。

IPv6的地址分类

IPv6地址分为单播地址、任播地址(Anycast Address)、组播地址三种类型。和IPv4相比,取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。

  1. 单播地址(Unicast Address): 单播地址用于将数据包发送到网络中的唯一一个目标节点。每个单播地址都是全球唯一的,可以唯一标识网络中的一台设备。单播地址可以分为全球单播地址、链路本地单播地址和站点本地单播地址。
  2. 任播地址(Anycast Address): 任播地址用于将数据包发送到一组具有相同功能的节点中的任何一个。数据包将被路由到离发送者最近的任一具有该任播地址的节点。任播地址主要用于负载均衡和就近访问,以提高网络性能和服务可用性。
  3. 组播地址(Multicast Address): 组播地址用于将数据包同时发送给一个特定的组内多个节点。节点可以通过加入特定的组播组来接收组播数据包。组播地址可以用于广播类的应用,如多播视频、音频和跨网络的服务发现。

IPv6取消了广播地址的使用,因为广播会在网络中的所有节点上产生大量的冗余流量,导致网络资源浪费。通过引入任播地址和组播地址,IPv6更加灵活和高效地满足了不同的通信需求,使网络通信更加可控和可扩展。

IP数据报的发送和转发过程

IP数据报的发送和转发过程包含以下两部分:

  1. 主机发送IP数据报:
  • 判断目的主机是否与自己在同一个网络:若在同一个网络,则属于直接交付;若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发。
  1. 路由器转发IP数据报
  • 检查IP数据报首部是否出错:若出错,则直接丢弃该IP数据报并通告源主机;若没有出错,则进行转发。
  • 根据IP数据报的目的地址在路由表中查找匹配的条目:若找到匹配的条目,则转发给条目中指示的下一跳;若找不到,则丢弃该IP数据报并通告源主机。

静态路由配置及其可能产生的路由环路问题

静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化。 一般只在小规模网络中采用。使用静态路由配置可能出现以下导致产生路由环路的错误:

  1. 配置错误
  2. 聚合了不存在的网络
  3. 网络故障

路由条目的类型分为:

  1. 直连网络

  2. 静态路由(人工配置)

  3. 动态路由(路由选择协议)

特殊的静态路由条目

  1. ​ 默认路由(目的网络为0.0.0.0,地址掩码为0.0.0.0)
  2. ​ 特定主机路由(目的网络为特定主机的IP地址,地址掩码为255.255.255.255)
  3. ​ 黑洞路由(下一跳为null0)

路由选择协议

选择协议分为静态路由选择动态路由选择

静态路由选择
由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由。 这种人工配置方式简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化。 一般只在小规模网络中采用。

动态路由选择
路由器通过路由选择协议自动获取路由信息。比较复杂、开销比较大,能较好地适应网络状态的变化。适用于大规模网络。因特网所采用的路由选择协议的主要特点:

  1. 自适应: 动态路由选择,能较好地适应网络状态的变化;
  2. 分布式: 路由器之间交换路由信息;
  3. 分层次: 将整个因特网划分为许多较小的自治系统AS(Autonomous System)。

Snipaste_2023-07-13_13-27-41

路由器的基本结构

路由器的结构分为路由选择部分分组转发部分

路由选择部分:执行路由选择协议,维护路由选择表以及连接的链路状态信息,并为路由器计算转发表。还执行网络管理功能

分组转发部分:它由如下的三个部分组成:

  • 输入端口:输入端口是指路由器接收数据包的物理接口或端口。它的主要作用是接收来自网络或外部设备的数据包,并将其传递到路由器的其他组件进行处理。
  • 输出端口:输出端口从交换结构接收分组,然后把它们发送到路由器外面的线路上。在网络层的处理模块中设有一个缓冲区,实际上它就是一个队列。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。数据链路层处理模块把分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
  • 交换结构:交换结构(switching fabric)又称为交换组织,它的作用就是根据转发表(forwarding table)对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一种网络,但这种网络完全包含在路由器之中,因此交换结构可看成是“在路由器中的网络”。

路由器的工作原理

信号从某个输入端口进入路由器,在输入端口的物理层将信号变为比特流,送交数据链路层处理。

数据链路层从比特流中识别出帧,去掉帧头和帧尾后,送交网络层处理。

如果送交网络层的是普通待转发的数据分组

则根据分组首部中的目的地址进行查找转发。若找不到匹配的转发条目,则丢弃该分组。输出端口的网络层会更新首部中某些字段的值,然后送交数据链路层进行封装,然后是物理层。

如果送交网络层的是路由器之间交换路由信息的路由报文:

则把这种报文送交路由选择处理机,路由选择处理机根据分组的内容更新自己的路由表

注意:

1.路由表和转发表是不一样的,但为了简化分析,把路由表和转发表看成一个东西

2.路由器还有输入缓冲区和输出缓冲区

3.分组丢弃:若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。

路由信息协议

RIP协议

路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058。
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vector)”。RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。

  • 路由器到直连网络的距离定义为1。
  • 路由器到非直连网络的距离定义为所经过的路由器数加1。
  • 允许一条路径最多只能包含15个路由器。“距离”等于16时相当于不可达。因此,RIP只适用于小型互联网。
  • RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。
  • 当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡

RIP包含以下三个要点:

  1. 和谁交换信息 仅和相邻路由器交换信息
  2. 交换什么信息 自己的路由表
  3. 何时交换信息 周期性交换(例如每30秒)

RIP的基本工作过程:

  1. 路由器刚开始工作时,只知道自己到直连网络的距离为1。
  2. 每个路由器相邻路由器周期性地交换并更新路由信息。
  3. 若于次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛。

RIP的路由条目更新规则:

  1. 发现了新的网络,添加;
  2. 到达目的网络,相同下一跳,最新消息,更新;
  3. 到达目的网络,不同下一跳,新路由优势,更新;
  4. 到达目的网络,不同下一跳,新路由劣势,不更新;
  5. 到达目的网络,不同下一跳,等价负载均衡。

RIP存在“坏消息传播得慢”的问题
“坏消息传播得慢”又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害。

  1. 限制最大路径距离为15 (16表示不可达);
  2. 当路由表发生变化时就立即发送更新报文(即“触发更新”),而不仅是周期性发送;
  3. 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。

OSPF协议(开放最短路径优先)

开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。 “开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。
“最短路径优先”是因为使用了Dijkstra提出的最短路径算法 SPF。

  1. OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。
  2. OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。
  3. OSPF不限制网络规模,更新效率高,收敛速度快。

链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost)。 “代价”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。
OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。

  1. Hello分组封装在IP数据报中,发往组播地址224.0.0.5;
  2. 发送周期为10秒;
  3. 40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达。

使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement)。LSA中包含以下内容:

  1. 直连网络的链路状态信息
  2. 邻居路由器的链路状态信息
  3. LSA被封装在链路状态更新分组LSU中,采用洪泛法发送
  4. 使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致。
  5. 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。

OSPF有以下五种分组类型

  1. 问候(Hello)分组,用来发现和维护邻居路由器的可达性。
  2. 数据库描述(Database Description)分组,向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
  3. 链路状态请求(Link State Request)分组,向邻居路由器请求发送某些链路状态项目的详细信息。
  4. 链路状态更新(Link State Update)分组,路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。
  5. 链路状态确认(Link State Acknowledgment)分组,这是对链路状态更新分组的确认分组。

OSPF的基本工作过程

  1. OSPF在多点接入网络中路由器邻居关系的建立
  2. 选举指定路由器DR(designated router)和备用的指定路由器BDR(backup designated router)
  3. 所有的非DR/BDR只与DR/BDR建立邻居关系
  4. 非DR/BDR之间通过DR/BDR交换信息

为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area)。

Snipaste_2023-07-13_14-34-28

RGP协议(边界网关协议)

BGP的基本工作原理

因特网采用分层次的路由选择协议

  • 内部网关协议IGP(例如路由信息协议RIP或开放最短路径优先OSPF)
  • ​ 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络。
  • ​ 无需考虑自治系统外部其他方面的策略。
  • 外部网关协议EGP(例如边界网关协议BGP)
    • 在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。
    • 自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)。BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。

在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人“。 不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179。

  1. 在此TCP连接上交换BGP报文以建立BGP会话
  2. 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
  3. 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)
  4. BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
  5. BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)。
  6. 当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图。

Snipaste_2023-07-13_14-39-50

BGP适用于多级结构的因特网,BGP-4有以下四种报文:

  1. OPEN(打开)报文: 用来与相邻的另一个BGP发言人建立关系,使通信初始化。
  2. UPDATE(更新)报文: 用来通告某一路由的信息,以及列出要撤销的多条路由。
  3. KEEPALIVE(保活)报文: 用来周期性地证实邻站的连通性。
  4. NOTIFICATION(通知)报文: 用来发送检测到的差错。

网际控制报文协议ICMP

为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet ControlMessage Protocol)。主机或路由器使用ICMP来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送。ICMP差错报告报文共有以下五种:

  1. 终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
  2. 源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
  3. 时间超过:当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。
  4. 参数问题:当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
  5. 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

以下情况不应发送ICMP差错报告报文:

  1. 对ICMP差错报告报文不再发送ICMP差错报告报文
  2. 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文◇对具有多播地址的数据报都不发送ICMP差错报告报文
  3. 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文

常用的ICMP询问报文有以下两种:

  1. 回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态。
  2. 时间戳请求和回答:ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻—共有多少秒。这种询问报文用来进行时钟同步和测量时间。

ICMP应用举例
分组网间探测PING(Packet InterNet Groper)

  1. 用来测试主机或路由器间的连通性

  2. 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)

  3. 使用ICMP回送请求和回答报文

跟踪路由traceroute

  1. 用来测试IP数据报从源主机到达目的主机要经过哪些路由器

  2. Windows版本

    1. ​ tracert命令

    2. ​ 应用层直接使用网际层ICMP

    3. ​ 使用了ICMP回送请求和回答报文以及差错报告报文

  3. Unix版本

    1. ​ traceroute命令

    2. ​ 在运输层使用UDP协议仅使用ICMP差错报告报文

    3. ​ 仅使用ICMP差错报告报文

虚拟专用网VPN与网络地址转换NAT

虚拟专用网VPN(Virtual Private Network):利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。如下图所示,同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN.

Snipaste_2023-07-13_15-42-38

VPN要保证传输数据的安全性,会将原始的内部数据报进行加密,然后再将其封装成为在因特网上发送到的外部数据报。有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来,这样的VPN就称为外联网VPN.
在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源,这种VPN称为远程接入VPN.

网络地址转换NAT:虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。1994年提出”了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题。NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。该转换方法存在一个问题: 如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAP T(Network Address and Port Translation)。

Snipaste_2023-07-13_15-45-06

思考:内网主机与外网主机间的通信, 是否能由外网主机首先发起?

不能。如果由外网主机首先发起,那么当NAPT收到来自外网的IP数据报后,在NAPT转换表中找不到相应的记录!也就无法把数据报转发给内网中的主机。因此,使用私有地址的主机不能直接充当因特网服务器。对于一些点对点网络应用, 需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。另外,由于NAT对外网屏蔽了内网主机的网络地址,因此能为内网主机提供一定的安全保护。

运输层

之前的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。

下图从计算机网络体系结构的角度来看运输层。AP1、AP2、AP3、AP4是通信双方应用层中的应用进程,假设AP1与AP4之间进行基于网络的通信,AP2与AP3之间进行基于网络的通信。在运输层使用不同的端口来对应不同的应用进程,然后通过网络层及其下层来传输应用层报文。接收方的运输层通过不同的端囗将收到的应用层报文交付给应用层中相应的应用进程。需要注意的是,这里的端口并不是指看得见摸得着的物理端口,而是指用来区分不同应用进程的标识符。为了简单起见,在学习和研究运输层时,我们可以简单的认为运输层直接为应用进程间的逻辑通信提供服务。“逻辑通信”的意思是,运输层之间的通信好像是沿水平方向传送数据,但事实上这两个运输层之间并没有一条水平方向的物理连接,要传送的数据是沿着图中上下多次的虚线方向传送的。
Snipaste_2023-07-13_16-07-27

运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用层看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输层协议,即面向连接的TCP无连接的UDP

无连接服务:指数据传输之前无需与对端进行任何信息交换(即“握手”),直接构造运输层报文段并向接收端发送。

有连接服务:指在数据传输之前,需要双方交换一些控制信息,建立逻辑连接,然后在传输数据,数据传输结束后还需在拆除连接。

运输层端口、复用与分用的概念

运行在计算机上的进程使用进程标识符PID来标志。因特网上的计算机并不是使用统一的操作系统,不同的操作系统(windows,Linux,Mac oS)又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。

  1. 端口号使用16比特表示,取值范围065535;熟知端口号:01023,因特网数字分配机构IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53。
  2. 登记端口号: 1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP微软远程桌面使用的端口是3389。
  3. 短暂端口号: 49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用
  4. 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的。

发送方的复用和接收方的分用
如下图所示,对于收发双方的应用进程,发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,称为UDP复用。而另一些应用进程所发送的不同应用报文,在运输层使用TCP协议进行封装,称为TCP复用。

Snipaste_2023-07-13_16-13-23

运输层使用端口号来区分不同的应用进程,不管是使用运输层的UDP协议封装成的UDP用户数据报,还是使用TCP协议封装成的TCP报文段,在网络层都需要使用

IP协议封装成IP数据报,称为IP复用

IP数据报首部中协议字段的值用来表明IP数据报的数据载荷部分封装的是何种协议数据单元,取值为6,表示封装的是TCP报文段;取值为17,表示封装的是UDP

用户数据报。接收方的网络层收到IP数据报后进行IP分用,若IP数据报首部中协议字段的值为17,则把IP数据报的数据载荷部分所封装的UDP用户数据报上交运输

层的UDP;若协议字段的值为6,则把IP数据报的数据载荷部分所封装的TCP报文段上交运输层的TCP。运输层对UDP用户数据报进行UDP分用,对TCP报文段进行TCP分用,也就是根据端口号将它们交付给上层相应的应用进程。TCP/IP体系的应用层常用协议所使用的运输层熟知端口号

TCP协议与UDP协议的区别

它们有以下几个主要区别:

  1. 连接性:TCP是一种面向连接的协议,它在数据传输之前需要建立连接,确保可靠的数据传输。只能一对一传输。UDP是一种无连接的协议,数据包之间没有建立连接的过程,每个数据包独立发送,没有可靠性保证。可以一对一,一对多,多对一传输。
  2. 可靠性:TCP提供可靠的数据传输,通过序号、确认和重传机制来保证数据的完整性和可靠性。它可以检测丢失的数据包并进行重传,确保数据的正确性。UDP不提供可靠性保证,数据包发送后不会进行确认或重传,因此可能会出现丢包或乱序的情况。
  3. 速度和效率:由于TCP提供了可靠性保证,它在数据传输过程中需要进行序号管理、确认和重传等操作,这些额外的机制会增加传输的延迟和开销。相比之下,UDP没有这些额外的机制,因此传输速度较快,延迟较低,适用于实时性要求较高的应用。
  4. 消息边界:TCP是一种面向流的协议,数据传输是连续的字节流,没有消息边界。UDP是一种面向数据包的协议,每个数据包都是独立的,有明确的消息边界,应用程序可以按照数据包的边界进行解析和处理。
  5. 拥塞控制:TCP具有拥塞控制机制,可以根据网络的拥塞程度动态调整发送速率,防止网络拥塞。UDP没有内置的拥塞控制,发送的数据包可能会导致网络拥塞。
  6. 适用场景:TCP适用于对数据可靠性要求较高的应用,如文件传输、网页浏览、电子邮件等。UDP适用于实时性要求较高、丢失少量数据包可以容忍的应用,如音频/视频流传输、实时游戏等。
  7. 报文格式:TCP首部最小20字节,最大60字节。UDP首部只有8字节。

TCP流量控制

一般来说,我们总是希望数据传输得更快一些。 但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。 TCP发送方收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文。

如下图所示,假设主机A和B是因特网上的两台主机,它们之间已经建立了TCP连接。A给B发送数据,B对A进行流量控制。对于主机A中待发送数据的字节序号,假设主机A发送的每个TCP报文段可携带100字节数据,因此图中每个小格子表示100个字节数据的序号。在主机A和B建立TCP连接时,B告诉A:“我的接收窗口为400“,因此主机A将自己的发送窗口也设置为400,这意味着主机A在未收到主机B发来的确认时,可将序号落入发送窗口中的全部数据发送出去。

Snipaste_2023-07-14_14-45-50

接下来举例说明主机B对A的流量控制。如下图所示,主机A将发送窗口内序号1 ~ 100的数据封装成一个TCP报文段发送出去,发送窗口内还有300字节可以发送。
  seq是TCP报文段首部中的序号字段,取值1表示TCP报文段数据载荷的第1个字节的序号是1;DATA表示这是TCP数据报文段。
  主机A将发送窗口内序号101 ~ 200的数据封装成一个TCP报文段发送出去,发送窗口内还有200字节可以发送。
  主机A将发送窗口内序号201 ~ 300的数据封装成一个TCP报文段发送出去,但该报文段在传输过程中丢失了,主机A发送窗口内还有100字节可以发送。
  主机B对主机A所发送的201号以前的数据进行累计确认,并在该累计确认中将窗口字段的值调整为300,也就是对主机A进行流量控制

Snipaste_2023-07-14_14-46-28

ACK是TCP报文段首部中的标志位,取值1表示这是一个TCP确认报文段;ack是TCP报文段首部中的确认号字段,取值201表示序号201之前的数据已全部正确接收,现在希望收到序号201及其后续数据;rwnd是TCP报文段首部中的窗囗字段,取值300表示自己的接收窗大小为300。
  主机A收到该累计确认后,将发送窗口向前滑动,使已发送并收到确认的这些数据的序号移出发送窗口。由于主机B在该累计确认中将自己的接收窗口调整为了300,因此主机A相应的将自己的发送窗口调整为300。目前主机A发送窗口内的序号为201 ~ 500,也就是主机A还可以发送这300字节,其中201 ~ 300号字节是已发送的数据。若重传计时器超时,它们会被重传。301 ~ 400号字节以及401 ~ 500号字节还未被发送,可被分别封装在一个TCP报文段中发送。主机A现在可将发送缓存中序号1 ~ 200个字节数据全部删除了,因为已经收到了主机B对它们的累计确认。主机A将发送窗口内序号301 ~ 400个数据封装成一个TCP报文段发送出去,发送窗口内还有100字节可以发送。主机A将发送窗口内序号401 ~ 500的数据封装成一个TCP报文段发送出去。至此,序号落在发送窗口内的数据已经全部发送出去了,不能再发送新数据了。
  现在,发送窗口内序号201 ~ 300这100个字节数据的重传计时器超时了,主机A将它们重新封装成一个TCP报文段发送出去,暂时不能发送其他数据。主机B收到该重传的TCP报文段后对主机A所发送的501号以前的数据进行累计确认,并在该累计确认中将窗口字段的值调整为100,这是主机B对主机A进行的第二次流量控制

Snipaste_2023-07-14_14-47-06

主机A收到该累计确认后,将发送窗口向前滑动,使已发送并收到确认的这些数据的序号移出发送窗口。由于主机B在该累计确认中将自己的接收窗口调整为了100,因此主机A相应的将自己的发送窗口调整为100。目前主机A发送窗口内的序号为501 ~ 600,也就是主机还可以发送这100字节。主机A现在可将发送缓存中序号201 ~ 500的字节数据全部删除了,因为已经收到了主机B对它们的累计确认。主机A将发送窗口内序号501 ~ 600的数据封装成一个TCP报文段发送出去。至此,序号落在发送窗口内的数据已经全部发送出去了,不能再发送新数据了。主机B对主机A所发送的601号以前的数据进行累计确认,在该累计确认中将窗口字段的值调整为0,这是主机B对主机A进行的第三次流量控制

Snipaste_2023-07-14_14-47-44

主机A收到该累计确认后,将发送窗口向前滑动,使已发送并收到确认的这些数据的序号移出发送窗口。由于主机B在该累计确认中将自己的接收窗口调整为0,因此主机A相应的将自己的发送窗口调整为0。目前,主机A不能再发送一般的TCP报文段了。主机A现在可将发送缓存中序号501 ~ 600的字节数据全部删除了,因为已经收到了主机B对它们的累计确认。
  假设主机B向主机A发送了零窗口的报文段后不久,主机B的接收缓存又有了一些存储空间,于是主机B向主机A发送了接收窗口等于300的报文段。然而,这个报文段在传输过程中丢失了,主机A一直等待主机B发送的非零窗口的通知,而主机B也一直等待主机A发送的数据。如果不采取措施,这种互相等待而形成的死锁局面将一直持续下去。

Snipaste_2023-07-14_14-48-13

为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器超时,就发送一个零窗口探测报文,仅携带一字节的数据。而对方在确认这个探测报文段时,给出自己现在的接收窗口值。如果接收窗口仍然是0,那么收到这个报文段的一方就要重新启动持续计时器;如果接收窗口不是0,那么死锁的局面就可以被打破了。

在本例中,主机A收到零窗口通知时,就启动一个持续计时器。当持续计时器超时,主机A立刻发送一个仅携带一字节数据的零窗口探测报文段。假设主机B此时的接收窗口又为0了,主机B就在确认这个零窗口探测报文段时,给出自己现在的接收窗口值为0。主机A再次收到零窗口通知,就再次启动一个持续计时器。当持续计时器超时,主机A立刻发送一个零窗口探测报文段。假设主机B此时的接收缓存又有了一些存储空间,于是将自己的接收窗调整为300,主机B就在确认这个零窗口探测报文段时,给出自己现在的接收窗口值为300,这样就打破了死锁的局面。

Snipaste_2023-07-14_14-48-42

问题: 主机A所发送的零窗口探测报文段到达主机B时,如果主机B此时的接收窗口仍然为0,那么主机B根本就无法接受该报文段,又怎么会针对该报文段给主机A发回确认呢?
  实际上TCP规定:即使接收窗口为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。

思考: 如果零窗口探测报文段丢失了,会出现怎样的问题呢?还能否打破死锁的局面呢?
Snipaste_2023-07-14_14-49-59

回答是肯定的。因为零窗口探测报文段也有重传计时器,当重传计时器超时后,零窗口探测报文段会被重传。

TCP的拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)。 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。

四种拥塞控制算法: 慢开始、拥塞避免、快重传、快恢复。下面介绍这四种拥塞控制算法的基本原理,假定如下条件:

  1. 数据是单方向传送,而另一个方向只传送确认。
  2. 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。
  3. 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位

如下图所示,假设左右分别是TCP的发送方和接收方,发送方给接收方发送TCP数据报文段,接收方收到后,给发送方发送TCP确认报文段。发送方要维护一个叫做拥塞窗口的状态变量,其值取决于网络的拥塞程度,并且动态变化。拥塞窗口的维护原则是只要网络没有出现拥塞,拥塞窗口就再增大一些,但只要网络出现拥塞,拥塞窗口就减小一些。

Snipaste_2023-07-14_15-11-23

判断出现网络拥塞的依据是没有按时收到应当到达的确认报文段,也就是发生了超时重传。发送方将拥塞窗口作为发送窗口,也就是发送窗口等于拥塞窗口。发送方还需要维护一个叫做慢开始门限的状态变量,当拥塞窗口小于慢开始门限时,使用慢开始算法;当拥塞窗口大于慢开始门限时,停止使用慢开始算法,而改用拥塞避免算法;当拥塞窗口等于慢开始门限时,既可以使用慢开始算法,也可以使用拥塞避免算法

发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

拥塞窗口cwnd的维护原则: 只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些。

判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)。

发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd

维护一个慢开始门限ssthresh状态变量:

  1. 当cwnd < ssthresh时,使用慢开始算法;
  2. 当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法;
  3. 当cwnd = ssthresh时,既可使用慢开始算法,也可使用拥塞避免算法。

慢开始

对于慢开始算法,为了更清楚的显示出拥塞控制过程,可以绘制如下所示的拥塞窗口随传输轮次变化的图,横坐标为传输轮次。传输轮次是指发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段,一个传输轮次所经历的时间其实就是往返时间。请注意,往返时间并非是恒定的数值。使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认。
  纵坐标是拥塞窗口,它会随网络拥塞程度以及所使用的拥塞控制算法动态变化。在TCP双方建立逻辑连接关系时,拥塞窗口的值被设置为1。在图上标出传输轮次0时的拥塞窗口值为1。另外,还需设置慢开始门限的初始值,本例采用16,并将它在图中标出。在执行慢开始算法时,发送方每收到一个对新报文段的确认时,就把拥塞窗口值加1,然后开始下一轮的传输。当拥塞窗口值增长到慢开始门限值时,就改为执行拥塞避免算法。由于发送方当前的拥塞窗口值是1,而发送窗口值等于拥塞窗口值,因此发送方当前只能发送一个TCP数据报文段。换句话说,拥塞窗口值是几,就能发送几个数据报文段。
Snipaste_2023-07-14_15-15-50

如图所示,发送方发送0号数据报文段,接收方收到后给发送方
发回对0号报文段的确认报文段,发送方收到该确认报文段后,将拥塞窗口值加1增大到2,在图中标出该值。这意味着发送方现在可以发送1 ~ 2号共两个数据报文段,接收方收到后给发送方发回对1 ~ 2号报文段的确认报文段,发送方收到后将拥塞窗口值加2增大到4,在图中标出该值。发送方现在可以发送3 ~ 6号共4个数据报文段,接收方收到后给发送方发回对3 ~ 6号报文段的确认报文段,发送方收到后将拥塞窗囗值加4增大到8,在图中标出该值。发送方现在可以发送7 ~ 14号共8个数据报文段,接收方收到后给发送方发回对7 ~ 14号报文段的确认报文段,发送方收到后将拥塞窗口值加8增大到16,在图中标出该值。
Snipaste_2023-07-14_15-16-27

发送方当前的拥塞窗口值已经增大到了慢开始门限值,之后我们要改用拥塞避免算法,也就是每个传输轮次结束后,拥塞窗口值只能线性加1,而不像慢开始算法那样,每个传输轮次结束后,拥塞窗口值按指数规律增长。

拥塞避免(congestion avoidance)

发送方现在可以发送15 ~ 30号共16个数据报文段,接收方收到后给发送方发回对15 ~ 30号报文段的确认报文段,发送方收到后将拥塞窗口值加1增大到17,在图中标出该值。发送方现在可以发送31 ~ 47号共17个数据报文段,接收方收到后给发送方发回对31 ~ 47号报文段的确认报文段,发送方收到后将拥塞窗口值加1增大到18,在图中标出该值。

Snipaste_2023-07-14_15-18-34

随着传输轮次的增加,拥塞窗口值每轮次都线性加1。例如当前拥塞窗口值增加到了24,发送方现在可以发送171 ~ 194号共24个数据报文段。假设这24个数据报文段在传输过程中丢失了几个,这必然会造成发送方对这些丢失报文段的超时重传。

Snipaste_2023-07-14_15-18-58

发送方以此判断网络很可能出现了拥塞,需要进行以下工作:

1. 将慢开始门限值更新为发生拥塞时拥塞窗口值的一半。网络发生拥塞时的拥塞窗口值是24,因此更新慢开始门限值为该值的一半,即12,如图所示。

Snipaste_2023-07-14_15-19-37

  1. 将拥塞窗口值减小为1,并重新开始执行慢开始算法。当慢开始算法执行到拥塞窗口值增大到新的慢开始门限值时,就停止使用慢开始算法,转而执行拥塞避免算法,如图所示。

Snipaste_2023-07-14_15-20-15

通过本例可以看出,TCP发送方一开始使用慢开始算法让拥塞窗口值从1开始按指数规律增大,当拥塞窗口值增大到慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大。当发生超时重传时,就判断网络很可能出现了拥塞,采取相应的措施。一方面将慢开始门限值更新为发生拥塞时拥塞窗口值的一半;另一方面将拥塞窗口值减小为1,并重新开始执行慢开始算法。拥塞窗口值又从1开始按指数规律增大,当增大到了新的慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大。
Snipaste_2023-07-14_15-21-08

“慢开始”是指一开始向网络注入的报文段少,而并不是指拥塞窗口值增长速度慢。

“拥塞避免”也并非指完全能够避免拥塞,而是只在拥塞避免阶段,将拥塞窗口值控制为按线性规律增长,使网络比较不容易出现拥塞。

慢开始和拥塞避免是1988年就提出的TCP拥塞控制算法(TCP Tahoe版本)。

1990年又增加了两个新的拥塞控制算法,以便改进TCP的性能,这就是快重传和快恢复(TCP Reno版本)。

有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这将导致发送方超时重传,并误认为网络发生了拥塞;

例如,在之前的例子中,当拥塞窗口值增大到24时,发生了超时重传,而网络此时并没有发生拥塞,但是发送方却误认为网络发生了拥塞,于是发送方把拥塞窗口

值减小为1,并错误的启动慢开始算法,因而降低了传输效率。

Snipaste_2023-07-14_15-22-36

采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。

快重传(fast retransmit)

所谓快重传,就是使发送方尽快进行重传而,不是等超时重传计时器超时再重传。这就要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的重传计时器超时再重传。对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。

举例说明快重传算法。

  1. 发送方发送1号数据报文段,接收方收到后,给发送方发回对1号报文段的确认。
  2. 在该确认报文段到达发送方之前,发送方还可以将发送窗口内的2号数据报文段发送出去,接收方收到后,给发送方发回对2号报文段的确认。
  3. 在该确认报文段到达发送方之前,发送方还可以将发送窗口内的3号数据报文段发送出去,但该报文段丢失了,接收方自然不会给发送方发回针对该报文段的确认。
  4. 发送方还可以将发送窗口内的4号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认,表明:“我现在希望收到的是3号报文段,但是我没有收到3号报文段,而是收到了未按序到达的报文段。”
  5. 发送方还可以将发送窗口内的5号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认。
  6. 发送方还可以将发送窗口内的6号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认。
  7. 至此,发送方会收到3个连续的对2号报文段的重复确认,就立即重传3号报文段,接收方收到后,给发送方发回针对6号报文段的确认,表明序号到6为止的报文段都正确接收了。这样就不会造成对3号报文段的超时重传,而是提早进行了重传。

Snipaste_2023-07-14_15-26-49

对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞而错误的降低拥塞窗口值为最小值1。使用快重传可以使整个网络的吞吐量提高约20%。

快恢复(fast recovery)

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;

发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法。也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3。 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络; 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;可见现在网络中不是堆积了报文段,而是减少了3个报文段,因此可以适当把拥塞窗口扩大些。

接下来,给出TCP拥塞窗口值在拥塞控制时的变化情况举例,里面包含了TCP拥塞控制的四种算法。TCP发送方一开始使用慢开始算法,让拥塞窗口值从1开始按指数规律增大,当增大到慢开始门限初始值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大。当发生超时重传时,就判断网络可能出现了拥塞,采取相应的措施。一方面,将慢开始门限值更新为发生拥塞时拥塞窗囗值的一半;另一方面,将拥塞窗口值减小为1,并重新开始执行慢开始算法。拥塞窗口值又从1开始按指数规律增大,当增大到了新的慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大。当发送方收到3个重复的确认时,就进行快重传和快恢复,也就是更新慢开始门限值为当前拥塞窗口值的一半,并将拥塞窗口值也取为新的慢开始门限值,转而执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大。

Snipaste_2023-07-14_15-28-44

TCP超时重传时间的选择

如下图所示,假设主机A和B是因特网上的两台主机,它们之间已经建立了TCP连接,纵坐标为时间。现在,主机A给主机B发送TCP数据报文段0,并记录下当前的时间,主机B收到后给主机A发送相应的确认报文段,主机A收到确认报文段后记录下当前的时间。主机A记录下的这两个时间,它们的差值就是报文段的往返时间RTT。由于这是第0个报文段的RTT,我们就用RTT0来表示。

Snipaste_2023-07-14_15-37-19

试想一下,如果我们将超时重传时间RTO的值设置的比RTT0的值小,会出现怎样的情况呢?
  很显然,这会引起报文段不必要的重传,使网络负荷增大。

Snipaste_2023-07-14_15-38-25

试想一下,如果我们将超时重传时间RTO的值设置的比RTT0的值小,会出现怎样的情况呢?
  很显然,这会引起报文段不必要的重传,使网络负荷增大。

Snipaste_2023-07-14_15-38-48

综合上述两种情况,我们可以得出结论:超时重传时间RTO的值应该设置为略大于报文段往返时间RRT的值。

Snipaste_2023-07-14_15-39-17

不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO。利用每次测量得到的RTT样本,计算加权平均往返时间 RTTS (又称为平滑的往返时间)。

\[RTT_{s1}=RTT_1\\ 新的RTT_s=(1-\alpha)\times旧的RTT_s+\alpha\times新的RTT样本\\ 在上式中,0\leq\alpha<1\\ 若\alpha很接近于0,则新的RTT样本对RTT_S的影响不大\\ 若\alpha很接近于1,则新的RTT样本对RTT_S的影响较大\\ 已成为建议标准的RFC6289推荐的\alpha值为\frac{1}{8},即0.125 \]

用这种方法得出的加权平均往返时间RTTS 就比测量出的RTT值更加平滑。显然,超时重传时间RTO应略大于加权平均往返时间RTTs。 RFC6298建议使用下式计算超时重传时间RTO:

\[RTO=RTT_S+4\times RTT_D \]

\[RTT_{D1}=RTT_1\div 2\\ 新的RTT_D=(1-\beta)\times 旧的RTT_D+\beta \times |RTT_S - 新的RTT样本|\\ 其中:0\leq \beta <1\\ 已成为建议标准的RFC6298推荐的\beta值为\frac{1}{4},即0.25 \]

由上我们可以发现,不管是RTTS还是RTTD 都是基于所测量到的RTT样本进行计算的。如果所测量到的RTT样本不正确,那么所计算出的RTTS 和RTTD 自然就不正确,进而所计算出的超时重传时间RTO也就不正确。

往返时间RTT的测量比较复杂。针对出现超时重传时无法测准往返时间RTT的问题,Karn提出了一个算法:在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间RTT样本。也就是出现重传时,不重新计算RTTS 进而超时重传时间RTO也不会重新计算。这又引起了新的问题。设想出现这样的情况:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据Karn算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。这会导致报文段反复被重传。因此,要对Karn算法进行修正。方法是:报文段每重传一次,就把超时重传时间RTO增大一些。典型的做法是将新RTO的值取为旧RTO值的2倍,即出现超时重传时,新RTO=2倍的旧RTO。

TCP可靠传输的实现

TCP基于以字节为单位的滑动窗口来实现可靠传输。
发送方在未收到接收方的确认时,可将发送窗口内还未发送的数据全部发送出去;接收方只接收序号落入发送窗口内的数据。虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。对于不按序到达的数据应如何处理,TCP并无明确规定。

如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据。TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。

TCP要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。

TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122]。
捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。

TCP的通信是全双工通信。 通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。

应用层

04741计算机网络原理2018年版-第二章 网络应用 知识要点_计算机网络原理2018版_Leon_GXN的博客-CSDN博客

应用层解决通过应用进程的交互来实现特定网络应用的问题

应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。

  • 早期基于文本的应用(电子邮件、远程登录、文件传输、新闻组)
  • 20世纪90年代将因特网带入千家万户的万维网www
  • 当今流行的即时通信、P2P文件共享及各种音视频应用
  • 计算设备的小型化和“无处不在”,宽带住宅接入和无线接入的日益普及和迅速发展,为未来更多的新型应用提供了广阔的舞台。

网络应用体系结构与分类

计算机网络应用从体系结构角度可以分为:客户/服务器(C/S)结构纯P2P(Peer to Peer)结构混合结构3类。

客户/服务器方式(C/S方式),对等方式(P2P方式),混合结构

网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务。开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。目前流行的主要有以下两种: 客户/服务器(Client/Server,C/S)方式对等(Peer-to-Peer,P2P)方式

客户/服务器(Client/Server,C/S)方式

  • 客户和服务器是指通信中所涉及的两个应用进程。
  • 客户/服务器方式所描述的是进程之间服务和被服务的关系。
  • 客户是服务请求方,服务器是服务提供方。
  • 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址。

客户/服务器体系结构网络应用是最传统、最基本的网络应用,通信过程发生在客户与中心服务器之间,客户与客户之间不会进行直接通信。很多我们熟悉的网络应用采用的都是C/S方式。包括万维网www、电子邮件、文件传输FTP等。 基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况。为此,在C/S应用中,常用计算机群集(或服务器场)构建一个强大的虚拟服务器。

  • 对等(Peer-to-Peer,P2P)方式
    在P2P方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。目前,在因特网上流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等。
  • 基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中。
  • P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
  • P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。

纯P2P体系结构网络应用中没有传统的中心服务器,通信在对等的对等端(Peer)之间进行。P2P应用规模伸缩性很强,随时会有对等端加入,也随时有对等端离开,对等端之间的通信也具有很强的动态性。每个对等端既包括客户进程又包括服务器进程,主动发起通信的对等端表现为客户,而被动通信的对等端表现为服务器。

混合结构

混合结构网络应用将C/S应用和P2P应用结合在一起,既有中心服务器存在,又有对等端(客户端)之间的联系。

在混合结构网络应用中,存在客户(即对等端)与服务器之间的传统CIS结构的通信,也存在客户之间直接通信。通常每个客户通过C/S方式向服务器注册自己的网络地址,声明可共享的资源或可提供的服务,并通过中心服务器发现其他在线的客户,检索其他客户可以共享的资源等信息。当某客户希望获取另一个客户拥有的资源或服务时,便直接与该客户发起通信,请求其提供服务。

混合体系结构应用网络应用融合了纯P2P应用与传统的客户/服务器应用,在纯P2P应用中引入了传统的中心服务器,解决了P2P应用的查找问题。

网络应用通信基本原理

网络应用的基本通信过程:网络应用的本质是运行在不同主机上(也可以运行在同一主机上)的应用进程之间的通信。

网络应用与传输层服务:网络应用需要使用传输层提供端到端的传输服务。
应用编程接口API的概念:典型的网络应用编程接口是套接字(Socket),套接字是每个应用进程与其他应用进行网络通信时,真正收发报文的通道。
网络应用进程的标识:通过进程运行的主机IP地址以及其套接字所绑定的端口号可以标识应用进程。
IP地址与端口号:IP地址是Internet的网络层地址,用于标识一个主机或路由器接口。对于一个传输层协议,需要为与其接口的每个套接字分配一个编号,标识该套接字,该编号称为端口号

动态主机配置协议DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。DHCP通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

DHCP的作用:

首先来举例说明DHCP的作用。如下图所示,有这样一个网络拓扑。思考一下我们应该给网络中的各主机设置怎样的网络相关配置信息才能使它们可以正常访问网络中的外部服务器?

Snipaste_2023-07-13_16-37-15

我们需要给网络中的各主机正确配置IP地址、子网掩码、默认网关DNS服务器的网络相关配置信息,例如下图是我们分别给两台主机手工配置的网络相关配置信息。

Snipaste_2023-07-13_16-37-58

试想一下,如果网络中的主机数量比较多,则这种手工配置的工作量就比较大,并且容易出错。如果我们给网络中添加一台DHCP服务器,在该服务器中设置好可为网络中其他各主机配置的网络配置信息。网络中各主机开机后自动启动DHCP程序,向DHCP服务器请求自己的网络配置信息,这样网络中的各主机就都可以从DHCP服务器自动获取网络配置信息,而不用手工参与。

Snipaste_2023-07-13_16-38-41

DHCP的工作过程

DHCP使用客户服务器方式在DHCP服务器上运行DHCP服务器进程,也可简称为DHCP服务器,在用户主机上运行DHCP客户进程,也可简称为DHCP客户。DHCP是TCP/IP协议体系应用程中的协议,它使用运输层的UDP所提供的服务,也就是说DHCP报文在运输层会被封装成为UDP用户数据报。DHCP服务器使用的UDP端口是67,DHCP客户使用的UDP端口是68,这两个UDP端口都是熟知端口。封装有DHCP报文的UDP用户数据报在网络层会被封装成IP数据报,然后再根据所使用的网络接口封装成相应的数据链路层的帧进行发送,例如封装成以太网帧

DHCP客户与DHCP服务器的交互过程。当启用主机的DHCP后,DHCP客户将广播发送DHCP发现报文,封装该报文的IP数据报的原IP地址为0.0.0.0,这是因为主机目前还未分配到IP地址,因此使用该地址来代替,目的IP地址为广播地址255.255.255.255。之所以进行广播发送,是因为主机现在并不知道网络中有哪几个DHCP服务器,它们的IP地址各是什么。由于是广播的IP数据报,因此网络中的所有设备都会收到该IP数据报,并对其层层解封,解封出封装有DHCP发现报文的UDP用户数据报。对于DHCP客户,其应用层没有监听该UDP用户数据报的目的端口67的进程,也就是DHCP服务器进程,因此无法交付DHCP发现报文,只能丢弃;而对于DHCP服务器,其应用层始终运行着DHCP服务器进程,因此会接受该DHCP发现报文并作出响应。DHCP报文的格式比较复杂,对于DHCP发现报文,我们只需要知道其内部封装有事物ID和DHCP客户端的MAC地址即可。

DHCP服务器收到DHCP发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有针对该MAC地址的配置信息,如果有,则使用这些配置信息来构建并发送DHCP提供报文;如果没有,则采用默认配置信息来构建并发送DHCP提供报文。封装该报文的IP数据报的原IP地址为DHCP服务器的IP地址,目的IP地址仍为广播地址。仍然使用广播地址的原因是,主机目前还没有配置IP地址,为了使主机可以收到,只能发送广播。这样一来网络中的所有设备都会收到该IP数据报,并对其层层解封,解封出封装有DHCP提供报文的UDP用户数据报。对于DHCP服务器,其应用层没有监听该UDP用户数据报目的端口68的进程,也就是DHCP客户进程,因此无法交付DHCP提供报文,只能丢弃;而对于DHCP客户,其应用层运行着DHCP客户进程,因此会接受该DHCP提供报文并作出相应处理。

DHCP客户会根据DHCP提供报文中的事物ID来判断该报文是否是自己所请求的报文,换句话说如果该事物ID与自己之前发送的DHCP发现报文中封装的事物ID相等,要表明这是自己所请求的报文,就可以接受该报文;否则就丢弃该报文。DHCP提供报文中还封装有配置信息,例如IP地址、子网掩码、地址租期、默认网关、DNS服务器等。需要注意的是,DHCP服务器从自己的IP地址池中挑选待租用给主机的IP地址时,会使用ARP来确保所选IP地址未被网络中其他主机占用。

在本例中,DHCP客户会收到两个DHCP服务器发来的DHCP提供报文,DHCP客户从中选择一个。一般来说,选择先到的那个,并向所选择的DHCP服务器发送DHCP请求报文。封装该报文的IP数据报的源IP地址仍为0.0.0.0,因为此时DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器。它首先需要征得该服务器的同意,之后才能正式使用向该DHCP服务器租用的IP地址,目的IP地址仍为广播地址。这样做的目的是,不用向网络中的每一个DHCP服务器单播发送DHCP请求报文,来告知它们是否请求它们作为自己的DHCP服务器。

DHCP请求报文装封有事物ID、DHCP客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器端的IP地址等信息。

在本例中,假设DHCP客户选择DHCP服务器1作为自己的DHCP服务器,并且DHCP服务器1接受该请求,于是DHCP服务器1给DHCP客户发送DHCP确认报文。封装该报文的IP数据报的源IP地址为DHCP服务器1的IP地址,目的IP地址仍为广播地址。DHCP客户收到该确认报文后,就可以使用所租用到的IP地址了。

需要注意的是,在使用租用到的IP地址之前,主机还会使用ARP检测该IP地址是否已被网络中其他主机占用,若被占用,DHCP客户会给DHCP服务器发送DHCP谢绝报文来谢绝IP地址租约,并重新发送DHCP发现报文;若未被占用,则可以使用租约中的IP地址与网络中的其他主机通信了。当租用期过了一半时,DHCP客户会向DHCP服务器发送DHCP请求报文来请求更新租用期,封装该报文的IP数据报的源IP地址为DHCP客户之前租用到的IP地址,目的IP地址为DHCP服务器1的地址。DHCP服务器若同意,则发回DHCP确认报文,这样DHCP客户就得到了新的租用期;DHCP服务器若不同意,则发回DHCP否认报文,这时DHCP客户必须立即停止使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址。DHCP服务器若未作出响应,则在租用期过了87.5%时,DHCP客户必须重新发送DHCP请求报文,然后继续等待DHCP服务器可能做出的反应。若DHCP服务器未作出反应,则当租用期到期后,DHCP客户必须立即停止使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址。DHCP客户可以随时提前终止DHCP服务器所提供的租用期,这时只需要向DHCP服务器发送DHCP释放报文段即可。

综上所述,下面分别是DHCP客户寻找DHCP服务器、DHCP服务器向DHCP客户提供IP地址租用、DHCP客户接受IP地址租约、DHCP服务器确认IP地址租约、DHCP客户进行IP地址续约、DHCP客户可以随时解除IP地址租约各部分。

需要注意的是,DHCP服务器在给DHCP客户挑选IP地址时使用ARP来确保所挑选的IP地址未被网络中其他主机占用,而DHCP客户在使用所租
用的IP地址之前也会使用ARP来检测该IP地址是否已被网络中其他主机占用。

DHCP中继代理

如下图所示,有这样一个网络拓扑,思考一下该网络中的各主
机是否可以通过DHCP来自动获取到网络配置信息呢?

Snipaste_2023-07-14_16-55-52

答案是否定的。原因很简单,该网络中的主机广播发送DHCP发现报文,但该广播报文不会被路由器转发,而是丢弃。
  解决方法是给该路由器配置DHCP服务器的IP地址,并使之成为DHCP中继代理,这样该网络中的各主机就可以通过DHCP来自动获取到网络配置信息了。当该路由器收到广播的DHCP发现报文后,会将其单播转发给DHCP服务器。
  使用DHCP中继代理的主要原因是我们并不愿意在每一个网络上都设置一个DHCP服务器,因为这样会使DHCP服务器的数量太多。

Snipaste_2023-07-14_16-56-22

动态主机配置协议DHCP(Dynamic Host Configuration Protocol)提供了一种机制,称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息而不用手工参与。
DHCP主要使用以下报文来实现其功能:

  1. DHCP DISCOVER:DHCP发现报文
  2. DHCP OFFER:DHCP提供报文
  3. DHCP REQUEST:DHCP请求报文
  4. DHCP ACK:DHCP确认报文
  5. DHCP NACK:DHCP否认报文
  6. DHCP RELEASE:DHCP释放报文

DHCP报文在运输层使用UDP协议封装

  1. DHCP客户使用的UDP端口号为68
  2. DHCP服务器使用的UDP端口号为67

DHCP客户在未获取到IP地址时使用地址0.0.0.0

在每一个网络上都设置一个DHCP服务器会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中继代理(通常是一台路由器),它配置了DHCP服务器的IP地址信息,作为各网络中计算机与DHCP服务器的桥梁。

典型网络应用及应用层协议

典型网络应用的作用、特点及应用层协议

  • Web应用:应用层协议HTTP,使用传输层TCP,服务器默认端口号80。
  • 电子邮件:发送邮件应用层协议是SMTP,SMTP使用传输层TCP,服务器端口默认25。读取邮件应用层协议是POP3、IMAP、HTTP。
  • FTP:应用层协议也叫FTP,使用传输层TCP,服务器默认端口21,传输数据端口20。
  • P2P应用。

域名解析DNS的域名结构

域名的结构由标号序列组成,各标号之间用点隔开。

各标号分别代表不同级别的域名:

  • 国家顶级域名nTLD。如cn表示中国,us美国,uk英国等。
  • 通用顶级域名gTLD。com(公司和企业)、net(网络服务机构)、org(非营利性组织)、edu(专用的教育机构)、gov(专用的政府部门)、mil(专用的军事部门)、int(国际组织)。
  • 基础结构域名。这种顶级域名只有一个,arpa,用于反向域名解析,又称为反向域名。

DNS的主要功能:DNS实现了主机域名与IP地址之间的映射。

各类域名服务器

一个服务器所负责管辖的范围叫做区(zone)。每一个区设置相应的权威域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。域名服务器根据其主要保存的域名信息以及在域名解析过程中的作用等,另外,任何一台主机在网络地址配置时,都会配置一个域名服务器作为默认域名服务器,这样这台主机任何时候需要进行域名解析,都会将域名查询请求发送给该服务器,该服务器如果保存了被查询域名的信息,则直接做出响应,如果没有,则代理查询其他域名服务器,直到查询到结果,最后将查询结果发送给查询主机。

域名服务期根据其主要保存的域名信息以及在域名解析过程中的作用,分为:根域名服务器、顶级域名服务器、权威域名服务器、中间域名服务器4类。

任何一台主机在网络地址分配时,都会配置一个域名服务器作为默认域名服务器,通常被称为本地域名服务器是主机进行域名查询过程中首先被查询的域名服务器。

根域名服务器:最重要的域名服务器。存储所有顶级域名服务器的域名和IP地址。本地域名服务器无法解析时首先求助根域名服务器。一共13个,a-m,a.rootservers.net—m.rootservers.net。

顶级域名服务器:TLD服务器,负责管理该顶级域名服务器注册的所有二级域名。

权威域名服务器:负责一个区的域名服务器,保存该区中的所有主机的域名到IP地址的映射。

中间域名服务器:在层次域名结构中,啥也不是,通常称为中间域名服务器。

域名解析过程

域名解析分为递归解析迭代解析

提供递归查询服务的域名服务器,可以代替查询主机或其他域名服务器,进行进一步的域名查询, 并将最终解析结果发送给查询主机或服务器。

提供迭代查询的服务器,不会代替查询主机或其他域名服务器,进行进一步的查询, 只是将下一步要查询的服务器告知查询主机或服务器(当然,如果该服务器拥有最终解析结果,则直接响应解析结果)。

递归解析

通常本地域名服务器都提供递归查询服务。主机在进行域名查询时,本地域名服务器如果没有被查询域名的信息,则代理主机查询根域名服务器或其他服务器,直到得到被查询域名的IP地址(当然,也可能查询不到),最后将解析结果发送给主机。

迭代解析

仅提供迭代查询服务的域名服务器不会代理客户的查询请求,而是将最终结果或者下一步要查询的域名服务器直接响应给查询客户。根域名服务器通常只提供迭代查询服务,当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的IP 地址(这种情况不多见),要么在响应报文中告诉本地域名服务器下一步应当查询哪一个域名服务器,本地域名服务器则继续查询下一个域名服务 器,直到查询到被查询域名主机的权威域名服务器。

TCP协议

TCP是一种面向连接的、可靠的传输协议,用于确保数据的可靠传输。

TCP协议的主要特点包括:

  1. 面向连接:在使用TCP传输数据之前,发送方和接收方需要建立一个连接。连接的建立使用"三次握手"的过程,确保双方都同意建立连接。连接建立后,数据可以按顺序可靠地传输,并且在传输完成后关闭连接。
  2. 可靠性:TCP通过使用序号、确认和重传机制来确保数据的可靠传输。每个TCP段都有一个序号,接收方通过确认序号来表示已成功接收到的数据段。如果发送方没有收到确认,它会重新发送相应的数据段。这种机制可以确保数据的完整性和正确性。
  3. 流量控制:TCP使用滑动窗口机制来进行流量控制。滑动窗口定义了发送方可以发送多少个字节而不需要等待确认。接收方可以根据自己的处理能力和接收缓冲区的大小来调整滑动窗口的大小,以避免数据的丢失或溢出。
  4. 拥塞控制:TCP还具有拥塞控制机制,用于在网络出现拥塞时减少数据的发送速率。TCP使用拥塞窗口和拥塞避免算法来动态调整发送速率,以避免网络拥塞和数据丢失。
  5. 面向字节:TCP以字节流的形式传输数据,而不是按照固定大小的数据块进行传输。这意味着TCP对上层应用提供了一个抽象的字节流接口,应用程序可以根据需要读取任意数量的字节。

TCP协议的工作原理

  1. 建立连接:发送方通过发送一个带有SYN标志的TCP段向接收方发起连接请求。接收方收到请求后,回复一个带有SYN和ACK标志的TCP段作为确认。发送方再回复一个带有ACK标志的TCP段,表示连接建立成功。
  2. 数据传输:连接建立后,发送方将应用层数据分割成合适的数据段,并添加TCP首部信息,然后通过网络发送给接收方。接收方收到数据后,根据序号进行确认,并将数据传递给上层应用。
  3. 连接关闭:当数据传输完成后,发送方发送一个带有FIN标志的TCP段,表示不再发送数据。接收方收到FIN后,发送一个带有ACK标志的确认段作为回应。接着,接收方也发送一个带有FIN标志的TCP段,表示同意关闭连接。最后,发送方发送一个带有ACK标志的确认段,表示连接已成功关闭。
  • ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
  • SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
  • FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

三次握手和四次挥手是TCP连接的建立和释放过程中的重要步骤。

三次握手(Three-Way Handshake)

接下来看一下TCP使用三报文握手建立连接的具体过程。如下图是两台要基于TCP进行通信的主机,其中一台主机中的某个应用进程主动发起TCP连接建立,称为TCP客户。另一台主机中被动等待TCP连接建立的应用进程,称为TCP服务器。我们可以将TCP建立连接的过程比喻为“握手”,“握手”需要在TCP客户和服务器之间交换三个TCP报文段。最初,两端的TCP进程都处于关闭状态。

Snipaste_2023-07-14_16-35-40

一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息,例如TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针、当前发送和接收序号等。之后,就准备接受TCP客户进程的连接请求。此时,TCP服务器进程就进入监听状态,等待TCP客户进程的连接请求。

Snipaste_2023-07-14_16-36-22

TCP服务器进程是被动等待来自TCP客户进程的连接请求,而不是主动发起,因此称为被动打开连接

Snipaste_2023-07-14_16-37-03

TCP客户进程也是首先创建传输控制块,然后在打算建立TCP连接时向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态。TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段。序号字段seq被设置了一个初始值x作为TCP客户进程所选择的初始序号。请注意,TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号。由于TCP连接建立是由TCP客户进程主动发起的,因此称为主动打开连接

TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态。该报文段首部中的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段。序号字段seq被设置了一个初始值y作为TCP服务器进程所选择的初始序号。确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号的确认。请注意,这个报文段也不能携带数据,因为它是SYN被设置为1的报文段,但同样要消耗掉一个序号。

TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已建立状态。该报文段首部中的确认位ACK被设置为1,表明这是一个普通的TCP确认报文段。序号字段seq被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,并且不携带数据,因此第二个报文段的序号为x+1。请注意,TCP规定普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号。在这种情况下,所发送的下一个数据报文段的序号仍是x+1,确认号字段ack被设置为y+1,这是对TCP服务器进程所选择的初始序号的确认。

TCP服务器进程收到该确认报文段后,也进入连接已建立状态。现在,TCP双方都进入了连接已建立状态。它们可以基于已建立好的TCP连接,进行可靠的数据传输。

Snipaste_2023-07-14_16-39-00

思考: 为什么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连接请求,并且处于关闭状态,因此不会理会该报文段。但TCP服务器进程已进入了连接已建立状态,它认为新的TCP连接已建立好了,并一直等待TCP客户进程发来数据,这将白白浪费TCP服务器进程所在主机的很多资源。
  综上所述采用三报文手而不是两报文握手来建立TCP连接,是为了防止已失效的连接请求报文段突然又传送到了TCP服务器进程,因而导致错误。
Snipaste_2023-07-14_16-39-51

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

Snipaste_2023-07-14_16-41-04

第一次握手 SYN=1,ACK=0: Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  第二次握手 SYN=1,ACK=1: Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  第三次握手 SYN=0,ACK=1 : Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

SYN攻击: 在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。

四次挥手(Four-Way Handshake)断开连接

  1. 第一次挥手(FIN):当客户端希望关闭连接时,发送一个带有FIN(结束)标志的TCP报文段,表示不再发送数据。
  2. 第二次挥手(ACK):服务器接收到客户端的关闭请求后,发送一个带有ACK(确认)标志的TCP报文段,确认收到了客户端的关闭请求。
  3. 第三次挥手(FIN):当服务器也希望关闭连接时,发送一个带有FIN标志的TCP报文段,表示不再发送数据。
  4. 第四次挥手(ACK):客户端接收到服务器的关闭请求后,发送一个带有ACK标志的TCP报文段,确认收到了服务器的关闭请求。

通过四次挥手,双方彼此确认了关闭连接的意图,并完成了连接的释放,使得连接处于关闭状态。

需要注意的是,在第三次握手和第四次挥手过程中,每次发送的报文段都需要经过对方的确认才能进行下一步操作,以确保连接的可靠关闭。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

TCP报文格式

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+
|            源端口号(16位)            |           目的端口号(16位)       		  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|                       		序列号(32位)                             		|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|                    			确认号(32位)                                	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|数据偏移(4位)|保留(6位)| URG | Ack | PSH | RST | SYN | FIN |    窗口(16位)      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           校验和(16位)             	|      			紧急指针(16位)           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           选项(可选)                  |         			填充             		|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|                    				 数据(可选)                                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

TCP报文的数据格式包括以下字段:

  1. 源端口号(16位):发送方的端口号。
  2. 目的端口号(16位):接收方的端口号。
  3. 序列号(32位):用于按序传送数据的字节流编号。表示发送方发送的数据字节在整个字节流中的位置。
  4. 确认号(32位):只有在ACK标志被设置时才有效。表示接收方期望接收的下一个字节的序列号。
  5. 数据偏移(4位):指定TCP报文头部的长度(以32位字为单位)。
  6. 保留(6位):保留字段,暂未使用。
  7. URG标志(1位):紧急指针是否有效。
  8. ACK标志(1位):确认号是否有效。
  9. PSH标志(1位):提示接收方应该尽快将数据交给应用层,而不用等待缓冲区填满。
  10. RST标志(1位):重置连接。
  11. SYN标志(1位):用于建立连接。
  12. FIN标志(1位):用于释放连接。
  13. 窗口大小(16位):指定接收方的接收窗口大小,用于流量控制。
  14. 校验和(16位):用于检验TCP报文的完整性。
  15. 紧急指针(16位):如果URG标志被设置,指示紧急数据的字节偏移量。
  16. 选项(可选):可选的TCP选项,如选择性确认、时间戳等。
  17. 数据(可选):TCP数据。

UDP协议

UDP(用户数据报协议)是一种无连接的传输层协议,用于在计算机网络上以无差错的方式传输数据。与TCP相比,UDP更加轻量级,不提供可靠性、流量控制和拥塞控制等特性,但具有较低的开销和更快的传输速度。UDP适用于那些对实时性要求较高、数据丢失可接受或自身实现可靠性控制的应用程序。

UDP提供了一种简单而高效的数据传输机制,常用于实时音视频传输、DNS查询、SNMP等应用,以及在网络中与传输可靠性不是首要关注的场景。但需要注意的是,由于UDP的不可靠性和无连接性,应用程序需要自行处理数据的可靠性和错误恢复。

特点:

  1. 无连接性:UDP在通信之前不需要建立连接,发送方直接将数据报发送到目标IP地址和端口号,接收方独立接收每个数据报,没有握手和关闭的过程。
  2. 面向报文:UDP将应用程序传递给它的数据作为报文发送,每个报文都是独立的单元,不会合并或拆分。
  3. 不可靠性:UDP不提供可靠性保证,数据报可能会丢失、重复、乱序或损坏,因此不适合对数据传输的可靠性有严格要求的应用。
  4. 低开销:由于没有连接建立和维护的开销,以及较小的报文头部,UDP的开销相对较低。
  5. 支持多播和广播:UDP可以将数据报发送到多个目标主机,实现多播和广播的功能。

UDP协议工作原理

UDP(用户数据报协议)是一种无连接的传输层协议,工作原理如下:

  1. 应用程序数据封装:应用程序将要发送的数据传递给UDP协议。
  2. 数据报封装:UDP协议将应用程序的数据封装成UDP数据报,添加UDP头部信息。
    • UDP头部包括源端口号和目的端口号,用于标识数据报的发送方和接收方。
    • UDP头部还包括数据报的长度和校验和字段,用于检验数据报的完整性。
  3. 数据报发送:UDP将封装好的UDP数据报发送到网络层(通常是IP协议)。
  4. IP路由:网络层根据目标IP地址将UDP数据报进行路由选择,选择合适的路径传输到目标主机。
  5. 数据报接收:目标主机的网络层接收到UDP数据报,并将其传递给UDP协议。
  6. 数据报解封:UDP协议解封接收到的UDP数据报,提取出应用程序的数据。
  7. 数据传递:UDP将提取出的数据传递给目标应用程序。

UDP的工作原理可以总结为简单的封装和传递过程,没有连接的建立和维护过程,也没有拥塞控制和可靠性保证的机制。UDP数据报的交付是不可靠的,可能会丢失或到达顺序错乱。因此,应用程序需要自行处理数据的可靠性和错误恢复。UDP协议仅提供了基本的数据报封装和传输功能,更加轻量级且具有较低的开销和更快的传输速度。由于不需要建立连接和维护状态,UDP适用于对实时性要求较高、数据丢失可接受或自身实现可靠性控制的应用程序,如音视频传输、实时游戏和实时通信等场景。

UDP报文格式

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           源端口号(16位)          |        目的端口号(16位)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           长度(16位)             |        校验和(16位)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             数据(可选)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  • 源端口号(16位):发送方的端口号。
  • 目的端口号(16位):接收方的端口号。
  • 长度(16位):UDP报文的总长度,包括头部和数据部分。
  • 校验和(16位):用于校验UDP报文的完整性。
  • 数据(可选):应用程序传递给UDP的数据。
  1. 端口号是 16 位的非负整数,它的范围是0 - 65535 之间,这个范围会分为三种不同的端口号段,由端口号是由互联网分配号码管理局(IANA)进行分配
  2. 知名/标准端口号,它的范围是 0 - 1023。在Unix的操作系统上,使用这些端口之一需要超级用户操作权限
  3. 注册端口号,范围是 1024 - 49151。是用于IANA 注册服务的注册端口。
  4. 私有端口号,范围是 49152 - 6553。未正式指定用于任何特定服务,可用于任何目的。这些端口也可以用作临时端口,在主机上运行的软件可以使用这些端口根据需要动态创建通信终结点。
  5. 端口的作用,简单说就是为了区分不同应用程序的,当电脑接收到一个数据报,将根据不同的端口将数据送给不同的应用程序。所以上面说到互联网分配号码管理局(IANA)分配。

UDP校验

UDP在报文中使用校验和字段来验证数据的完整性。UDP校验和是一种简单的错误检测机制,用于检测数据在传输过程中是否发生了错误或损坏。

UDP校验和的计算过程如下:

  1. 将UDP报文的源端口号和目的端口号字段设为0。
  2. 将UDP报文的长度字段设为UDP报文长度的字节数。
  3. 将UDP报文的校验和字段设为0。
  4. 将UDP报文以16位字为单位划分为多个片段(如果报文长度不是偶数,最后一个字节用0填充)。
  5. 对所有片段进行16位二进制反码求和,即将所有片段的二进制形式按位求和,得到一个累加和。
  6. 将累加和的高位16位和低位16位相加,如果有进位则回卷到低位。
  7. 将结果按位取反得到最终的校验和值。
  8. 将校验和值填入UDP报文的校验和字段。

接收方收到UDP报文后,会重新计算校验和,并与接收到的校验和字段进行比较。如果两者相等,则认为数据没有发生错误或损坏;如果不相等,则说明数据可能在传输过程中发生了错误或损坏。

UDP校验和虽然可以检测数据的错误或损坏,但并不能提供可靠性保证,因为校验和只是一种简单的错误检测机制,无法纠正错误或进行重传。因此,在对数据传输的可靠性有较高要求的应用场景中,通常需要使用TCP等提供可靠性保证的协议。

UDP校验和在UDP协议中扮演着重要的作用,具有以下几个用途

  1. 错误检测:UDP校验和用于检测在数据传输过程中是否发生了错误或数据损坏。发送方在发送UDP数据报时计算校验和,并将其添加到报文头部。接收方在接收UDP数据报时重新计算校验和,并将其与接收到的校验和进行比较。如果两者不匹配,说明数据在传输过程中可能发生了错误或损坏。

  2. 数据完整性验证:UDP校验和可以验证数据报是否完整地到达目的地。接收方计算校验和时,会包括整个UDP数据报的内容(包括头部和数据),如果数据报中的任何一位发生了变化,计算出的校验和将与接收到的校验和不匹配。

  3. 数据传输的可靠性控制:虽然UDP本身不提供可靠性保证,但UDP校验和可以作为一种简单的可靠性控制机制。发送方可以通过计算校验和来确保数据在传输过程中没有发生明显的错误或损坏。尽管校验和无法纠正错误或重传数据,但它可以帮助排除一些常见的传输错误。

需要注意的是,UDP校验和并不能解决所有的数据传输问题,它只能提供一种简单的错误检测机制。对于对数据传输可靠性有严格要求的应用,建议使用提供可靠性保证的协议,如TCP。但对于那些对实时性要求较高、数据丢失可接受或自身实现可靠性控制的应用,UDP校验和是一种简单且有效的机制来检测数据的错误和损坏。

HTTP协议

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于在计算机网络上传输超文本文档的协议。它是Web通信的基础,用于客户端和服务器之间的通信。

HTTP使用客户端-服务器模型。客户端发送HTTP请求到服务器,服务器则返回HTTP响应。请求和响应都包含了一组头部信息(HTTP headers),以及可选的消息体(message body)。

HTTP是一个无状态协议,这意味着服务器不会在两个请求之间保持任何关于客户端的状态信息。每个请求都是独立的,服务器不会知道之前的请求是什么。这样的无状态设计使得HTTP协议在处理大量请求时更加简单和可扩展。

HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来标识和定位资源。常见的URI形式是URL(Uniform Resource Locator)。

HTTP协议有多个版本,最早的版本是HTTP/0.9,随后发展到HTTP/1.0和HTTP/1.1。HTTP/1.1是目前最常用的版本,但在2015年,HTTP/2被发布,并提供了更高的性能和效率。HTTP/3则是在传输层使用QUIC协议的基础上进行了重新设计,以进一步提升性能。

HTTP协议定义了不同类型的请求方法,如GET、POST、PUT、DELETE等。每种方法都有不同的语义和用途,允许客户端和服务器进行不同类型的交互。

HTTP还支持状态码,用于指示请求的处理状态。常见的状态码有200表示成功,404表示未找到资源,500表示服务器内部错误等。

总之,HTTP协议是一种用于在客户端和服务器之间传输数据的协议,广泛应用于Web开发和互联网通信中。它定义了请求和响应的格式、头部信息、状态码等,为Web应用程序提供了基本的通信机制。

HTTP协议具有以下几个特点:

  1. 简单和可读性强:HTTP协议的语法相对简单,易于理解和实现。它使用可读的文本格式,方便开发者调试和排错,也方便与其他系统进行交互。

  2. 无状态:HTTP是一种无状态协议,服务器不会在请求之间保持任何关于客户端的状态信息。每个请求都是独立的,服务器不会知道之前的请求是什么。这简化了服务器的设计和实现,使得HTTP协议更具可扩展性。

  3. 基于请求-响应模型:HTTP协议使用请求-响应模型,客户端发送HTTP请求到服务器,服务器处理请求并发送HTTP响应给客户端。这种模型简单明了,适用于大多数Web应用场景。

  4. 支持灵活的内容格式:HTTP协议支持多种内容格式,如HTML、XML、JSON等。这使得HTTP协议适用于传输各种类型的数据,从简单的文本到复杂的媒体文件都可以处理。

  5. 支持缓存:HTTP协议通过使用缓存机制来提高性能和减轻服务器负载。客户端和服务器可以使用各种缓存策略,如使用缓存标识符(ETag)和过期时间(Expires),以减少重复请求和传输的数据量。

  6. 可扩展性:HTTP协议具有良好的可扩展性,允许通过添加新的头部字段或定义新的请求方法来扩展功能。这使得HTTP协议能够适应不断变化的需求和技术发展。

  7. 支持连接管道化:HTTP/1.1引入了连接管道化(HTTP Pipelining)机制,允许客户端在同一个连接上发送多个请求,而无需等待每个请求的响应。这可以减少请求的延迟,提高性能。

  8. 安全性:HTTP协议本身不提供加密和安全性保护。但可以通过在HTTP上加入安全层(HTTPS)来提供加密传输和身份验证的功能,确保数据的安全性。

HTTP工作原理

HTTP协议的工作原理可以概括为以下几个步骤:

  1. 客户端发起请求:客户端(如Web浏览器)向服务器发送HTTP请求。请求包括请求行、请求头部和可选的消息体。请求行包含请求方法(如GET、POST)、请求的URI(统一资源标识符)以及HTTP协议版本。

  2. 服务器处理请求:服务器接收到客户端的请求后,根据请求行中的方法和URI进行处理。服务器可能需要读取文件、执行脚本、查询数据库等,以生成相应的响应数据。

  3. 服务器发送响应:服务器生成HTTP响应,包括响应头部和可选的消息体。响应头部包含状态码(如200表示成功,404表示未找到资源)和其他相关信息。消息体则包含实际的响应数据,如HTML文档、图像文件等。

  4. 客户端接收响应:客户端接收到服务器发送的HTTP响应。它解析响应头部,以获取状态码和其他元数据。然后根据需要,从消息体中提取所需的数据进行显示或处理。

需要注意的是,HTTP是基于TCP/IP协议栈的应用层协议。在建立HTTP连接之前,客户端需要先与服务器建立TCP连接。这通常是通过三次握手来完成的。一旦TCP连接建立,客户端和服务器之间就可以进行HTTP通信。

此外,HTTP是一种无状态协议,服务器不会保留关于客户端的任何状态信息。这意味着每个请求都是独立的,服务器无法知道之前的请求是什么。为了维护会话状态,Web应用程序通常使用会话机制(如使用Cookie或URL重写)。

总之,HTTP协议通过请求-响应模型实现客户端和服务器之间的通信。HTTP客户首先请求与HTTP服务器(80端口)建立TCP连接,然后HTTP客户向HTTP服务器发送HTTP请求报文,HTTP服务器向客户发送HTTP响应报文。

HTTP报文格式

HTTP报文由请求报文(Request Message)和响应报文(Response Message)两种类型组成。它们具有相似的结构,包括起始行、头部字段和可选的消息体。

  1. 请求报文格式(Request Message Format):

    <Method> <Request-URI> <HTTP-Version>
    <Headers>
    
    <Message Body>
    
    • Method(方法):表示请求的方法,常见的方法有GET、POST、PUT、DELETE等。
    • Request-URI(请求的统一资源标识符):表示请求的目标资源的路径。
    • HTTP-Version(HTTP协议版本):表示使用的HTTP协议版本,如HTTP/1.1。
    • Headers(头部字段):以键值对形式表示的请求的附加信息,如Host、Content-Type等。
    • Message Body(消息体):可选项,包含请求的数据,如表单数据、JSON等。
  2. 响应报文格式(Response Message Format):

    <HTTP-Version> <Status-Code> <Reason-Phrase>
    <Headers>
    
    <Message Body>
    
    • HTTP-Version(HTTP协议版本):表示使用的HTTP协议版本,如HTTP/1.1。
    • Status-Code(状态码):表示服务器对请求的处理结果,如200表示成功,404表示未找到资源。
    • Reason-Phrase(状态码的描述):对状态码的简要描述。
    • Headers(头部字段):以键值对形式表示的响应的附加信息,如Content-Type、Content-Length等。
    • Message Body(消息体):可选项,包含响应的数据,如HTML文档、JSON等。

HTTP报文中的起始行、头部字段和消息体之间使用空行(CRLF)进行分隔。起始行和头部字段都以键值对的形式表示,用冒号(:)分隔键和值。

以下是一个示例的HTTP请求报文:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

以下是一个示例的HTTP响应报文:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<!DOCTYPE html>
<html>
<head>
  <title>Example</title>
</head>
<body>
  <h1>Hello, World!</h1>
</body>
</html>

注意,HTTP报文是纯文本格式,使用ASCII编码进行传输。报文中的特殊字符和非ASCII字符会进行编码和转义,以确保数据的正确传输和解析。

总之,HTTP报文由起始行、头部字段和消息体组成,格式化规范化地表示了HTTP请求和响应的信息和数据。

HTTP状态码

HTTP协议定义了一组状态码(Status Codes),用于表示服务器对请求的处理结果和状态。每个状态码由三位数字组成,并分为五个类别:

  1. 1xx(Informational,信息性状态码):表示请求已被接收,服务器正在处理或需要进一步操作。

    • 100 Continue:继续。表示服务器已收到部分请求,并要求客户端继续发送剩余部分。
  2. 2xx(Success,成功状态码):表示请求已成功被服务器接收、理解和处理。

    • 200 OK:请求成功。表示服务器成功处理了请求。

    • 201 Created:已创建。表示服务器成功创建了资源。

    • 204 No Content:无内容。表示服务器成功处理了请求,但没有返回任何内容。

  3. 3xx(Redirection,重定向状态码):表示需要客户端采取进一步的操作才能完成请求。

    • 301 Moved Permanently:永久重定向。表示请求的资源已被永久移动到新的位置。

    • 302 Found:临时重定向。表示请求的资源临时移动到了新的位置。

    • 304 Not Modified:未修改。表示客户端缓存的资源仍有效,可以直接使用。

  4. 4xx(Client Error,客户端错误状态码):表示客户端的请求有误。

    • 400 Bad Request:请求错误。表示服务器无法理解客户端的请求。

    • 401 Unauthorized:未授权。表示需要进行身份验证才能访问资源。

    • 404 Not Found:未找到。表示请求的资源不存在。

  5. 5xx(Server Error,服务器错误状态码):表示服务器在处理请求时发生了错误。

    • 500 Internal Server Error:服务器内部错误。表示服务器在处理请求时发生了意外的错误。

    • 503 Service Unavailable:服务不可用。表示服务器暂时无法处理请求,通常是由于过载或维护。

这些状态码提供了有关请求处理结果的信息,客户端和开发者可以根据状态码来判断请求的成功与否,以及采取适当的处理措施。

Cookie机制

Cookie是一种在客户端(通常是Web浏览器)和服务器之间传递数据的机制。它是由服务器发送给客户端的一个小型文本文件,存储在客户端的浏览器中。每次浏览器向同一服务器发送请求时,它会将相应的Cookie信息包含在请求中,以便服务器能够识别和跟踪客户端。

Cookie具有以下几个作用:

  1. 会话管理:Cookie用于在用户会话之间存储会话信息,例如用户的登录状态。通过在Cookie中存储会话标识符(session ID),服务器可以识别和关联来自同一用户的多个请求,从而实现会话管理功能。

  2. 跟踪和个性化:通过在Cookie中存储特定的用户偏好和配置信息,网站可以根据用户的兴趣和行为提供个性化的体验。例如,网站可以根据用户的浏览历史向其推荐相关内容。

  3. 购物车和电子商务:Cookie可以用于存储用户在购物网站中添加到购物车的商品信息。这样,即使用户关闭浏览器或离开网站,他们返回时仍然可以找到之前选择的商品。

  4. 跨站点跟踪:Cookie可以用于在不同的网站之间进行跟踪。广告公司和分析服务提供商可以使用Cookie来收集用户的浏览行为和兴趣,并为其提供定制的广告和内容。

  5. 安全性:通过在Cookie中设置安全标志和加密技术,可以增加对用户数据的保护和安全性。例如,通过将Cookie标记为仅在安全的HTTPS连接中传输,可以防止信息被中间人攻击者窃取或篡改。

需要注意的是,Cookie是存储在客户端浏览器中的文本文件,可以被客户端修改和删除。因此,敏感信息应该避免存储在Cookie中,并且Cookie的使用应遵循隐私政策和相关法规的规定,确保用户数据的合法性和安全性。

SMTP协议

SMTP(Simple Mail Transfer Protocol)是一种用于电子邮件传输的协议。它是在互联网上发送和接收电子邮件的标准协议之一。SMTP协议负责将电子邮件从发送方的邮件服务器传送到接收方的邮件服务器。

以下是SMTP协议的一些特点:

  1. 简单性:SMTP协议设计简单,易于实现和理解。

  2. 可靠性:SMTP使用可靠的传输机制来确保邮件的可靠传输。如果一个邮件服务器无法直接将邮件传送给接收方的邮件服务器,它会尝试在一定时间内重试,直到成功或超过最大尝试次数为止。

  3. 文本协议:SMTP协议使用文本格式进行通信,以便人们可以读取和理解通信内容。它使用7位ASCII字符集,并且所有命令和响应都以文本行的形式发送。

SMTP协议的工作原理

SMTP的工作流程如下:

  1. 连接建立阶段:

    • 客户端(邮件发送方)通过向目标邮件服务器的端口25(默认SMTP端口)发起TCP连接来与服务器建立连接。
    • 服务器响应连接请求,建立与客户端的连接。
  2. 会话开始阶段:

    • 客户端发送问候消息(HELO或EHLO命令)给服务器,以表示自己的身份并开始会话。
    • 服务器响应问候消息,确认连接建立成功。
  3. 发送邮件阶段:

    • 客户端发送发件人信息给服务器,使用MAIL FROM命令指定邮件的发送者。
    • 服务器响应确认,并检查发件人的有效性。
    • 客户端发送收件人信息给服务器,使用RCPT TO命令指定邮件的接收者。
    • 服务器响应确认,并检查收件人的有效性。
    • 客户端可以继续发送更多的RCPT TO命令,以指定多个接收者。
    • 客户端发送DATA命令,表示开始传输邮件内容。
  4. 传输邮件内容阶段:

    • 服务器响应确认,客户端可以开始传输邮件内容。
    • 客户端将邮件内容作为文本传输给服务器。
    • 邮件内容包括邮件头和邮件体,使用特定的格式进行组织(如RFC 5322标准)。
    • 客户端将邮件内容分成适当大小的数据块,并使用特定的命令或标记表示每个数据块的开始和结束。
    • 客户端传输完整的邮件内容后,发送"."命令表示结束邮件内容的传输。
  5. 会话结束阶段:

    • 服务器接收完邮件内容后,响应确认消息。
    • 客户端发送QUIT命令给服务器,表示会话结束。
    • 服务器响应确认,关闭与客户端的连接。

在整个工作流程中,客户端和服务器之间使用基于文本的命令和响应模式进行通信。客户端发送命令给服务器,服务器接收并解析这些命令,并根据命令执行相应的操作。服务器发送响应给客户端,客户端解析响应并根据响应采取相应的行动。

MIME协议

MIME(Multipurpose Internet Mail Extensions)协议是一种扩展邮件传输协议的标准,用于处理非纯文本的电子邮件内容。它通过在电子邮件中添加附加的头部字段和编码规则,使电子邮件能够传输和呈现多媒体、二进制文件和其他非文本数据。

以下是MIME协议的一些特点:

  1. 扩展性:MIME协议扩展了SMTP协议,允许在邮件中传输和表示各种类型的数据,包括文本、图像、音频、视频等。
  2. 多部分消息:MIME协议支持将邮件内容划分为多个部分,每个部分可以有不同的内容类型和编码方式。这使得一个邮件可以包含多个附件或内嵌资源。
  3. 内容类型和编码:MIME使用内容类型(Content-Type)头部字段来描述邮件的内容类型,如文本、图像、音频等。它还使用内容传输编码(Content-Transfer-Encoding)头部字段来指定邮件内容的编码方式,如Base64编码、Quoted-Printable编码等。
  4. 多语言支持:MIME协议支持在邮件中传输和表示多种语言的文本,使用字符集编码(Charset Encoding)来确保多语言文本的正确传输和显示。

MIME协议的主要作用是扩展电子邮件的功能,使其能够传输和呈现各种类型的数据。它允许用户在电子邮件中包含图像、音频、视频、附件等非文本内容,从而丰富了邮件的表达能力。MIME协议在电子商务、多媒体通信、电子邮件营销等领域得到广泛应用。

MIME协议工作原理

MIME协议的工作原理如下:

  1. 邮件发送方使用MIME协议对邮件进行编码:
    • 发送方将邮件内容划分为多个部分,每个部分包含一个内容类型和相应的编码方式。
    • 对于非纯文本内容,如图像、音频等,内容被编码为相应的编码格式,如Base64编码。
    • 发送方生成MIME头部字段,包含内容类型、编码方式、字符集等信息。
  2. 邮件传输:
    • SMTP协议负责将包含MIME头部字段和编码后的邮件内容从发送方传输到接收方的邮件服务器。
  3. 邮件接收方处理邮件:
    • 接收方的邮件服务器接收到邮件后,解析MIME头部字段,识别邮件的内容类型和编码方式。
    • 邮件服务器根据内容类型和编码方式进行解码和处理,将非纯文本内容还原为原始的数据格式。
    • 邮件服务器将解码后的邮件内容存储或转发给接收方的邮件客户端。
  4. 邮件客户端处理邮件:
    • 邮件客户端解析MIME头部字段,根据内容类型和编码方式对邮件内容进行解码和呈现。
    • 客户端可以根据内容类型选择适当的方式来显示邮件内容,如显示图像、播放音频、播放视频等。
    • 如果邮件包含附件,客户端可以下载和保存附件。

POP3协议

作为一个资深网络工程师,我很高兴为您解释POP3(Post Office Protocol version 3)协议的概念、作用、特点和工作原理。

POP3是一种用于电子邮件接收的协议,它允许用户从邮件服务器上下载电子邮件到本地计算机或设备。下面是关于POP3协议的详细说明:

作用:

  • POP3协议的主要作用是允许用户通过邮件客户端访问邮件服务器,下载邮件到本地设备,以便离线查看和管理电子邮件。

特点:

  1. 简单性:POP3协议相对简单,易于实现和使用。
  2. 单向传输:POP3是一种单向传输协议,只支持从服务器下载邮件到本地设备,而不支持在服务器上进行电子邮件的管理或同步。
  3. 离线访问:POP3允许用户离线访问和管理邮件,一旦邮件下载到本地设备,用户不再依赖于与邮件服务器的实时连接。
  4. 存储机制:POP3通常使用邮件服务器上的存储系统来存储用户的电子邮件。一般情况下,邮件服务器上的邮件会在下载后删除,但也可以配置为保留在服务器上。
  5. 简单身份验证:POP3使用简单的身份验证机制,通常是基于用户名和密码的验证,以确保只有授权用户能够访问和下载邮件。

POP3协议工作原理

POP3(Post Office Protocol version 3)协议的工作流程如下:

  1. 建立连接:
    • 邮件客户端(如Outlook)通过向目标邮件服务器的端口110(默认POP3端口)发起TCP连接来与服务器建立连接。
  2. 用户身份验证:
    • 客户端发送用户名和密码以进行身份验证,以证明用户的合法性。
    • 服务器验证用户名和密码的正确性,并响应验证结果。
  3. 邮件检索:
    • 身份验证成功后,客户端发送命令(如LIST)获取邮件列表,服务器响应并返回邮件的数量和大小信息。
    • 客户端可以选择下载全部或部分邮件,发送相应的命令(如RETR)请求服务器将特定邮件传输给客户端。
  4. 邮件传输:
    • 服务器将请求的邮件通过连接传输给客户端。
    • 客户端接收邮件,并将其保存到本地设备上的邮件客户端。
  5. 邮件删除(可选):
    • 默认情况下,服务器在邮件下载后会将其从服务器上删除。
    • 客户端可以选择发送删除命令(如DELE)将邮件从服务器上标记为删除,以后在删除阶段进行实际删除。
  6. 断开连接:
    • 客户端发送QUIT命令关闭与服务器的连接。
    • 服务器响应确认,断开与客户端的连接。

需要注意的是,POP3协议是一种简单的邮件接收协议,它的主要功能是将邮件从服务器下载到本地设备。在POP3协议中,邮件通常是单向流动的,从服务器到客户端。如果客户端在下载邮件后将其删除(通过DELE命令标记),那么邮件将在服务器上被删除。

此外,由于POP3协议是一种离线访问协议,它不保留邮件的状态或同步信息。因此,如果您在多个设备上使用POP3访问同一邮箱,每个设备上的邮件状态(如已读、未读)可能会不同步。

IMAP协议

IMAP是一种用于电子邮件访问的协议,它允许用户在邮件服务器上对电子邮件进行远程管理和操作,而无需将邮件下载到本地设备。下面是关于IMAP协议的详细说明:

作用:

  • IMAP协议的主要作用是允许用户通过邮件客户端远程访问和管理邮件服务器上的电子邮件。用户可以查看、搜索、创建、删除、移动和标记邮件等操作,而无需将邮件下载到本地设备。

特点:

  1. 远程管理:IMAP协议使用户能够远程管理邮件服务器上的邮件,而不仅仅是下载到本地设备。这允许用户在不同设备上保持邮件状态和同步信息。
  2. 多文件夹支持:IMAP协议支持邮件服务器上的文件夹(目录)结构,允许用户在不同文件夹中组织和管理邮件。用户可以创建、删除、重命名和移动文件夹,以满足个人需求。
  3. 邮件状态同步:IMAP协议可以保持客户端和服务器之间的邮件状态同步。例如,标记为已读或未读、已回复或未回复的邮件状态将在客户端和服务器之间保持一致。
  4. 邮件搜索和筛选:IMAP协议支持强大的搜索和筛选功能,允许用户根据条件和关键字搜索邮件,并在服务器上进行快速筛选和排序。
  5. 部分邮件下载:IMAP协议允许客户端选择只下载邮件的部分内容(如邮件头部),而不是完整的邮件内容。这可以节省带宽和存储空间。

IMAP工作原理

IMAP(Internet Message Access Protocol)协议的工作流程如下:

  1. 建立连接:

    • 邮件客户端(如Outlook)通过向目标邮件服务器的端口143(默认IMAP端口)发起TCP连接来与服务器建立连接。
  2. 用户身份验证:

    • 客户端发送用户名和密码进行身份验证,以证明用户的合法性。
    • 服务器验证用户名和密码的正确性,并响应验证结果。
  3. 邮件邮箱选择:

    • 身份验证成功后,客户端发送命令(如SELECT)选择要操作的邮箱(如INBOX)。
    • 服务器响应并返回选定邮箱的信息,包括邮件数量、文件夹结构等。
  4. 邮件检索:

    • 客户端发送命令(如FETCH)请求服务器检索特定邮件的相关信息,如标志、标题、发件人、收件人等。
    • 服务器响应并返回请求的邮件信息。
  5. 邮件操作:

    • 客户端可以发送命令(如STORE)对邮件进行操作,如标记为已读、未读、删除、移动到其他文件夹等。
    • 服务器接收并执行相应的操作,更新邮件的状态和位置。
  6. 邮件搜索和筛选:

    • 客户端可以发送命令(如SEARCH)根据条件和关键字在服务器上搜索邮件。
    • 服务器响应并返回符合条件的邮件列表。
  7. 文件夹管理:

    • 客户端可以发送命令(如CREATE、DELETE、RENAME)对文件夹进行创建、删除和重命名操作。
    • 服务器接收并执行相应的操作,更新文件夹结构。
  8. 断开连接:

    • 客户端发送LOGOUT命令关闭与服务器的连接。
    • 服务器响应确认,断开与客户端的连接。

需要注意的是,IMAP协议是一种远程邮件访问协议,它允许用户在邮件服务器上进行多种操作,如邮件检索、操作、搜索和文件夹管理。IMAP协议通过保持邮件的状态和组织结构在客户端和服务器之间进行同步,适用于需要在多个设备上进行邮件访问和管理的用户。

IMAP协议还支持SSL/TLS加密,通过IMAPS(IMAP over SSL/TLS)协议使用端口993进行安全连接。这提供了加密的邮件传输,以保护用户的隐私和安全。

总结:IMAP协议的工作流程涉及建立连接、用户身份验证、邮件邮箱选择、邮件检索、邮件操作、邮件搜索和筛选、文件夹管理和断开连接等阶段。它的目的是允许用户远程访问和管理邮件服务器上的电子邮件,并在客户端和服务器之间保持邮件的状态和组织结构的同步。

FTP协议

FTP(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的协议。它提供了一种标准的方式,使用户能够将文件从一个计算机传输到另一个计算机。下面是关于FTP协议的详细说明:

作用:

  • FTP协议的主要作用是允许用户在计算机网络上进行文件传输。它允许用户从一个计算机(称为FTP客户端)上传文件到另一个计算机(称为FTP服务器),或者从FTP服务器下载文件到本地计算机。

特点:

  1. 灵活性:FTP协议支持在不同计算机之间进行文件传输,无论是在本地网络内部还是在Internet上。
  2. 访问控制:FTP协议允许服务器管理员配置访问权限,以控制用户对文件系统的访问和操作。
  3. 支持多种操作:FTP协议支持多种操作,如文件上传、文件下载、文件删除、文件重命名、文件列表查看等。
  4. 传输模式:FTP协议支持两种传输模式:ASCII模式和二进制模式。ASCII模式用于传输文本文件,而二进制模式用于传输二进制文件,如图像、音频和视频等。
  5. 断点续传:FTP协议支持断点续传功能,允许在传输过程中中断连接,然后在之后恢复传输而无需重新传输整个文件。

FTP协议工作流程

工作流程:

  1. 建立连接:
    • 客户端通过向服务器的端口21(默认FTP端口)发起TCP连接来与服务器建立连接。
  2. 用户身份验证:
    • 客户端发送用户名和密码进行身份验证,以证明用户的合法性。
    • 服务器验证用户名和密码的正确性,并响应验证结果。
  3. 文件传输:
    • 身份验证成功后,客户端可以发送命令(如PUT、GET)来上传或下载文件。
    • 客户端指定文件的路径、名称和传输模式(ASCII或二进制)。
    • 服务器接收命令并执行相应的文件传输操作,将文件从客户端传输到服务器或从服务器传输到客户端。
  4. 文件操作:
    • 客户端可以发送命令(如DELETE、RENAME)对文件进行删除、重命名等操作。
    • 服务器接收并执行相应的文件操作。
  5. 断开连接:
    • 客户端发送QUIT命令关闭与服务器的连接。
    • 服务器响应确认,断开与客户端的连接。

需要注意的是,FTP协议在默认设置下是不加密的,传输的数据和凭据都以明文形式传输。为了提高安全性,可以使用加密的FTP协议(如FTPS)或通过使用SSH加密通道的SFTP(SSH File Transfer Protocol)协议来进行安全的文件传输。

无线与移动网络

无线网络基本组成

  1. 无线主机:主机是运行应用程序的端系统设备。可以是智能手机或者桌面计算机等。
  2. 无线链路:主机通过无线通信链路(ireles comunmcaionn lnk)连接到一个基站或者另一台无线主机,不同的无线链路技术具有不同的传输速率和不同的传输距离
  3. 基站:基站(hase satio)是无线网络基础设施的一个关键部分。基站在有线网络中没有明确的对应设备,负责向与之相关联的无线主机发送数据和接收主机发送的数据。基站通常负责协调与之相关联的多个无线主机的传输。所谓一台无线主机与某基站“相关联”,是指该主机位于该基站的无线通信覆盖范围内,并且使用该基站中继其与其他网络或主机之 间的数据传输。蜂窝网络中的蜂窝塔(cell tower) 和IEEE 802.11 无线局域网中的接入点 (Access Point, AP)都是基站的例子。
  4. 网络基础设施:通常是大规模有线网络,如Intermnet、公司网络或电话网络等。

无线链路将位于网络边缘的主机连接到基站,基站与更大的网络基础设施相连,因此基站在无线主机和网络基础设施之间起着链路层中继作用。

无线主机与基站关联,并通过基站实现通信中继的无线网络通常被称为基础设施模式(infrastructure mode),因为所有传统的网络服务(如地址分配和路由选择)都由网络通过基站向关联的主机提供。

无线主机不通过基站(即没有基站),直接与另一个无线主机直接通信的无线网络模式称为自组织网络(Ad Hoc Network),或称为特定网络,也称为Ad Hoc网络。自组织网络没有基站,无线主机也不与网络基础设施相连,因此,主机 本身必须提供诸如路由选择、地址分配等服务。

在无线网络中,如果支持无线主机移动,则当一台移动主机移动超出一个基站的覆盖范围,而到达另一个基站的覆盖范围后,它将改变其接入到网络基础设施的基站,这一过程称切换(hand off)。

无线链路与无线网络特性

无线网络与有线网络最主要的区别是使用了无线链路而无线链路的独有特性,在很大程度上决定了无线网络的特性。不同的无线链路技术具有不同的传输速率和不同的传输距离。较为流行的无线链路标准的两种主要特性,即覆盖区域链路速率

无线网络与有线网络的区别

有线网络与无线网络的重要区别主要在数据链路层和物理层。无线链路有别于有线链路的主要表现在以下方面:

  1. 信号强度的衰减(rding):电磁波在穿过物体(如墙壁)时强度将减弱。即使在自由空间中,信号也会衰减,这使得信号强度随着发送方和接收方距离的增加而减弱,有时称其为路径损耗(path loss)
  2. 干扰:在同一个频段发送信号的电波源将相互干扰。例如,2.4 GHz无线电话和 802.11无线局域网在相同的频段中传输。因此802.116 无线局域网用户若同时利用2.4 GHz无线电话通信,将会导致网络和电话都不会工作得特别好。除了来自发送源的干扰,环境中的电磁噪声(如附近的电动机、微波)也能形成干扰。
  3. 多径传播:多径传播使得接收方收到的信号变得模糊。位于发送方和接收方之间的移动物体还会导致多径效应随时间而改变。

无线链路与有线链路之间的差异并非仅仅只有较高的、时变的误比特率这一项。在有线广播链路中,所有结点能够接收到所有其他结点在物理链路中传输的信号,而在无线链路中,情况并非如此简单。假设站点A正在向站点B发送数据,站点C也在向站点B发送数据。由于站点A和站点C之间的物理环境阻挡(例如,一座大山或者一座建筑),导致站点A和站点C彼此互相检测不到对方发送的信号,导致站点A和站点C同时向站点B发送数据时,发生碰撞,站点B无法正确接收任何一方的数据,这就是所谓的 隐藏终端问题(hidden terminal problem)。

移动网络基本原理

用户的移动性,移动节点的地址始终保持不变,可用的有线基础设施的支持。

在一个网络环境中,一个移动结点的永久居所被称为归属网络家网,在归属网络中代表移动结点执行移动管理功能的实体叫做归属代理家代理

移动结点当前所在的非归属网络称为外部网络被访网络,在外部网络中帮助移动结点做移动管理功能的实体称为外部代理,简称外代理

寻址

为了使用户移动性对网络应用透明,希望移动结点在从一一个网络移动到另一个网络时保持其地址不变。当某移动结点位于一个外部网络时,所有指向此结点永久地址(parmanentaddress)的流量需要导向外部网络。

移动网络实现移动结点寻址的基本策略

将外部代理放置在外部网络的边缘路由器上,外部代理的作用是为移动节点创建一个转交地址(COA),该COA的网络部分与外部网络的网络部分相同,因此一个移动节点可以关联2个地址,即永久地址和COA地址。

转交地址:COA,又称为外部地址

移动节点路由选择

间接路由选择
间接路由选择对通信方来说,通信过程透明,但存在三角路由问题,很多移动网络采用间接路由策略。

下面列出支持移动性所需要的网络层新功能,对间接路由选择进行小结。

  1. 移动结点到外部代理的协议。当移动结点连接到外部网络时,它向外部代理注册。 类似地,当一个移动结点离开该外部网络时,它将向外部代理取消注册。
  2. 外部代理到归属代理的注册协议。外部代理将向归属代理注册移动结点的COA。当某移动结点离开其网络时,外部代理不需要显式地向归属代理注销COA,因为当移动结点移动到一个新网络时,随之而来就要注册一个新的COA,这将完成源COA的注销。
  3. 归属代理数据报封装协议。将通信者的原始数据报封装在一个目的地址为COA的数据报内,并转发出去。
  4. 外部代理拆封协议。从封装好的数据报中取出通信者的原始数据报,然后再将该原始数据报转发给移动结点。

直接路由选择

直接路由可以避免三角路由问题,但是是以增加复杂性为代价的,对通信方不透明。

移动结点在移动过程中会用到两个地址,一个是永久地址,一个是转交地址。归属代理和外代理实现移动结点的移动跟踪管理。

无线局域网IEEE 802.11

4个比较流行的无线局域网IEEE 802.11标准

标准 频率范围/GHz 数据率 物理层
IEEE 802.11b 2.4 最高为11Mbit/s 扩频
IEEE 802.11a 5 最高为54Mbit/s OFDM
IEEE 802.11g 2.4 最高为54Mbit/s OFDM
IEEE 802.11n 2.4/5 最高为600Mbit/s MIMO/OFDM

共同特征:

  1. 都使用相同的介质访问控制协议CSMA/CA
  2. 链路层帧使用相同的帧格式
  3. 都具有降低传输速率以传输更远距离的能力
  4. 都支持“基础设施模式”和“自组织模式”两种模式

IEEE 802.11体系结构

IEEE 802.11体系结构的基本构件由两部分组成:

  1. 基站(base station):又称为接入点(Access Point)AP
  2. 基本服务集Basic Service Set,BSS:一个BSS包含一个或多个无线站点和一个接入点的中央基站。

在一个典型的家庭网络中,有一个AP和一台将该BSS连接到Internet中的路由器。配置AP的无线局域网经常被称作基础设施无线局域网

在IEEE 802.11标准中,每个无线站点在能够发送或者接收数据之前,必须与一个AP相关联。当网络管理员安装一个AP时,首先为该AP分配一个单字或双字的服务集标识符SSID,然后还必须为该AP分配一个信道号。

IEEE 802.11MAC协议(CSMA/CA)

IEEE 802.11MAC协议又称带碰撞避免的CSMA。由于无线信道相比有线信道具有较高的误比特率,IEEE 802.11 使用链路层确认/重传(ARQ)方案

支持信道预约的CSMA/CA协议的原理:源站在发送数据之前,必须先监听信道,若信道空闲,等待一个分布式帧间间隔DIFS的短时间后,发送一个很短的请求发送控制帧RTS。RTS帧包括源地址、目的地址、本次通信所需的持续时间等信息。若目的站正确接收源站发来的RTS帧,且物理介质空闲,则等待一个短帧间间隔SIFS时间后,发送一个很短的允许发送控制帧CTS作为相应,其中包括本次通信所需要的持续时间等信息。源站和目的站周围的其他站点可以监听到两者要通信,其他站点在其通信持续时间内不会发送,这个时间段称为网络分配向量

NAV是其他站根据监听到RTS或CTS帧中的持续时间来确定数据帧传输的时间,即源站收到CTS帧后,再等待一段SIFS时间后即可发送数据,若目的站正确接收到了源站发来的数据帧,在等待时间SIFS后,就像源站发送确认帧ACK。

CSMA/CA通过RTS和CTS帧的交换,可以有效避免隐藏站问题,实现信道的预约占用,从而可以有效避免数据帧传输过程中的冲突,这也是该协议名称的含义。

这种机制也并不能完全消除冲突,例如两个站点同时发送RTS帧就会冲突,此时由于不能成功收到CTS帧,每个尝试发送数据的站会随机避让一段时间再尝试。由于RTS和CTS帧很短,所以这类帧的冲突与数据帧的冲突相比,造成的信道资源“浪费”要小很多。

IEEE 802.11帧结构

IEEE 802.11帧共有3种类型:控制帧、数据帧、管理帧MAC的首部共30字节,帧主体不超过2312字节,长度通常都小于1500字节,尾部是帧检验序列FCS,为4字节

Snipaste_2023-08-06_16-22-04

地址字段最常用的两种情况(在有基础设施的网络中只是用前3种地址,地址4多用于自组织网络)

数据帧地址:

去往AP 来自AP 地址1 地址2 地址3 地址4
0 1 目的地址 AP地址 源地址
1 0 AP地址 源地址 目的地址

IEEE 802.11标准规定,每个AP周期性的发送信标帧,每个信标帧包括该AP的SSID和MAC地址。发现AP的过程分为被动扫描主动扫描

被动扫描指的是无线主机扫描信道和监听信标帧的过程。

主动扫描指无线主机通过向位于无线主机范围内的所有AP广播探测帧的过程。

蜂窝网络

蜂窝网络是典型的移动通信网络

基本组成:移动台(移动终端)、基站、无线链路(空中接口)、基站控制器、移动交换中心、基础设施网络等。

蜂窝网络移动性管理采用的是间接路由选择。实现移动管理的实体包括HLR和VLR,移动台主要涉及两个号码,手机号和漫游号。目前,移动通信网络已由1G、2G、3G发展到目前主流的4G 网络,技术也由最初的FDMA,经历了FDMA/TDMA、 CDMA,发展到4G网络的 OFDMA和MIMO等新技术。最新一代的移动通信网络, 即5G网络也即将走入人们的生活。

移动IP网络

移动IP包括3部分:代理发现、注册以及间接路由选择

  • 代理发现通过捕获归属代理或外代理定期发送的代理通告ICMP报文,发现归属代理或外代理。
  • 注册是完成向外代理注册移动结点的永久地址,并向归属代理注册COA。
  • 移动IP采用间接路由选择实现移动性。

其他网络

WiMax、蓝牙、ZigBee网络特点:

  • WiMax:全球微波互联接入,IEEE 802.16标准
  • 蓝牙:IEEE 802.15.1 以小范围、低功率、低成本运行
  • ZigBee:IEEE 802.15.4,第二个个人区域网络标准,低功率、低数据速率、低工作周期

网络安全

网络安全基本特征:相对性、时效性、相关性、不确定性、复杂性以及重要性。

网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断

典型网络安全威胁方式:

  1. 从报文传输方面,主要包括窃听、插入、假冒、劫持等安全威胁。
  2. 比较常见的网络攻击还包括拒绝服务DoS以及分布式拒绝服务DDoS等,拒绝服务指阻止服务器为其他用户提供服务。
  3. Internet中有一类安全威胁叫作映射。Nmap就是国外广为使用的端口扫描工具。
  4. 还有一类安全威胁叫分组“嗅探”。
  5. IP欺骗也属于网络安全威胁的一种。

网络安全基本属性:

  1. 机密性。只有发送方与预定接收方能够理解报文内容
  2. 消息完整性。发送方与接收方希望确保消息未被篡改,发生篡改一定会被检测到
  3. 可访问与可用性。网络实体可被授权实体访问并按需求使用的特性
  4. 身份认证。发送方与接收方希望确认彼此的真实身份

数据加密

未加密的数据在密码学中被称为明文,伪装消息以隐藏消息的过程称为加密,被加密的消息称为密文,把密文转变为明文的过程称为解密

密码学包括密码编码学和密码分析学

  • 密码编码学是指将密码变化的客观规律应用于编制密码来保守通信密码。
  • 密码分析学指研究密码变化客观规律中的固有缺陷,并应用于破译密码以获取通信情报。

根据密码学的定义,可以得到一套完整密码体制,其中包括M、C、K、E、D共5个要素。

  • M是可能明文的有限集称为明文空间。
  • C是可能密文的有限集称为密文空间。
  • K是一切可能密钥构成的有限集称为密钥空间。
  • E为加密算法,对于任一-密钥,都能够有效地计算。
  • D为解密算法,对于任一密钥,都能够有效地计算。

该套密码体系必须满足如下特性:加密算法(Ex: M-C), 解密算法(Dg: C→M, (x∈M),满足

\[D_k(E_k(x))=x \]

还需要保证破译者不能在有效的时间内破解出密钥K或明文x。

根据密码体制的特点以及出现的先后分类:传统密码算法、对称秘钥算法、公开密钥算法

依据处理数据的类型可以划分为分组密码序列密码

  • 分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
  • 序列密码称流密码,是利用密钥产生一个密钥流,然后对明文串分别加密的过程。

传统加密方式

传统加密方式分为替代密码换位密码

替代密码:

替代密码是将明文字母表M中的每个字母用密文字母表C中的相应字母来代替,常见的加密模型有移位密码、乘数密码、仿射密码等。凯撒密码是移位密码的典型应用。

移位密码是将字母表中的字母右移K个位置,并对字母的长度做模运算,每一个字母具有两个属性,本身代表的含义和可计算的位置序列值。

加密公式:

\[E_k(M)=(M+K)mod\space q \]

解密公式:

\[D_k(C)=(K-k)mod \space q \]

换位密码

又称置换密码,根据一定的规则重新排列明文,以便打破明文的结构特性。改变明文结构,不改变明文的内容。可分为列置换密码周期置换密码

列置换密码是指明文按照密钥的规定,按列换位,并且按列读出新的序列得到密文的方法。置换密码的加密过程如下:首先,将明文P按密钥K的长度n进行分组,并且每组一行按行排列,即每行有n个字符。若明文长度不是n的整数倍,则不足部分用双方约定的方式填充,如双方约定用字母“x”替代空缺处字符。设最后得到的字符矩阵为Mmn, m为明文划分的行数。然后,按照密钥规定的次序将Mmm对应的列输出,便可得到密文序列C,密钥K通常用一个无重复字母的单词表示,而单词中每个字母在字母表中的相对次序,则规定了Mmm的列输出次序。

对称秘钥加密

对称秘钥加密系统分为分组密码和流密码。

  • 流密码又称序列密码。是通过伪随机数发生器产生性能优良的伪随机序列(密钥流),用该密钥流加密明文消息流,得到密文消息序列。解密时使用相同的密钥流,按加密的逆过程进行解密。
  • 分组密码又称块密码,是将明文消息分成若干固定长度的消息组,每组消息进行单独加密/解密。计算机网络常用的对称密钥加密为分组密码。

分组密码加密算法

DES加密算法:
典型的分组密码,使用56位的秘钥,明文为64位分组序列,共进行16轮的加密,每轮加密都会进行复杂的替换和置换操作,并且每轮加密都会使用由56位秘钥导出的48位子秘钥,最终输出与明文等长的64位密文。

三重DES:
使用两个秘钥,执行三次DES算法。用秘钥K1执行DES加密,然后按照DES解密方式,使用K2作为秘钥进行解密,最后再次使用K1执行DES加密。

加密过程是加密—>解密—>加密,解密过程是解密—>加密—>解密。

AES加密算法:

高级加密标准,加密过程涉及4种操作:字节替代、行移位、列混淆、轮密钥加。解密过程为对应的逆操作。

特点如下:

  1. 分组长度和密钥长度可变
  2. 循环次数允许在一定范围内根据安全要求进行修正,
  3. 汇聚了安全、效率、易用、灵活等优点,
  4. 抗线性攻击和抗差分攻击的能力大大增强,
  5. 如果1s暴力破解DES,需要149万亿年破解AES

IDEA加密算法:
是一个分组长度为64位的分组密码算法,密钥长度为128位。广泛应用于安全电子邮件PGP中。

非对称秘钥(公开秘钥)加密

非对称密码指的是非对称密码体制中使用的密码。非对称密码中出现了一对不同的密钥对 ,虽然密钥量增大了 ,但由于私钥由个人进行保管 ,而公钥可以向任何人公开 ,这样就很好的解决了密钥的分发和管理的问题 ,并且它还能够实现数字签名。常用的非对称密码算有RSAECC等。

加密解密过程:公钥加密,私钥解密。

非对称秘钥密码基本特性:

  • 一是加密密钥和解密密钥不同 ,并且难以互推 。
  • 二是有一个密钥是公开的 ,即公钥 ,而另一个密钥是保密的 ,即私钥。

如果对报文m利用私钥加密,则可以利用其公钥进行解密。也就是说下面公式成立:

\[K^-_B(K^+_B(m))=m=K^+_B(K^-_B(m)) \]

消息完整性和数字签名

报文/消息完整性,也称为报文/消息认证(或报文鉴别)。目的是证明报文确实来自声称的发送方,验证报文在传输过程中没有被篡改,预防报文的时间、顺序被篡改,预防报文持有期被篡改,预防抵赖( 如发送方否认已发送的消息或接收方否认已接收的消息)。

消息完整性检测方法

为了实现消息完整性检测,需要用到密码散列函数H(m),表示对报文m进行散列化。

主要特性如下:

  • 一般的散列函数具有算法公开

  • 能够快速计算

  • 对任意长度的报文进行多对一映射均能产生定长输出

  • 对任意报文无法预知其散列值

  • 不同报文不能产生相同散列值

  • 具有单向性,抗弱碰撞性,抗强碰撞性,单向性保证了散列值持有者,无法根据散列值逆推出报文。抗弱碰撞性当给定某条消息的散列值时,单向散列函数必须确保要找到和该条消息具有相同散列值的另外一条消息是非常困难的。抗强碰撞性是指要找到散列值相同的两条不同的消息是非常困难的

满足上述特性的经典散列函数有MD5和SHA-1.

报文认证

对报文m应用散列函数H,得到一个固定长度的散列码,称为报文摘要,记为H(m)。
报文摘要可以作为报文m的数字指纹。

报文认证是使消息的接收者能够检验收到的消息是否真实的认证方法。
报文认证的目的:

  1. 消息源的认证:验证消息的来源是真实的
  2. 消息的认证:验证消息在传送过程中未被篡改

数字签名

主要利用报文认证码MAC和数字签名来验证消息完整性
两者都需要使用散列函数,并且都能够验证报文的源以及报文自身的完整性,但MAC不依赖加密,而数字签名依赖公钥基础设施。
比较有效的数字签名是对报文摘要进行数字签名

身份认证

身份认证又称身份鉴别,是一个实体经过计算机网络向另一个实体证明其身份的过程。
身份认证可以通过彼此共享的对称秘钥进行认证,也可以利用公钥进行身份认证

秘钥分发中心与证书认证机构

秘钥分发中心和证书认证机构可以解决对称秘钥的分发和公钥证书的认证。对于身份认证,可以避免中间人攻击。

KDC(秘钥分发中心)的作用:秘钥分发中心解决对称秘钥的安全可靠分发

CA(认证中心)的作用:将公钥与特定实体绑定通常是由认证中心完成的。

CA可以证实一个实体的真实身份,一旦CA验证了某个实体的身份,CA会生成一个把其身份和实体的公钥绑定起来的证书,其中包含该实体的公钥及其全局的唯一的身份识别信息,并由CA对证书进行数字签名。

防火墙与入侵检测系统

防火墙的基本概念:防火墙是能够隔离组织内部网络与公共互联网,允许某些分组通过,而阻止其他分组进入或离开内部网络的软件、硬件或者软件硬件结合起来的一种措施。

防火墙的分类:无状态分组过滤器、有状态分组过滤器、应用网关

入侵检测系统基本概念:入侵检测系统IDS是当观察到潜在的恶意流量时,能够产生警告的设备或系统。它可以进行深度包检测,并检测多数据之间的相关性,能够检测网络映射,端口扫描,TCP栈扫描,Dos拒绝服务等多种攻击。

防火墙基本工作原理:基本前提是需要保证从外部到内部和从内部到外部的所有流量都经过防火墙,并且仅被授权的流量允许通过,防火墙能够限制对授权流量的访问。

网络安全协议

网络安全性服务可以在任意一个层实施。

典型安全协议

  • 应用层安全电子邮件PGP,提供邮件加密,报文完整性,数字签名等服务。
  • 传输层安全套接字SSL,面向TCP的安全套接字接口,提供机密性,完整性,身份认证等安全服务,满足电子邮件对网络安全的需求。
  • IPSec网络层安全协议,核心协议是AH协议和ESP协议,AH协议提供源认证和鉴别,数据完整性检验。ESP协议提供提供源认证和鉴别,数据完整性检验以及机密性。

最典型的网络层安全协议就是使用最广泛和最具有代表性的IP安全协议,IPSec。

专有网络(PN):它是基于专属的网络设施,链路或协议等建立的专门服务于特定组织机构的网络。是不和公共网络互连,只在组织内部使用的网络。

虚拟网络(VPN):通过建立在公共网络,例如,Internet上的安全通道,实现远程用户,分支机构,业务伙伴等于机构总部网络的安全连接,从而构建特定组织机构的专用网络。

VPN通过隧道技术,加密技术,秘钥管理,身份认证和访问控制等,实现与专用网络类似的功能,可以达到PN安全性的目的,同时成本相对来说要低很多。

VPN核心技术之隧道技术:即通过Internet提供的点对点的数据传输安全通道,实际是逻辑连接。通过数据加密保证安全,数据分组进入隧道时,由VPN封装成IP数据报,通过隧道在Internet上传输,离开隧道以后,进行解封装,数据便不受VPN保护。

隧道协议如下:

  • 乘客协议:确定封装的对象属于哪个协议
  • 封装协议:确定遵循哪一种协议进行封装,需要加什么字段等。
  • 承载协议:确定最后的对象会放入哪一类公共网络,如在Internet网络中传输。

常见的隧道协议有两个层次:首先是第二层协议,有PPTP、L2TP, 主要用于远程客户随机访问局域网方案。

其次是第三层协议,如IPSec, 主要用于网关到网关,或者网关到主机的方案,但不支持远程拨号访问。

AH(Authentication Header)协议:认证头协议。
ESP(Encapsulation Security Protocol)协议:封装安全载荷协议。

AH协议,ESP协议与两种模式(传输模式,隧道模式)组合起来有4种模式:

  1. 传输模式AH
  2. 隧道模式AH
  3. 传输模式ESP
  4. 隧道模式ESP

PGP基本原理与过程

PGP标准对邮件内容进行数字签名,保证信件内容不被篡改。同时会使用公钥和对称秘钥加密,保证邮件内容机密且不可否认。

SSL的握手过程

  1. 客户发送其支持的算法列表,以及客户一次随机数nonce,服务器从算法列表中选择算法,并发给客户自己的选择、公钥证书和服务器端一次随机数nonce
  2. 客户验证证书,提取服务器公钥,生成预主密钥,并利用服务器的公钥加密预主密钥,发送给服务器,实现秘钥的分发
  3. 客户与服务器基于预主密钥和一次随机数,分别独立计算加密秘钥和MAC秘钥,包括前其他4个秘钥
  4. 客户发送一个针对所有握手消息的MAC,并将此MAC发送给服务器
  5. 服务器发送一个针对所有握手消息的MAC,并将此MAC发送给客户