《计算机网络》(7) 复习笔记

0x01 概述

1.1 互联网概述

计算机网络由若干结点(node)和连接这些结点的链路(link)组成。结点可以是计算机、集线器、交换机、路由器等。网络之间可通过路由器互连,构成互连网 (internet)。网络把许多计算机连接在一起;互连网则把许多网络通过路由器连接在一起。与网络相连的计算机称为主机。互联网 (Internet)指当前全球最大的、开放的、由众多网络互相连接而成的特定互连网,采用 TCP/IP 协议族作为规则。

互联网基础结构发展三阶段

  1. 从单个网络 ARPANET(单个分组交换网)向互连网发展的过程。
  2. 建成三级结构的互联网。
    • 分为主干网、地区网和校园网(或企业网)
  3. 形成多层次 ISP 结构的互联网

物联网标准制定阶段

  1. 互联网草案——还不是 RFC 文档
  2. 建议标准——从这个阶段开始成为 RFC 文档
  3. 互联网标准

1.2互联网组成

工作方式上看,分为

边缘部分:

由所有连接在互联网上的主机组成。这部分由用户直接使用,用于进行通信和资源共享。

客户-服务器 C/S 方式:客户是服务请求方,服务器是服务提供方

对等连接方式 P2P:不区分服务请求和提供方,两台安装了 P2P 软件就可以进行平等连接通信

核心部分:

由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供联通性和交换)。

电路交换:

​端到端建立连接(专用的物理通路),经过建立连接->通信->释放连接三个步骤的交换方式称为电路交换。在通话全部时间内,通话两个用户始终占用端到端的通信资源。通信结束后才释放。

优点:

  1. 通信时延小
  2. 有序传输
  3. 无冲突
  4. 实时性强

缺点:

  1. 不具备差错检测能力
  2. 建立连接时间长
  3. 灵活性差

报文交换

​数据交换的单位是报文,携带目标地址、源地址等信息。报文交换在交换节点中采用的存储转发的传输方式。用在早期电报通信网中,现已被分组交换方式取代。

优点:

  1. 无需建立连接
  2. 动态分配线路
  3. 提高线路可靠性
  4. 提高线路利用率
  5. 提供多目标服务

缺点:

  1. 数据进入交换节点后经历存储、转发,会引起转发时延
  2. 对报文大小没有限制,要求较大的缓存空间

分组交换:

​采用存储转发技术,把一个报文(要发送的整块数据)划分为几个分组(每一个数据段前面加上目的地址和源地址等控制信息组成的首部后)后进行传送。主机是为用户进行信息处理的。路由器是用来转发分组的,即进行分组交换。以太网采用分组交换技术。

优点:

  1. 无建立时延
  2. 线路利用率高
  3. 简化了存储管理
  4. 加速传输
  5. 减少了出错概率和重发数据量

缺点:

  1. 存在传输时延,相对电路交换存在存储转发时延
  2. 需要传输额外的信息量
  3. 可能会出现失序、丢失或重复分组

三种交换方式传送阶段特点:

  • 电路交换:整个报文比特流连续从源点直达终点
  • 报文交换:整个报文先传送到相邻结点,全部存储查找转发表,转发下一结点
  • 分组交换:单个分组传送到相邻结点,存储后查表,转发到下一结点(存储转发

传送大量数据,传送时间远大于连接建立时间,则电路交换传输效率较快。报文交换和分组交换不需要预先分配传输宽带,突发数据传输时可提高整个网络信道利用率。由于分组长度远小于报文长度,分组交换比报文交换时延小,灵活性更强。

1.3 计算机网络类别

按作用范围分类

  • 广域网 WAN (Wide area network)
  • 城域网 MAN (metropolitan area network)
  • 局域网 LAN (local area network)
  • 个人区域网 PAN (personal area network)

按网络使用者分类

  • 公用网 (public network)
  • 专用网 (private network)

用来把用户接入互联网的网络

  • 接入网 AN (access network)

1.4 计算机网络的性能

性能指标

1. 速率

​速率指数据的传送速率,也称数据率或者比特率。单位是 bit/sbit/s,数据率较高时加字母k=210=1024,M=220,G=230,T...k=2^{10}=1024,M=2^{20},G=2^{30},T...(二进制中)。网络的速率通常指额定速率或标称速率,非实际速率。

2. 带宽

  • 本指某个信号具有的频带宽度,即信号包含不同频率成分所占据的频率范围。单位是赫兹。表示某信道允许通过的信号频带范围就成为该信道的带宽。
  • 计算机网络中,带宽用来表示某通道传送数据的能力,网络带宽表示在单位时间内网络中某种信道所能通过的 “最高数据率”带宽单位是就是**数据率的单位 **bit/sbit/s

3. 吞吐量

​吞吐量表示在单位时间内通过某个网络(信道、接口)的实际数据量。经常用于对现实时间中的网络的一种测量。吞吐量受网络带宽和网络额定速率限制。

4. 时延

​时延指数据从网络的一端传到另一端所需的时间,也成为延迟或迟延。性能指标如下:

  1. 发送时延:主机或路由器发送数据帧所需要的时间,也就是发送数据帧第一个比特到最后一个比特发送完毕所需的时间,也叫做传输时延一般发生在网络适配器中,公式如下

    =(bit)(bit/s)发送时延=\frac{数据帧长度(bit)}{发送速率(bit/s)}

  2. 传播时延:电磁波在信道中传播一定的距离需要花费的时间,公式如下

    =(m)(m/s)传播时延=\frac{信道长度(m)}{电磁波在信道上的传播速率(m/s)}

  3. 处理时延:主机或路由器在收到分组要花费一定时间处理

  4. 排队时延:分组经过网络传输时,要经过许多路由器,分组进入路由器后要先在输入队列中排队等待处理

=(ts)+(tp)++总时延=发送时延(ts)+传播时延(tp)+处理时延+排队时延

​对于告诉网络链路,提高的仅仅是数据的发送速率而不是传播速率。提高数据的发送速率只是减少了数据的发送时延。同时注意发送速率指某个点或者接口上的发送速率;传播速率指某段传输线路上的比特的传播速率。

5. 时延带宽积

​将传播时延 (s) 和带宽 (bit/s) 相乘即可得到时延带宽积,即

=×时延带宽积=传播时延\times 带宽

​又称以比特为单位的链路长度。例传播延时 20ms,带宽 10Mbit/s,可算出 时延带宽积 = 2×105bit2\times 10^5bit ,表示第一个比特即将到达终点,发送端已经发了 20万比特。

6. 往返时间 RTT

​Round-Trip Time。A向B发送数据,如果B正确收完数后,就立刻向A发送确认,假定A收到B的确认消息后才能继续向B发送数据,这就需要一个往返时间RTT。利用 RTT 可以计算出A向B发送数据的有效数据率。

=+RTT有效数据率=\frac{数据长度}{发送时间+RTT}

7. 利用率

​有信道利用率网络利用率两种。令 D0D_0 表示网络空闲时的时延(相当于时延最小值),DD 表示网络当前时延,以下公式可表示两者与网络利用率 UU 间的关系:

D=D01U U=DD0DD=\frac{D_0}{1-U}\space 、U=\frac{D-D_0}{D}

​利用率过高会产生非常大的时延,一般控制不超过 50%。

1.5 网络体系结构

为了全球计算机网络都服从一个标准,克服不同网络体系结构用户的通讯问题,国际标准化组织 ISO 提出开放系统互连基本模型 OSI/RM(Open System Interconnection Reference Model),简称 OSI。但最终以失败告终,现如今由基于 TCP/IP 的互联网占据。

为进行网络中的数据交换而建立的规则称网络协议,有以下三要素:

  1. 语法:数据与控制信息的结构或格式
  2. 语义:需要发出何种控制信息,完成何种动作以及做出何种响应。
  3. 同步:事件实现顺序的详细说明

五层协议体系结构

1、应用层

​任务是通过应用进程间的交互来完成特定网络应用。该层协议定义的是应用进程间通信的交互规则,如 DNS、HTTP、SMTP等。进程指主机正在运行的程序。

2、运输层

​利用通信子网提供的服务实现两台主机进程之间的通信提供通用的数据运输服务。主要以下两种协议

  • 传输控制协议 TCP:提供面向连接的、可靠的数据传输服务,传输单位是报文段
  • 用户数据报协议 UDP:提供无连接的、尽最大努力的数据传输服务(不保证数据传输可靠性),其数据传输的单位是用户数据报

3、网络层

​负责为分组交换网上不同主机提供通信服务。发送数据时,网络层把运输层产生的报文段或用户数据报装成分组进行传送。网络层使用 IP 协议,分组也叫做 IP数据报

4、数据链路层

​两台主机之间的数据传输,需要专门的链路层协议。两结点间传送数据时,链路层将网络层交下来的 IP 数据报组装成,在两相邻结点间的链路上传送帧。每一帧包含数据和必要的控制信息,可以使得接收端能够检测到所收到帧有无差错,有则丢弃。

5、物理层

​传输数据的单位为比特。物理层要考虑用多大电压表示 1 和 0,以及接收方如何识别发送方发送的比特。还要确定连接电缆的插头应当有多少引脚及如何连接等问题。

​图中虚线所示,把数据通过水平虚线直接传递给对方,这就是所谓的对等层之间的通信。

实体、协议、服务与服务访问点

实体用来表示任何可发送和接收信息的硬件或软件进程

协议是两个对等(或多个)实体通信的规则的几何。在协议控制下,实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。协议是水平的,即协议是控制对等实体之间的通信规则;服务是垂直的,即服务是由下层向紧邻的上层通过层间接口提供的。上层可使用服务原语使用下层所提供的服务。相邻两层交互的地方称为服务访问 SAP,层与层间交换的数据单位为服务数据单元 SDU

​协议需要把所有不利条件事先都估计到,不能假定一切都是正常的非常理想的。因为网络协议如果不全面考虑不利情况,当情况变化时,协议就会保持理想情况,一直等待下去。

协议与服务的区别:

​只有本层协议的实现才能为上一层提供服务;要实现本层的协议需要使用下一层提供的服务。本层的服务用户只能看见服务而看不见下面的协议,即下面的协议对上层的服务对用户是透明的。协议是水平的,协议是控制对等实体之间通信的规则。服务是垂直的,服务是由下层通过层间接口向上层提供的。在一层内完成的全部功能并非都称为服务,只有能够被高一层实体看得见的功能才能称为服务。

TCP/IP 体系结构

现在TCP/IP体系结构如图1-23所示,互联网某些应用程序可以直接使用 IP 层,甚至最下面网络接口层

这种沙漏形状 TCP/IP 协议族可看出,IP 协议在互联网中起核心作用:

  • everthing over IP:TCP/IP 协议可以为各式各样应用提供服务。
  • IP over everthing:TCP/IP 允许 IP 协议在各式各样网络构成的互联网上运行

0x02 物理层

​物理层主要任务描述为确定与传输媒体的接口相关的一些特性,即机械特性电气特性功能特性过程特性。还有就是透明传输比特流。

2.1 数据通信基础

基本概念

1、数据、信号与码元

​数据指传送信息的实体。信号是指数据的电气或电磁表现。可分别用模拟的数字的来修饰:连续变化的数据(或信号)称为模拟数据(或模拟信号);取值限于几个离散数值的数据(或信号)称为数字数据(或数字信号)。

​数据传输方式分为串行传输并行传输。前者指一个一个比特按时间顺序传输(一般远距离通信常采用串行传输);后者指多个比特通过多条通信信道同时传输。

码元指用一个固定时长波形信号(数字脉冲)来表示一位 k 进制数字,代表不同的离散值的基本波形,是数字信号的计量单位,这个时长内的信号称为 k 进制码元,而该时长称为码元宽度。1码元可以携带多比特信息量。

2、信源、信道与信宿

一个数据通信系统可划分为三大部分,源系统(发送端或发送方)、传输系统(传输网络)和目的系统(接收方)。

源系统包含两部分:

  • 源点:源点设备产生要传输的数据。如键盘输入,计算机产生输出的数字比特流。又称信源、源站
  • 发送器:数字比特流通过发送器编码后才能在传输系统传输。调制器就是典型例子。

目的系统包含两部分:

  • 发送器:接收传输系统传送的信号,并转换为能够被目的设备处理的信息。解调器就是典型例子。
  • 终点:终点设备从接收器获取传送过来的数字比特流,然后把信息输出。

传输系统可以是简单传输线,也可以是源和目的系统间的复杂网络系统

常用术语:

  • 消息(message):如语音、文字、图像等
  • 数据(data):运送消息的实体。是使用特定方式表示的信息,通常是有意义的符号序列。
  • 信号(signal):数据的电气或电磁表现
    • 模拟信号(连续信号):代表消息的参数取值是连续的。
    • 数字信号(离散信号):代表消息的参数取值是离散的。代表不同离散数值的信号波形称为码元表示一位 k 进制数字 。二进制时只有0、1

信道

信道一般用来表示向某一个方向传送消息的媒体,往往包含一条发送信道和一条接收信道。按交互方式可划分为:

  1. 单向通信:也称单工通信,即只有一个方向的通信而没有反方向的交互,如各种广播等。
  2. 双向交替通信:也称半双工通信,即通信双方都可以发送信息,但不能同时发送(或接收)。
  3. 双向同时通信:也称全双工通信,即通信双方都可以同时发送和接收信息。

来自信源的信号称为基带信号。信号要在信道上传输就要经过调制,可分为两大类:

  1. 基带调制:仅对基带信号的波形进行变换,使与信道特性相适应。相当于把数字信号转换为另一种形式的数字信号,也成为编码(coding)
  2. 带通调制:使用载波,把基带信号频率范围移到较高的频段,并转换为模拟信号(称为带通信号),更好在信道中传输。

将基带信号直接传送到通信线路(数字信道)上的传输方法称为基带传输;经过调制发送到通信线路(模拟信道)的方式称为频带传输

编码与调制

1、数字数据编码成数字信号

  • 非归零编码(NRZ):不用归零,一个周期可用来全部传输数据。但无法传递时钟信号,双方难以同步
  • 归零编码(RZ):高电平表示 1,低电平表示 0。每个时钟周期中间均归零,接收方根据该跳变调整时钟基准,这为双方提供了自同步时钟。归零需占用一部分带宽,效率收到一定影响。
  • 曼切斯特编码:将一个码元分成两个相等的间隔,前一个间隔为高电平后一个间隔为低电平表示码元1;码元0正好相反。也可反过来定义。每个码元中间出现跳变为时钟信号,可用于同步,又可作为数据信号,占频带宽度是初始基带宽度的两倍,每位数据都需要两个电平来表示。所以编码效率为50%。
  • 差分曼切斯特编码:常用于局域网传输,规则是:若码元为1,则前半个码元电平与上一个码元的后半个电平相同;若码元为0,则情形相反。每个码元的中间都有一次电平跳转,可实现自同步,抗干扰性好。
  • 4B/5B 编码:每4位作为一组,然后按 4B/5B 编码规则将其转换成5位码。5位码共32种组合,但只采用其中16种对应16种不同的4位码,其他16位作为控制码(帧起始,线路状态等)或保留。

以太网使用曼切斯特编码

2、数字数据调制为模拟信号

​数字数据调制技术在发送端将数字信号转换为模拟信号,而在接收端将模拟信号还原成数字信号,分别对应于调制解调器的调制解调过程,方法有如下几种:

  • 幅移键控(ASK):通过改变载波信号的振幅来表示数字信号1和0,载波的频率和相位都不变。

  • 频移键控(FSK):通过改变载波信号的频率来表示数字信号1和0,载波的振幅和相位都不变。应用较广泛。

  • 相移键控(PSK):通过改变载波信号的相位来表示数字信号1和0,载波的振幅和频率都不变。

  • 正交振幅调制(QAM):在频率相同的前提下,将 ASK 和 PSK 结合起来,形成叠加信号。设波特率为 B,采用 m 个相位,每个相位有 n 种振幅,则该 QAM 技术的数据传输率 R 为

    R=Blog2(mn) (b/s)R=Blog_2(mn) \space (单位为 b/s)

3、模拟数据编码为数字信号

​这种编码方式最典型的例子是常用于对音频信号进行编码的**脉冲调制 PCM **,主要包括三个步骤,采样、量化和编码。现在高速的数字传输系统使用同步光纤网 SONET 或同步数字系列 SDH。

​采样定理:带宽指信号最高频率与最低频率之差,单位为 Hz。因此,模拟信号转换成数字信号时,设原始信号种最大频率为 f,那么采样频率 f采样 必须大于等于最大频率 f 的两倍,才能保证采样后的数字信号完整保留原始模拟信号的信息。采样定理又称奈圭斯特定理。

  • 采样:指对模拟信号进行周期性扫描,把时间上连续信号变成时间上离散的信号。
  • 量化:把采样取得的电平幅值按一定的分级标度转化为对应的数字值并取整。
  • 编码:把量化的结果转换为对应的二进制编码

4、模拟数据调制为模拟信号

​为了实现传输的有效性,可能需要较高频率。这种调制方式还可以使用频分复用(FDM)技术,充分利用带宽资源。电话机和本机交换机采用模拟信号传输模拟数据的编码方式;模拟的声音数据是加载到模拟的载波信号中传输的。

信道容量

速率也称数据率,指数据的传输速率,表示单位时间内传输的数据量。可用码元传输速率和信息传输速率来表示。

  1. 码元传输速率:又称码元速率、波形速率等,表示单位时间内数字通信系统传输的码元个数,单位是波特。波特表示数字通信系统每秒传输一个码元。
  2. 信息传输速率:又称信息速率、比特率等,表示单位时间内数字通信系统传输的二进制码元个数(即比特数),单位是比特/秒(b/s)

两者关系:若一个码元携带 n 比特的信息量,则 M 波特率的码元传输速率所对应的信息传输速率为 Mn 比特/s

​码元传输的速率越高,或信号传输距离越远,或噪声干扰越大,或传输媒体质量越差,那么接收端的波形失真就越严重。接收端波形失去码元间的清晰界限,这种现象称为码间串扰,使得码元无法识别。

奈氏准则和香农定理

1、奈氏准则

​在理想低通的信道中,极限码元传输率为 2W 波特,W 是理想低通信道的带宽,单位 Hz。用 V 表示每个码元离散电平的数目(有多少种不同的码元,16种码元则需要4位二进制),极限速率为

=2Wlog2V(b/s)理想极限数据传输率=2Wlog_2V(b/s)

奈氏准则结论:

  1. 在任何信道中,码元传输速率存在上限,若超过此上限,就会出现严重的码间串扰,识别成为不可能。
  2. 信道频带宽度越宽,可用更高的速率进行码元的有效传输。
  3. 未对信息传输速率给出限制,即未对码元可以对应多少个二进制位给出限制

2、香农定理

​给出了带宽受限且有高斯白噪声干扰的信道的极限数据传输率,用此速率进行传输时,可做到不产生误差。噪声存在设备和信道中,但其影响是相对的,信号越强,影响越小。信噪比就是信号的平均功率 S 和噪声的平均功率 N 之比,记为S/NS/N,分贝dBdB 作为度量单位。

(dB)=10log10(S/N)(dB)信噪比(dB) = 10log_{10}(S/N)(dB)

香农公式,指出信道极限信息传输速率 C,W 表示信道带宽(以 Hz 为单位):

C=Wlog2(1+S/N)(bit/s)C=Wlog_2(1+S/N)(bit/s)

3、两者主要区别:

可通过编码让每个码元携带更多比特的信息量、采用更新的信号处理和调制方法来提高传输速率。

2.2 传输媒体

导引型传输媒体

  1. 双绞线:把两根相互绝缘铜导线并排放一起,用规则方法绞合起来构成双绞线。有无抗电磁干扰可分为屏蔽双绞线和无屏蔽双绞线。
  2. 同轴电缆:由内导体铜质芯线、绝缘层、网状编制外导体屏蔽层以及保护塑料层组成。
  3. 光缆:利用光纤传递光脉冲进行通信。优点:传输损耗小、抗雷电电磁干扰性能好、无串音干扰,保密性好、体积小重量轻。

非引导型传输媒体

  1. 无线
  2. 红外
  3. 大气激光

2.3 信道复用

​许多用户通过复用技术就可以共同使用一个共享信道来进行通信。复用要付出一定代价(带宽较大费用相应也较高),但如果复用的信道数量较大,总的来看经济上还是合算。

频分复用 FDM

​所有用户在同样事件占用不同带宽资源。用户分配到一定频带后,通信过程中始终占用这个频带。组合多个信号的硬件叫做复用器;分离这些信号的硬件成为复用器。

时分复用 TDM

统计时分复用 STDM

​时分复用的改进,明显提高信道利用率。集中器常使用这种统计时分复用。各用户有了数据就随时发往集中器的输入缓存,集中器按顺序依次扫描输入缓存,把缓存中的输入数据放入 STDM 帧中,没有数据缓存就跳过。当一个帧的数据放满就发送出去。因此, STDM 帧是按需动态地分配时隙。也称做异步时分复用

波分复用 WDM

​就是光的频分复用,光载波频率很高,所以用波长而不用频率来表示使用的光载波。

码分复用 CDM

​各用户使用经过特殊挑选的不同码型,因此各用户间不会造成干扰。常用码分多址 CDMA

​在 CDMA中,每个比特时间划分为 m 个短间隔,称为码片。通常 m 的值为 64 或 128。以下 m 设为8。使用 CDMA 的每一个站被指派一个唯一的 m bit 码片序列。发送 1,则发送自己的 m bit 码片序列;0,则发送该码片序列反码。

​如:S 站的 8 bit 码片序列是 00011011,发送 1 时,就发送 00011011;发送 0 时,就发送 11100100

​通常将码片中的 0 写为 -1,1 写为 +1。所以此站码片序列为 (-1 -1 -1 +1 +1 -1 +1 +1)

​假定 S 站要发送的数据率为 b bit/sb\space bit/s。由于每个比特要转化为 m 个比特的码片,所以 S 站实际上发送的数据率达到 mb bit/smb \space bit/s,占用的频带宽度也扩大到原来数值的 m 倍。这种通信方式是扩频通信中的一种,分为直接序列扩频 DSSS 和**跳频扩频 FHSS **。

​CDMA 系统重要特点 是每一个站分配的码片序列不仅必须各不相同,且必须互相正交。令向量 S 表示 S 的码片向量, T 表示 其他任何站的码片向量。不同站的码片序列正交,就是 S 和 T 的内积为 0

ST1mi=1mSiTi=0S\cdot T\equiv \frac{1}{m}\sum_{i=1}^{m}S_iT_i=0

​如:S(-1 -1-1 +1 +1 -1 +1 +1),T(-1 -1 +1 -1 +1 +1 +1 -1)。可看出 S 和 T 正交,且 S 和各站码片反码向量内积也是 0。任何一个码片向量和该码片向量自己的规范化内积都是 1;而码片向量和自身的反码向量规范化内积都是 -1

ST=1mi=1mSiSi=1mi=1mSi2=1mi=1m(±1)2=1S\cdot T=\frac{1}{m}\sum_{i=1}^{m}S_iS_i=\frac{1}{m}\sum_{i=1}^{m}S_i^2=\frac{1}{m}\sum_{i=1}^{m}(\pm1)^2=1

​假定一个 X 站要接收 S 站发哦是那个的数据。X 站需知道 S 站的码片序列。X 站使用它得到的码片向量 S 与接收的未知信号进行求内积运算。X 站接收到的信号是各个站发送的码片序列之和

数字传输系统和宽带接入技术

​用户到互联网的宽带接入方法由非对称数字用户线 ADSL、光纤同轴混合网 HFC 和 FTTx。

​为了有效利用光纤资源,在光纤干线和用户之间广泛使用无源光网络 PON。最流行的无源光网络是以以太网无源光网络 EPON 和吉比特无源光网络 GPON。

0x03 数据链路层

该层信道主要有两种类型:

  • 点对点信道:一对一点对点通信方式,如果通信两台主机间没有直接连接的线路,分组传输就要通过中间结点的接收、存储和转发,直至目的节点。
  • 广播信道:使用一对多的广播通信方式。所有联网计算机都共享一个公共信道。一台计算机利用共享通信信道发送报文分组时,所有计算机都会收听这个分组。接收到该分组的计算机通检测目的地址来决定是否接受该分组。

是否采用分组存储转发与路由选择机制是点对点式网络与广播式网络的重要区别,广域网基本都属于点对点网络

点对点信道的数据链路层

数据链路和帧

链路:一个结点到相邻结点的一段物理线路,中间没有任何其他交换节点。数据链路:必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

​数据链路层把网络层交下来的数据构成发送到链路上,以及把接收到的中的数据去除并上交网络层。

点对点通信的数据链路层主要步骤:

  1. 结点 A 的数据链路层把网络层交下来的 IP 的数据报添加首部和尾部封装成帧。
  2. 结点 A 把封装好的帧发给结点 B 的数据链路层。
  3. 若结点 B 的数据链路层收到的帧无差错,则从帧中提取出 IP 数据报上交网络层;否则丢弃。

三个基本问题

1、封装成帧

​在数据前后添加首部和尾部构成帧。接收端收到物理层上交比特流后,可根据首部和尾部的标积,从比特流中识别帧的开始和结束。首部尾部重要作用就是进行帧定界(确定帧的界限)。还包括许多必要的控制信息。每一种链路层协议都规定了帧的数据部分长度上限——最大传输单元 MTU。

​使用帧定界符,SOH放在帧最前面,表示首部开始;EOT表示帧结束。

2、透明传输

​如果在数据中恰好出现与帧定界相同的比特组合(会误以为“传输结束”丢弃后面数据),就要用到透明传输。不管传输数据是什么样的比特组合,都能在链路上传送。具体方法:在 SOH 或 EOT 或 ESC 前插入一个转义字符 ESC。接收端的数据链路层在把数据传往网络层之前删除这个转义字符。这种方法称为字节填充

3、差错检测

​比特在传输过程中可能会产生差错,比特差错为其中一种。传输错误的比特占所传输比特中输的比率称为误码率 BER。通常采用循环冗余校验 CRC 检测差错。假定每组 k 比特。待传送数据 M = 101001。在 M 后面添加供差错检验用的 n 为冗余码构成一个帧发送 (k+n) 位。

​n 位冗余码获取方法:二进制模 2 运算进行 2n2^n 乘 M 的运算,相当于在 M 后面添加了 n 个 0。得到的 (k+n) 位数除以商定好的 (n+1) 位的除数 P,得出商是 Q,余数是 R (n 位)。 这个余数 R 就作为冗余码 FCS 拼接在数据 M 的后面发送出去。这个冗余码称为帧检测序列 FCS。

​接收端把收到的数据以帧为单位进行 CRC 检验:每一帧都除以相同的除数 P (模2运算),检测余数 R。R 为0,则判定这个帧无差错,接收;不为0,有差错,丢弃。

​还可使用生成多项式来表示循环冗余检验过程。P(X)=X3+X2+1P(X)=X^3+X^2+1 表示除数 P = 1101,P(X) 称为生成多项式

点对点协议PPP

​以前能实现可靠传输的高级数据链路控制 HDLC 为当时主流数据链路层协议,是面向比特的数据链路层协议。如今点对点协议 PPP 则是目前使用最广泛的数据链路层协议。PPP 协议就是用户计算机和 ISP 进行通信时所使用的数据链路层协议。

PPP 协议组成:

  1. 一个将 IP 数据报封装到串行链路的方法。
  2. 一个用来建立、配置和测试数据链路连接的链路控制协议 LCP。
  3. 一套网络控制协议 NCP。

特点:简单;只检验差错而不纠正;不使用序号;不进行流量控制;同时支持多种网络层协议。

PPP 协议帧格式

​首部第一个尾部第二个字段都是 F(Flag) ,规定为 0x7E,此标志字段就是 PPP 帧的定界符。地址字段 A 规定为 0xFF,控制字段 C 规定为 0x03。地四个字段是 2 字节的协议字段。信息部分长度可变。尾部第一个字段(两字节)使用 CRC 的帧检验序列 FCS。

字节填充

​当 PPP 使用异步传输时,将 0x7D 定义为转义符,并使用字节填充:

  • 出现的每一个 0x7E 字节转变成两字节序列 (0x7D, 0x5E)
  • 出现一个 0x7D,则转变成两字节序列(0x7D, 0x5D)
  • 出现Ascii码控制字符(数值小于 0x20 的字符),则在该字符前加入一个 0x7D 字节,同时将该字符编码。如 0x03 变成(0x7d, 0x23)

零比特填充

​PPP 协议使用 SONET/SDH 链路时,使用同步传输而不是异步传输,采用零比特填充方法实现透明传输。HDLC 也采用零比特填充法实现数据链路层透明传输。

​HDLC 数据帧以位模式 0111 1110 标志每个帧的开始和结束。发送端扫描整个字段,只要发现有5个连续的1,立刻填入一个0。保证不会出现6个连续的1。接收端在收到一个帧时,先找到标志字段 F 确定帧边界,再扫描比特流。每当发现5个连续的1,就把5个连续1后的一个0删除,还原信息比特流。保证透明传输,不会引起帧边界误判。

PPP 协议工作状态

​当用户接入 ISP 后,建立一条物理连接。用户电脑向 ISP 发送一系列的链路控制协议 LCP 分组(封装成多个 PPP 帧),建立 LCP 连接。网络控制协议 NCP 给新接入用户个人电脑分配零时 IP 地址。这样个人电脑就是互联网上一个有 IP 地址的主机了。当用户通信完毕,NCP 释放网络层连接,收回 IP 地址,LCP 释放数据链路层连接,最后释放物理层连接。

使用广播信道的数据链路层

局域网的数据链路层

​局域网主要特点:一个单位所拥有,地理范围、站点数量具有限。按网络拓扑进行分类:

  • 星型网:由于集线器的出现和双绞线大量用于局域网,星型以太网及多级星型结构的以太网使用范围最广。
  • 环形网:
  • 总线网:各站直接连在总线上,总线两端匹配电阻吸收电磁波信号的能量,避免在总线产生电磁波反射。

​局域网可用多种传输媒体。双绞线为主流,从 10 Mbit/s10 \space Mbit/s10 Gbit/s10 \space Gbit/s 局域网都可使用双绞线。通常用传统以太网来表示最早留校的$10 \space Mbit/s $ 速率的以太网。

以太网两个标准:

  • DIX Ethernet V2:世界第一个局域网产品规约。数据率为 10 Mbit/s10\space Mbit/s
  • IEEE 802.3:由IEEE 802委员会制定,数据率为 10 Mbit/s10\space Mbit/s 。把局域网数据链路层拆成两个子层,逻辑链路控制 LCC 子层和媒体接入 MAC 子层。与接入到传输媒体有关的内容都发在 MAC 子层。LLC 子层与传输媒体无关,用于向网络提供一个接口以隐藏各种 802 网络之间的差异。

CSMA/CD 协议

​载波监听多点接入/碰撞检测(CSMA\CD),适用于总线形网络或半双工网络环境。多点接入说明这是总线型网络。载波侦听就是不管在发送前、中,每个站都必须不停检测信道,检测信道是否有其他站在发送数据,若有则等待信道空闲再发送。碰撞检测就是边发送边监听,即适配器便发送数据边检测信道上信号电压变化情况,判断自己在发送数据时其他站是否也在发送数据。

​工作流程可概括为:先听后发,冲突停发,随即重发。

  • t=0,A发送数据,B检测信道为空闲
  • t=τδt=\tau -\delta ,A发送的数据还没有到B,B检测到信道空闲,因此发送数据
  • 经过δ/2\delta /2后,即 t=τδ/2t=\tau -\delta/2 时,发生碰撞,但双方都不知道
  • t=τt=\tau 时,B检测到碰撞停止发送数据
  • t=2τδt=2\tau -\delta 时,A也检测到碰撞,也停止发送数据
  • 双方推迟一段时间后再重发,这段时间是不确定的,取决于距离,这点称为发送的不确定性

可以看出最迟检测到自己发送的数据和别的站发送的数据发生碰撞的时间是两倍总线端到端的传播时延 2τ2\tau

以太网使用截断二进制指数退避确定重传时机,具体如下:

  1. 规定基本退避时间为争用期 2τ2\tau争用期具体时间是 512us。对于 10 Mbit/s10 \space Mbit/s的以太网,在争用期内可以发送 512bit,64 字节。直接用比特作为争用期的单位。争用期时 512bit,即争用期是 512 比特时间。

  2. 从离散的整数集合[0,1,...,2k1][0,1,...,2^k-1]中随机取一个数,记为 r。重传应推后的时间就是 r 倍的争用期。k 计算方法如下:

    k=Min[10]k=Min[重传次数,10]

  3. 当重传达16次仍不成功时,则丢弃该帧,并向上层报告

​以太网规定一个最短帧长为 64 字节,512 bit。为了不让发送站检测不到帧碰撞。如果发送数据很少,就需要加入填充字节,使不小于 64 字节。如果在争用期没有发生碰撞,那么后续数据都不会发生冲突,若收到小于 64 字节的帧,都是由于冲突而异常终止的无效帧,应立即丢弃。信号在以太网传播 1km 大约需要 5us。以太网最大端到端时延必须小于争用期的一半。规定了帧内最小间隔为 96 比特时间,为了收到数据帧的站的接收缓存来得及清理。

CDMA/CD 总结

  1. 准备发送:适配器从网络层获取一分组,加上以太网首部尾部,组成以太网帧,放入缓存中。发送前必须检测信道。
  2. 检测信道:若检测到信道忙碌,则不停检测,直到信道空闲。若检测到空闲,并在 96 比特时间内信道保持空闲(保证帧间最小间隔),则发送这个帧。
  3. 在发送过程中不停检测信道,即适配器边发送边监听
    • 发送成功:在争用期内一直未检测到碰撞。则这个帧一定发送成功。发送完毕什么也不做,回到 1
    • 发送失败:在争用期检测到碰撞。立即停止发送数据,并发送人为干扰信号。适配器执行指数退避算法,等到 r 倍 512 比特时间后,返回步骤 2.重传 16 次都不成功则丢弃这个帧,并向上汇报。

使用集线器的星型拓扑

​在星型中心增加一个叫集线器(可靠性强)的设备,IEEE 制定出 10BASET10BASE-T 的标准 802.3i。10代表 10 Mbit/s10 \space Mbit/s,BASE 表示连接线上的信号是基带信号。 10BASET10BASE-T 双绞线以太网的出现,是局域网发展史的里程碑,把以太网拓扑从总线型转为星形网络。

集线器特点:

  1. 使用集线器以太网在逻辑上仍是总线网,各站共享逻辑上的总线,(各站的适配器)使用 CSMA/CD 协议。同一时刻只允许一个站发送数据。

  2. 一个集线器有多个接口,像一个多接口的转发器

  3. 集线器工作在物理层,每个接口仅简单转发比特,不进行碰撞检测

    IEEE 802.3标准还可以使用光纤作为传输媒体,对应的标准是 10BASEF10BASE-F,F 代表光纤。

信道利用率

​假定 10 Mbit/s10 \space Mbit/s 以太网同时有十个站工作,每个站所能发送数据的平均速率应当是 1/10。但由于会发送碰撞,,以太网信道利用率不能达到 100%。

​成功发送一个帧占用信道的时间是 T0+τT_0+\tauτ\tau 为帧在以太网上单程端到端时延。要提高信道利用率就要减小 τ\tauT0T_0 之比。规定参数 a,它是单程端到端发送时延 τ\tau 和帧的发送时间 T0T_0 之比 。

a=τT0a=\frac{\tau}{T_0}

​a->0表示一旦发生碰撞就能检测出来,立刻停止发送,浪费小。若 a 越大,表明争用期占比越大,使得碰撞浪费不少资源,利用率明显降低,因此 a 应该尽量小。当数据率一定时以太网连线长度受限( τ\tau 的数值会太大),同时以太网帧不能太短(否则 T0T_0 太小)。在理想化条件下,各站不会碰撞,极限信道利用率 SmaxS_{max} 为:

Smax=T0T0+τ=11+aS_{max}=\frac{T_0}{T_0+\tau}=\frac{1}{1+a}

指出只有当参数 a 远小于 1 才能得到尽可能高的极限信道利用率。一般以太网利用率达到 30% 就已经处于重载情况。

以太网的MAC层

​在局域网中,硬件地址又称物理地址或者 MAC 地址(用在 mac 帧中)。IEEE 802标准定义了一种 48 位的全球地址,指局域网上的每一台计算机中固化在适配器 ROM 中的地址。意思就是只要电脑中适配器不变,那么该电脑的“地址”(MAC地址)就不会变。IEEE 注册管理机构 RA,是局域网全球地址的法定管理机构,负责分配6字节中的前3个。后3个生产适配器厂商需要向 IEEE 购买,这个号名称是组织唯一标识符 OUI也叫公司标识符。如 9C-B6-D0-ED-60-BF。

​由于总线上使用的是广播通信,网卡从网络上每收到一个 MAC 帧,先是哦也能够硬件检查 MAC 帧中的 MAC 地址。若是发往本站的地址就收下,否则丢弃。

​以太网 MAC 帧有两种标注:DIX Ethernet V2DIX \space Ethernet\space V2IEEE 802.3IEEE \space 802.3 ,只介绍 V2 的格式:

  • 前导码:使接收端与发送端时钟同步。在帧前面插入 8 字节还可分为两部分:前同步码和真开始定界符。
  • 地址:6字节(48bit)地址(MAC地址)。
  • 类型:2字节,指出数据与中携带的数据应交给哪个协议实体处理。
  • 数据:46~1500 字节。包含高层的协议信息。由于 CSMA/CD 算法限制,以太网帧必须大于64 字节
  • 填充:0~46字节,数据较少时加以填充,使之达到最小限度。
  • 校验码(FSC):4 字节,校验范围从目的地址段到数据段的末尾,算法采用 CRC,不但需要检验MAC数据部分,还要检验目的地址、源地址和类型字段,不检验前导码。

IEEE 802.3 规定出现以下情况之一即为无效帧:

  1. 帧的长度不是整个字节
  2. 收到的帧检测序列 FCS 有差错
  3. 收到的帧的 MAC 客户数据字段长度不在 46~1500字节之间

IEEE 802.3 标准与以太网V2 格式区别有两个地方:

  1. IEEE 802.3 MAC 帧第三个字段是 “长度/类型”。大于 0x0600就表示类型,这样与以太网 V2 的MAC帧完全一致。小于 0x0600才表示为长度,即 MAC 帧的数据部分长度。数据字段的长度与长度字段值不一致,则该 MAC 帧无效。
  2. “长度/类型” 字段值小于 0x0600 时,数据字段必须装入上面的逻辑链路控制 LLC 子层的 LLC 帧。

扩展的以太网

在物理层扩展以太网

​以太网上主机之间不能太远,否则主机发送的信号经过传输就会衰减到使得 CSMA/CD 协议无法正常工作。在过去,尝使用在物理层工作的转发器扩展以太网地理覆盖范围,两个网段可以用转发器连接在一起。现在,扩展主机与集线器之间使用光纤和一对光纤调制解析器。使用多个集线器可以连接成大范围星形结构以太网。但多级结构的集线器以太网也有缺点:

  1. 三个系的以太网连接前,是三个独立碰撞域,在任意时刻,在每一个碰撞域只有一个站能发送数据。通过集线器互联之后就成为一个碰撞域,当某两个站通信时其他系内部都不能通信。
  2. 不同系使用不同的以太网技术就不可能使用集线器互连起来。

在数据链路层扩展以太网

​最初使用网桥,根据 MAC 帧目的地址进行转发过滤。网桥收到一个帧时,根据帧中的目的 MAC 地址,查找网桥中的地址表,如何确定发往哪个接口,或者丢弃(过滤)。后来交换式集线器淘汰了网桥,称为以太网交换机第二层交换机,强调这种交换机工作在数据链路层

1、以太网交换机特点

​交换机实质是一个多接口网桥,工作在数据链路层。每个接口都直接与一个单台主机或另一个以太网相连,一般工作在全双工模式。具有并行性,能同时连接多接口,使多对主机能同时通信(网桥只能一次分析转发一个帧)。互相通信的主机都是独占传输媒体,无碰撞传输数据。以太网交换机使用专用的交换结构芯片,因此交换效率较高。接口还有存储器,能够在繁忙时对到来的帧进行缓存。能经济地将网络分成小的冲突域,为每个站提供更高的带宽。

​内部的帧交换表又称地址表,通过自学习算法逐渐建立起来。存储式转发将帧缓存到高速缓存器中,检测数据是否正确,无误后通过查找表转换成输出端口将该帧转发出去。有错就将其丢弃。优点:可靠性高,支持不同速率端口间的转换;缺点:延时较大。

直通式交换机只检查帧的目的地址,使得帧能够被立即转发出去。优点:速度快;缺点:缺乏智能性和安全性,不支持不同速率端口的交换。

2、以太网交换机自学习功能

​A向B发送一帧,从接口1进入交换机,查找交换表发现没有目的地址为B的项目,于是将源地址A和接口1写入交换表。然后向所有端口广播该帧,C、D因目的地址不对而丢弃这个帧,只有B才收下这个帧,这个过程称为过滤。交换表(A, 1)可看出,只要目的地址为A就应当从接口1转发出去。同理B向A发送一帧交换表也会记录(B, 3)。

​原理:检测以太端口来的数据帧的源和目的地址的 MAC 地址,然后与系统内部的动态查找表进行对比,若数据帧的 MAC 地址不在查找表中,则将该地址加入查找表,并将数据帧发送给相应的目的端口。

3、总线以太网到星形以太网

​总线以太网使用 CSMA/CD 协议,以半双工方式工作;以太网交换机不使用共享总线,没有碰撞问题,因此不再使用 CSMA/CD 协议,以全双工方式工作。由于帧结构未发生改变,仍然采用以太网的帧结构,所以仍叫做以太网。

虚拟局域网

​利用以太网交换机可以很方便实现虚拟局域网 VLAN,在 IEEE 802.1Q 中这样定义:VLAN 是由一些局域网网段构成的与物理位置无关逻辑组,这些网段有某些共同需求。VLAN 只是一种局域网提供的服务。VLAN 可以限制接收广播信息的计算机数量,使得网络不会因传播过多的广播消息(广播风暴)而引起恶化。在 IEEE 802.3ac 中定义了以太网的帧格式扩展,允许插入一个 4 字节的标识符,称为 VLAN 标识符(tag),指明发送这个帧的计算机属于哪个 VLAN。

高速以太网

100BASE-T 以太网

​$100BASE-T $ 是在双绞线上传送 100 Mbit/s100\space Mbit/s 基带信号的星形拓扑以太网,仍使用 IEEE 802.3 的 CSMS/CD 协议,又称为快速以太网。只需使用 100 Mbit100\space Mbit 的适配器和 100 Mbit100\space Mbit 的集线器或交换机就能由 $10BASE-T $ 升级到 100 Mbit/s100\space Mbit/s ,而不用改变网络的拓扑结构。

吉比特以太网

特点:

  • 允许在 1 Gbit/s1\space Gbit/s 下以全双工和半双工两种方式工作。
  • 使用 IEEE 802.3 协议规定的帧格式。
  • 在半双工方式下使用 CSMA/CD 协议,全双工方式不使用。
  • 与 $10BASE-T $ 和 $100BASE-T $ 技术向后兼容

0x04 网络层

​网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量承诺。

网际协议 IP

与 IP 协议配套使用的协议:

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

还有逆地址解析协议 RARP ,是和 ARP 协议配合使用,现已淘汰。

虚拟互联网

根据中间设备所在层次,可分为以下四种:

  • 物理层:转发器、集线器

  • 数据链路层:网桥、交换机

  • 网络层:路由器

  • 网络层以上:网关,用来连接两个不同的系统需要在高层进行协议的转换

​中间设备是转发器或网桥时,从网络层角度来看,这仍是一个网络,不成为互连。网络互连一般指用路由器进行网络互连和路由选择。有时路由器也称网关。

​由于参加互连的计算机都是用相同的网际协议 IP,因此可以把互联以后的计算机看成一个虚拟互连网络。这种使用 IP 协议的虚拟互联网络可简称 IP 网。虚拟化互联网络就是逻辑互联网络,即互联起来的各种物理网络的异构性本来是客观存在的,但是通过 IP 协议就可以这些网络在网络层看起来是一个统一的网络。IP 网使得主机进行通信时,就好像在单个网络上通信,看不见互连网络具体细节。强调:互联网可以由多种异构网络互连组成

分类的 IP 地址

​IP 地址就是给互联网上每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符,使得可以在互联网上很方便寻址。IP 地址现由互联网名字和数字分配机构 ICANN 进行分配。

A、B、C 类地址都是单播地址(一对一通信);D 类地址(前四位1110)用于多播;E类地址(前四位1111)保留为以后使用。

1、A 类地址

​网络号占一字节,有 7 位可供使用(第一位固定为 0),可指派的网络号位 126 个(2722^{7}-2).网络号全 0 的 IP 地址是保留地址,意思是本网络;网络号为 127 (01111111)保留作为本地软件环回测试进程间通信作用。

​主机号占 3 个字节,A 类网络中最大主机数为 22422^{24}-2。全 0 的主机号字段表示本主机所连接到的单个网络地址,全1 表示该网络上的所有主机

2、B 类地址

​网络号字段占 2 字节,前两位固定(10),剩下 14 位不可能存在全 0(或全 1)。B 类网络地址 128.0.0.0 不分配,但可以指派 B 类最小网络地址 128.1.0.0,所以可指派的网络数为 21412^{14} -1 。B 类网络最大主机数为 21622^{16}-2(除去全 0 和全 1 主机号)。

3、C 类地址

​网络号字段占 3 字节,前三位固定(110)。C 类网络地址 192.0.0.0 不分配,但可以指派 C 类最小网络地址 192.0.1.0,所以可指派的网络数为 22112^{21} -1 。C 类网络最大主机数为 2822^{8}-2(除去全 0 和全 1 主机号)

IP 地址重要特点:

  1. 每一个 IP 地址都由网络号和主机号组成。IP 地址管理机构只分配网络号,主机号由得到网络号的单位自行分配;路由器仅根据目的地址的网络号进行分组转发,减小了路由表占的内存即查找时间。
  2. IP 地址是标志一台主机(或路由)和一条链路的接口。当一台主机连接到两个网络上时,必须同时拥有两个不同的网络号,这种主机称为多归属主机。一个路由器至少连接到两个网络,所以至少有两个不同的 IP 地址。
  3. 用转发器或网桥连接起来的若干个局域网仍为一个网络,这些局域网都拥有同一个网络号。不同网络号的局域网必须通过路由器互连。

IP 地址与硬件地址

​物理地址是数据链路层和物理层使用的地址;IP 地址是网络层及以上各层使用的地址,是一种逻辑地址。发送数据时,数据从高层下到低层。IP 地址包含在 IP 数据报的首部,IP 数据包交给数据链路层就被封装成 MAC 帧。整个 IP 数据报成为 MAC 帧的数据。MAC 帧传送时使用的源地址和目的地址都是硬件地址,都写在 MAC 帧的首部中。路由器由两个硬件地址。

两者区别:

  1. 在 IP 层抽象的互联网上只能看到 IP 数据报。
  2. IP 数据报首部有源站 IP 地址,但路由器只根据目的站的 IP 地址的网络号进行路由选择。
  3. 在局域网的链路层,只能看见 MAC 帧。MAC 帧在不同网络上传输时,MAC 帧首部的源地址和目的地址会变化。
  4. IP 层抽象的互联网屏蔽了下层复杂的细节。只要在网络层讨论问题,就能使用统一的、抽象的 IP 地址研究主机和主机或路由器间的通信。

地址解析协议 ARP

​在实际网络的链路上传送数据帧时,最终必须使用硬件地址,需要使用一种方法来完成 IP 地址到 MAC 地址的映射,这就是 ARP 协议。每台主机都有一个 ARP 高速缓存,用来存放本局域网各主机和路由器的 IP 地址到 MAC 地址的映射表,成为 ARP 表。使用 ARP 动态维护此 ARP 表。

工作原理:

​主机 A 向本局域网某台主机 B 发送 IP 数据报,先在高速缓存中查看有无主机 B 的 IP 地址。有,就可以查出 B 的硬件地址,在将此硬件地址写入 MAC 帧,然后通过局域网将此 MAC 帧发送往此硬件地址;无,就通过使用目的地址为 FF-FF-FF-FF-FF-FF 的帧来封装并广播ARP 请求,使同一个局域网里的所有主机收到 ARP 请求。B 收到 ARP 请求后,向 A 发出响应 ARP 分组(ARP 响应分组时普通单播),分组中包含主机 B 的 IP 与 MAC 地址的映射关系,主机 A 收到后将此分组写入 ARP 高速缓存,然后按查询到的硬件地址发送 MAC 帧。ARP 由于涉及到 IP 地址,所以它工作在网络层,NAT 路由器由于看到了端口,所以它工作在运输层。

IP 数据报格式

​在 TCP/IP 标准中,各种数据格式常以 32 位为单位来描述。IP 数据报由首部和数据两部分组成,首部前部分为固定长度 20 字节,是所有 IP 数据报必须有的。固定部分后面是可选字节,长度是可变的,可变部分是为了增加 IP 数据报的功能。

IP 首部重要字段含义如下:

  1. 版本:IP 的版本,目前广泛版本号为 4.

  2. 首部长度:占 4 位。以 32 位为单位。可表示最大十进制数值是 15(15✖4B)。最常用首部长度为 20B,此时不使用任何选项。

  3. 总长度:占 16 位。指首部和数据之和的长度,单位是字节,最大长度为 2161=655352^{16}-1=65535以太网最大传送单元(MTU)为 1500B

  4. 标识:占 16 位。每产生一个数据报就加一,并赋值给标识字段。但它并不是“序号”(IP 是无连接服务)当数据报长度超过 MTU 时必须分片,此时每个数据报都复制一次标识号,以便能还原原来的数据报。

  5. 标志:占 3 位。标志字段最低位为 MF,MF 为 1 表示后面还有分片,0 则表示最后一个分片。标志字段中间还有一位 DF ,DF=0 时才允许分片。

  6. 片偏移:占 13 位。指出较长分组在分片后,某片在原分组中的相对位置,单位 1=81偏移=8字节

  7. 首部校验和:16 位。IP 数据报的首部校验和只校验分组的首部,而不校验数据部分。

    方法:

    ​发送方,把 IP 数据报首部划分为许多 16 位字序列,把检验和字段置 0。用反码算术运算把所有 16 位字相加后,得到的和的反码写入检验和字段。接收方收到数据报,将首部所有 16 位字再使用反码算术运算再算一遍,得到的和取反码。若首部未发生变化则该值一定为 0,于是保留这个数据报,否则丢弃。(数据部分不参与检验和计算)

  8. 生存时间(TTL):占 8 位。数据报在网络中可通过的路由器数的最大值,标识分组在网络中寿命,以确保分组不会永远在网络中循环。路由器转发前,先把 TTL 减一。若 TTL 为 0,则该分组必须丢弃。

  9. 协议:占 8 位。指出此分组携带的数据使用何种协议,即分组的数据部分应交给哪个传输协议。

  1. 源地址字段:占 4B,标识发送方的 IP 地址。

  2. 目的地址字段:占 4B,标识接收方的 IP 地址。

IP 层转发分组

​在互联网上转发分组时,是从一个路由器转发到下一个路由器。在路由表中每一条路由主要信息为(目的网络地址,下一跳地址)。分组转发都是基于目的主机所在的网络,大多数情况下允许特例,即对特定目的主机都指明一个路由,这种路由叫做特定主机路由默认路由可以减小路由表所占用的空间和搜索路由表所用的时间。

分组转发算法:

  1. 从数据报首部提取目的主机的 IP 地址 D,得出目的网络地址为 N
  2. 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付,直接将数据报交付给目的主机;若为间接交付执行 3
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传给路由表中所指明的下一跳路由器;否则执行 4
  4. 若路由表有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行 5
  5. 若路由表有一默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行 6
  6. 报告转发分组出错

总结:1、有网络地址则直接交付,2、否则查看特定主机路由,3、再否则查路由表到目的主机网络的路由,4、再再否则使用默认路由,5、再不行就报错。

划分子网、构造超网

划分子网

ARPANET 时期两级 IP 地址缺点:

  • IP 地址空间利用率有时很低

  • 给每个物理网络分配一个网络号会使路由表变太大而使网络性能变坏

  • 两级 IP 地址不够灵活

在 IP 地址中又增加了一个“子网号字段”,使两级 IP 地址变成三级 IP 地址。成为子网划分

基本思路:

  • 子网划分纯属一个单位内部的事情。单位对外表现为没有划分子网的网络。

  • 从主机号借用若干位比特作为子网号,主机号对应减少相同比特。三级 IP 地址结构如下:

    IP=<>,<>,<>IP 地址={<网络号>,<子网号>,<主机号>}

  • 凡是从其他网络发给本单位某主机的 IP 数据报,仍是根据 IP 数据报中的目的网络号,先找到连接到本单位网络的路由器。然后该路由收到 IP 数据报以后,按目的网络号和子网号找到目的子网。最后将 IP 数据报直接交付给目的主机。

注意:划分子网只是对主机号这部分再划分,不改变网络号。从 IP 地址本身或 IP 数据报首部,无法判断源主机或目的主机连接网络是否进行了划分。对分类的 IPv4 地址进行子网划分时,子网号不能全1或全0;但 CIDR 的广泛使用,现在全0全1子网号也可使用,但要根据路由选择软件是否支持。无论 IPv4 还是 CIDR,全0全1的地址都不能被指派。

子网掩码

​为告诉主机或者路由器对一个 A、B、C类网络进行了子网划分,使用子网掩码来表达对原网络主机号的借位。子网掩码是与 IP 地址相对应的二进制串,由一串1和跟随的一串0组成。1 对应 IP 地址中的网络号及子网号;0 对应主机号。计算机只需要将子网掩码与 IP 地址逐位“与”(AND运算),就可以得出子网的网络地址

​子网掩码是一个网络或一个子网的重要属性。路由器在互相交换路由信息时,必须把自己所在网络的子网掩码告诉对方。路由表中每个条目,除要给出目的网络地址和下一跳地址外,还需要目的网络的子网掩码。

使用子网掩码情况:

  1. 一台主机在设置 IP 地址时,必须要设置子网掩码。
  2. 属于同一个子网的所有主机或路由器,需设置相同的子网掩码。
  3. 路由表中,包含信息主要内容必须有目的网络地址、下一跳地址、目的网络的子网掩码。

使用子网掩码时路由分组转发算法:

  1. 收到分组 IP 的首部提取的目的 IP 地址,记为 D。
  2. 判断是否直接交付。使用对路由器直连的网络的子网掩码和 D 逐位 AND,看结果是否和相应的网络地址匹配。匹配,则直接交付分组;否则间接交付,下一步
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传给路由表中所指明的下一跳路由器;否则执行 4
  4. 对路由表中的每一行(目的网络地址、下一跳地址、目的网络的子网掩码)中的子网掩码和 D 逐位 AND,结果为 N。若 N 与该行目的网络地址匹配,则将分组传送给表中指明的下一跳路由器;否则执行 5
  5. 若路由表有一默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行 6
  6. 报告转发分组出错

无分类域间路由选择CIDR(构造超网)

​在变长子网掩码基础上提出一种消除 A、B、C类网络划分,且可以在软件支持下实现超网构造的一种 IP 地址划分方法。

特点如下:

  1. 消除了传统消除 A、B、C类网络划分子网概念,更有效分配 IPv4 的地址空间。使用网络前缀概念代替子网络概念。使用“斜线记法”,即 IP 地址/网络前缀所占比特数。其中网络前缀所占比特数对应网络号部分,等效于子网掩码中连续 1 的部分。如 128.13.32.5/20,掩码是20个连续的 1 和后续 12 个连续的 0,逐位 AND 得到该地址网络前缀(或直接截取前20位)

    IP::=<>,<>IP::={<网络前缀>,<主机号>}

  2. 将网络前缀都相同的连续 IP 地址组成“CIDR地址块”。一个 CIDR 地址块可以表示很多地址,这种地址聚合称为路由聚合,或构成超网。路由聚合使得路由表中一个项目可以表示多个原来传统分类地址路由,利于减少路由器间选择信息的交换。

​CIDR 地址块中的地址数一定是2的整数次幂,实际可指派地址数通常为 2N22^N-2,N表示主机号的位数,主机号全0表示网络号,全1表示广播地址。使用 CIDR 时,路由表每个项目由“网络前缀”和“下一跳地址”构成。从匹配结果中选取最长网络前缀匹配的路由,因为越长越具体,这叫做最长前缀匹配

网际控制报文协议 ICMP

​为提高 IP 数据报交付成功机会,在网络层使用了国际控制报文协议 ICMP 来让主机或路由器报告差错和异常情况。ICMP 报文作为 IP 层数据报的数据部分,加上数据报的首部,组成 IP 数据报发送出去。ICMP 是 IP 层协议。ICMP 有两种类型,ICMP 差错报告报文ICMP 查询报文

有以下5种类型:

  1. 终点不可达:主机或路由器不能交付数据报时,向源点发送。
  2. 源点抑制:当路由器或主机丢弃数据报时,向源点发送。
  3. 时间超过:收到 TTL 为零的数据报时,丢弃数据报且向源点发送。
  4. 参数问题:收到的数据报首部有的字段值不正确时,丢弃并向源点发送。
  5. 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应该发送的路由器。

不应当发送 ICMP 差错报文情况:

  1. 对 ICMP 差错报文不再发生 ICMP 差错报文。
  2. 对第一分片的数据报片的后续片都不发生 ICMP 差错报文
  3. 对具有组播地址的数据报不发送
  4. 对特殊地址 127.0.0.0或0.0.0.0 的数据报不发送

​ICMP 询问报文有 4 种类型:回送请求和回答报文、时间戳请求和回答报文、掩码地址请求和回答报文、路由询问和通告报文,常用前两种。ICMP 常见应用是:分组网间探测 Ping 和 Traceroute。Ping 使用了 ICMP 回送请求和回答报文,Ping 工作在应用层;Traceroute使用了 ICMP 时间超过报文,工作在网络层。

互联网的路由选择协议

路由选择:路由器根据特定的路由选择协议构造出路由表,同时经常或定期和相邻路由器交换路由信息而不断更新和维护路由表。一般指按照复杂的分布式算法,根据从相邻路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择路由

互联网采用分层次的路由选择协议原因:

  1. 互联网规模巨大,如果让所有路由知道所有网络应怎样到达,路由表就非常大,处理时间也长,容易使通信链路达到饱和。
  2. 单位在连接互联网的同时不愿让外界了解自己的网络布局细节和路由选择协议。

自治系统

​自治系统 AS :单一技术管理下的一组路由器,这些路由器选择一种 AS 内部的路由选择协议和共同的度量来确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议来确定 AS 之间的路由。一个自治系统内的所有网络都由一个行政单位管理(大学、公司等),一个自治系统的所有路由器在本自治网络系统内都是连通的。在目前互联网,一个大的 ISP 就是一个自治系统。

域内路由与 域间路由

自治系统内部路由选择称为域内路由选择,自治系统之间的路由选择称为域间路由选择。因特网有两大类路由选择协议:

  • 内部网关协议 IGP:内部网关协议在一个自治系统内部使用的路由选择协议,它与互联网种其他自治系统选用什么路由选择协议无关。如 RIP 和 OSPF。
  • 外部网关协议 EGP :若源站和目的站处于不同的自治系统中,当数据报传到一个自治系统边界时(两个系统可能使用不同 IGP),就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议称为外部网关协议(EGP)。如 BGP-4。

路由信息协议 RIP

​路由信息协议 RIP,是内部网关协议(IGP)中最广泛应用的协议。RIP 是一种分布式基于距离向量的路由选择协议,优点是简单。

RIP 规定:

  1. 网络中每个路由器都要维护从他自身到每个目的网络的距离记录(称为距离向量)。
  2. 距离也称跳数(Hop Count),规定从一个路由器到直接连接网络的距离(跳数)为1。每经过一个路由器,距离加1。
  3. RIP 认为好的路由就是通过路由器数目少,即优先选择跳数少的路径。
  4. RIP 允许一条路径最多包含15个路由器。当距离等于16时,表示网络不可达,可见 RIP 只适用于小型网络,规定上限是为了防止数据报在环路上循环,减少网络拥塞的可能。
  5. RIP 默认在任意两个使用 RIP 的路由器之间每30秒广播一次 RIP 路由更新信息,以便动态建立并维护路由表。
  6. RIP 中不支持子网掩码的 RIP 广播,所以每个 RIP 中的每个网络的子网掩码必须相同。RIP2 中支持。

RIP 特点:

  1. 仅和相邻路由器交换信息。
  2. 交换的信息是当前路由器的全部信息,即自己的路由表。
  3. 按固定的时间间隔交换路由信息,如30秒。

RIP 通过距离向量算法来完成路由表的更新,具体算法:

  1. 地址为 X 的相邻路由器发过来的 RIP 报文,先修改报文中所有项目:把“下一跳”字段中的地址都改为 X,并把所有“距离”字段的值加1
  2. 对修改后的 RIP 报文中的每个项目,执行如下步骤:
    1. 当原来的路由表中没有目的网络 N 时,把该项目添加路由表中
    2. 当原来的路由表中有的网络 N,且下一跳路由器的地址也是 X 时,用收到的项目替换原路由表的项目
    3. 当原来的路由表中有目的网络 N,且下一跳路由器的地址不是 X 时,如果收到的项目中的距离 d 小于路由表中的距离,那么就用收到的项目替换原路由表中的项目:否则什么也不做。
  3. 如果180秒(默认超时时间)还没收到相邻路由器的更新路由表,那么把此相邻路由器记为不可达路由器,即把距离设置为16。
  4. 返回

缺点:

  1. RIP 限制了网络的规模,最大距离为15。

  2. 路由器之间交换的是路由器中的完整路由表,此网络规模越大,开销越大。

  3. 网络故障时,会出现慢收敛现象(需要较长时间才能将此信息传送到所有路由器),俗称“坏消息传得慢”。

    RIP 是应用层协议,它使用 UDP 传送数据(端口520)。RIP 选择路径不一定是时间最短的,但一定是具有最少路由器的路径。根据最少的跳数进行路径选择。

开放最短路径优先 OSPF 协议

OSPF 协议基本特点:使用分布式链路状态协议,是内部网关协议 IGP 的一种。与 RIP 的区别如下

  1. OSPF 向自治系统中的所有路由器发送信息,使用洪泛法。RIP 仅向自己相邻的路由器发送信息。
  2. 发送信息的是与本路由器相邻的所有路由器的链路状态,但只是路由器所知道的部分信息。“链路状态”说明本路由器和哪些路由器相邻及该链路的“度量”。而 RIP 中,发送信息为本路由器知道的全部信息,即路由表。
  3. 只有当链路状态发送变化时,路由器才会用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现“坏消息传得慢”。RIP 中定期交换路由表信息。
  4. OSPF 是网络层协议,不用 UDP 或 TCP,直接用 IP 数据报传送(首部协议字段为89).RIP 是应用层协议,在传输层使用 UDP。

还有以下特点:

  1. OSPF 对不同链路可根据 IP 分组得不同服务类型设置不同代价。对不同类型得业务可计算出不同得路由。

  2. 如果到同一个网络有多条相同代价得路径,可将通信量分配给这几条路径。称为多路径间的负载平衡

  3. 在 OSPF 路由器之间交换的分组都有鉴别功能,保证仅在可信赖的路由器之间交换链路状态信息。

  4. 支持可变长度的子网划分和无分类编址的 CIDR。

  5. 每个链路状态都带上一个32位序号,序号越大,状态越新

OSPF 基本工作原理:

​由于各路由器间频繁交换链路状态信息,所有路由器最终能能建立一个链路状态数据库。这个数据库实际上就是全网拓扑结构图,在全网范围内一致(链路状态数据库同步)。每个路由器根据这个拓扑图,用 DIJSKTRA 最短路径算法计算从自己到各个目的网络的最优路径,以此构造自己路由表。当链路状态发送变化时,每个路由器重新计算到各目的网络的最优路径,构造新路由表。路由表中不会存储完整路径,只存储“下一跳”。

​为了使 OSPF 适用于更大的网络,OSPF 将一个自治系统划分若干小范围,称为区域。好处是利用洪泛法交换链路状态信息范围局限于每小区域并非整个自治系统,减少了整个网络通信量。区域内部的路由器只需要只要本区域的完整网络拓扑,不知道其他区域的。处在上次的域称为主干区域,负责连通下层区域,并且连接其他自治域。从其他区域来的信息都由区域边界路由器进行概括,每个区域至少一个区域边界路由器。主干区域还需要有一个自治系统边界路由器专门和本自治系统外的其他自治系统交换路由信息。

OSPF 五种分组类型:

  1. 问候分组:用来发现和维持邻站的可达性

  2. 数据库描述分组:向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息

  3. 链路状态请求分组:向对方请求发送某些链路状态项目的详细信息

  4. 链路状态更新分组:用洪泛法对全网更新链路状态

  5. 链路状态确认分组:对链路更新分组确认

    每隔10秒,两个相邻路由交换一次问候分组。在路由器刚开始工作时,OSPF 让每个路由器使用数据库描述分组和相邻路由器交换数据库中已有的链路状态摘要信息。然后路由器使用链路状态请求分组,向对方请求发送自己缺少的某些链路状态项目的详细信息。经过一系列分组交换,就建立了全网同步的链路数据库。

只要一个路由器链路状态发生变化,该路由器就要使用链路状态更新分组,使用洪泛法向全网更新链路状态,其他路由器更新后,发送链路状态确认分组对更新分组进行确认。

OSPF 规定每隔一段时间就刷新一次数据库中链路状态,为确保链路状态数据库与全网状态保持一致。因为路由器的链路状态只与相邻路由器的连通状态,因而与整个网络并无直接关系。

外部网关协议 BGP

​不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。边界网关协议常用于互联网的网关之间。路由表包含路由器的列表、路由器能够达到的地址及到达每个路由器的路径有效跳数。内部网关协议主要设法使数据报在一个 AS 中尽可能有效从源站传送到目的站。在一个 AS 内部不需要考虑其他方面的策略。BGP 使用的环境不同,原因:

  1. 因特网规模太大,使得自治系统之间路由选择非常困难。
  2. 对于自治系统之间的路由选择,要寻找最佳路由不现实。
  3. 自治系统之间的路由选择必须考虑有关策略。

​BGP 只能力求寻找一条能够到达目的网络且比较好的路由,而并非一条最佳路由,BGP 采用的是路径向量路由选择协议,他与距离向量和链路状态协议有很大区别。BGP 是应用层协议,基于 TCP。原理如下:每个自治系统的管理员要选择至少一个路由器作为该自治系统的 BGP 发言人。一个发言人与其他自治系统中的发言人要交换路由信息,要先建立 TCP 连接(BGP 报文通过 TCP 传送,也就是说 BGP 报文是 TCP 报文的数据部分),然后在此连接上交换 BGP 报文建立 BGP 会话,再利用 BGP 会话交换路由信息。当所有 BGP 发言人都互相交换网络可达性的信息后,各 BGP 发言人就可找出到达各个自治系统的较好路由。

​每个 BGP 发言人出必须运行 BGP 之外,还必须运行该 AS 所使用的内部网关协议,RIP、OSPF 。BGP所交换的网络可达性信息就是要到达某个网络所要经过的一系列 AS。特点如下:

  1. BGP 交换路由信息的结点数量级是自治系统数量级,比这些自治系统中的网络数少很多。
  2. 每个自治系统中的 BGP 发言人的数目是很少的。为了自治系统间路由选择不过分复杂。
  3. 支持 CIDR,BGP 的路由表也就对应应当包括目的网络前缀、下一跳路由,以及到达该目的网络所要经过的各个自治系统序列。
  4. BGP 刚运行时,BGP 的邻站交换整个 BGP 路由表,但以后只需发生变化时更新有变化的部分。这样对节省网络带宽和减少路由器开销有好处

BGP-4 四种报文:

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

路由器结构

​路由器时一种具有多个端口和多个输出的专用计算机,任务是转发分组。按结构可分为:路由选择部分和分组转发部分,路由选择也叫控制部分。下图方框中的1,2,3分别代表物理层、数据链路层和网络层的处理模块,分别用于比特接收、接收传送分组的帧、脱去首尾部进行网络层处理。

IPv6

与 IPv4 的区别

IPv6 支持无连接传送,将协议数据单元称为分组,而不是 IPv4 的数据报。主要变化如下

  1. 更大地址空间:从 32 位增大到 128 位,地址空间扩大 2962^{96} 倍。
  2. 扩展的地址层次结构
  3. 灵活的首部格式:与 IPv4 首部不兼容,定义许多可选的扩展首部,更多功能。
  4. 改进的选项:允许数据报包含有选项的控制信息。IPv6 首部长度固定,其选项在有效载荷中。
  5. 允许协议继续扩充:而 IPv4 功能是固定不变的。
  6. 支持即插即用
  7. 支持资源的预分配
  8. 首部改为8字节对齐,首部长度必须是8字节的整数倍,IPv4 为4字节。

首部字段

​IPv6 数据报由基本首部有效载荷(也称净负荷),有效载荷允许零个或多个扩展首部,再后面是数据部分,但注意扩展首部不属于数据报首部也不属于数据部分。

IPv6 各字段作用:

  1. 版本:占4位,对于为6.
  2. 通信量类:占8位,区分不同的IPv6数据报的类别或优先级
  3. 流标号:占20位,就是互联网络上从特点源点到特定终点(单播或多播)的一系列数据报。所经过路径上的路由器都保证指明的服务质量。
  4. 有效载荷长度:占16位,指明除首部以外的字节数,最大为64KB
  5. 下一个首部:占8位相当于 IPv4 协议字段或可选字段。当没有扩展首部时,下一首部字段的作用相当于 IPv4 协议字段,它的值指出基本首部后面的数据应交付 IP 层上面的哪一个高层协议。出现扩展首部时,下一首部字段的值就标识后面第一个扩展首部的类型。
  6. 跳数限制:占8位,防止数据报在网络中无期限存在。
  7. 源地址:占128位,发送端的IP地址
  8. 目的地址:占128,接收端的IP地址

IPv6 地址

IPv6 数据报目的地址一般是以下三种基本类型地址之一

  1. 单播:点对点的通信
  2. 多播:一点对多点的通信,IPv6 中没有广播的术语
  3. 任播:IPv6 增加的一个类型,终点是一组计算机,数据报只交付其中一个,通常距离最近的一个 。

IPv6 中的主机和路由器均成为结点。一个结点可能会使用多条链路与其他一些结点相连。使用冒号十六进制记法,把每16位值用十六进制值表示,各值间用冒号分隔:68F8:88FB:0:0:0:0:0:FFFF68F8:88FB:0:0:0:0:0:FFFF 可压缩为 68F8:88FB::FFFF68F8:88FB::FFFF 。只能使用一次压缩法。CIDR 斜线表示法仍可用。

  • 未指明地址:16字节全0地址,可缩写为 : : 。不能用作目的地址,只能为某主机当源地址,条件是该主机还未配置一个标准 IP 地址。
  • 环回地址:作用和 IPv4 的一样
  • 多播地址:功能和 IPv4 一样,占总数的 1/256
  • 本地链路单播地址:有些单位网络使用 TCP/IP 协议,并没有连接到互联网上。连接在这样网络上的主机可以使用本地地址进行通信。
  • 全球单播地址:

IPv4 向 IPv6 的过渡

​只能采用逐步演进的方法,同时必须使新安装的 IPv6 系统能够向后兼容,也就是 IPv6 系统必须能够接收和转发 IPv4 分组,并且能为 IPv4 分组选择路由。

双协议栈:

​指完全过渡之前,使一部分主机(或路由器)安装双协议栈:IPv4 和 IPv6。双协议主机(或路由器)能够同时和 IPv4 和 IPv6 的系统通信,也表明有两种 IP 地址。

隧道技术:

​IPv6 数据报进入 IPv4 网络时,把 IPv6 数据报封装成 IPv4 数据报,整个 IPv6 变成 IPv4 数据报的数据部分。要使主机知道 IPv4 数据报封装的数据是一个 IPv6 数据报,必须把 IPv4 首部协议字段设置为41(表示数据部分是 IPv6 数据报)。

ICMPv6

​和 IPv4 一样, IPv6也不需要保证数据报的可靠交付。使用 ICMPv6,地址解析协议 ARP 和网际管理组协议 IGMP 都已合并到 ICMPv6 中。

VPN 和 NAT

VPN

RFC 1918 指明了一些专用地址,这些地址只能用于内部通信,不能和互联网上主机通信。专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。

10.0.0.0 ~ 10.255.255.255 或记为 10.0.0.0/8,本用于 ARPANET

172.16.0.0 ~ 172.31.255.255.255 或记为 127.16.0.0/12

192.168.0.0 ~ 192.168.255.255 或记为 192.168.0.0/16

​分别相当于 A 类地址、16各连续的 B 类网络和256 个连续的 C 类地址。采用专用 IP 地址的互连网称为专用互联网本地互联网,也叫专用网。专用 IP 地址也叫做可重用地址。

​专用网若必须通过公共互联网,但又要求保密,那么所有通过互联网传送的数据都必须加密。VPN “虚拟”表示实际上并不是,只是效果上和真正专用网一样。构建 VPN 就必须为每一个场所购买专门的硬件和软件进行配置。

网络地址转换 NAT

​NAT 指通过专用网络地址转换为公网地址,从而对外隐藏内部管理的 IP 地址。使得整个专用网只需要一个全球 IP 地址就可以与因特网连通,由于专用网本地 IP 地址是可重用的,大大节省 IP 地址消耗。也降低内部网络遭受攻击的风险。

​使用 NAT 需要在专用网连接到因特网的路由器上安装 NAT 软件,NAT 路由器至少有一个有效的外部全球地址。NAT 路由器使用 NAT转换表将本地地址转换成全球地址,或逆转换。BAT 转换表存放着 {本地 IP 地址:端口} 到 {全球 IP 地址:端口} 的映射。可让多个私有 IP 地址映射到同一个全球 IP 地址。

​注意:普通路由器转发 IP 数据报时,不改变其源 IP 地址和目的 IP 地址。NAT 路由器转发 IP 数据报时,一定更换其 IP 地址。普通路由器工作在网络层,NAT 路由器转发数据报时需要查看和转换传输层的端口号。

0x05 传输层

功能概述

​从通信和信息处理角度看,传输层向它上面应用层提供通信服务,属于面向通信部分的最高层,也是用户功能中的最低层。

​传输层位于网络层之上,它为运行在不同主机上的进程之间提供了逻辑通信,网络层提供主机之间的逻辑通信。即使网络层协议不可靠,传输层也能为应用程序提供可靠的服务。

​网络边缘部分中两台主机使用网络核心部分进行端到端通信时,只有主机的协议栈才有传输层和应用层,网络核心部分中的路由器在转发分组时都只用到下面三层的功能。(在通信子网中没有传输层,传输层只存在通信子网以外的主机中)

功能如下:

  1. 提供应用进程之间的逻辑通信(端到端通信)。与网络层区别,网络层提供主机之间的逻辑通信,通信双方是主机,IP 数据报首部给出两台主机 IP 地址,但实际上是主机中的应用进程之间的通信,进程之间的通信又称端到端的逻辑通信。意思是:传输层之间的通信好像是沿水平方向传送数据的,实际上并没有这样一条物理连接。
  2. 复用和分用。复用是指发送方不同的应用程序都可使用同一个传输层协议传送数据:分用是指接收方在剥去报文首部后能够把这些数据正确交付目的应用进程。
  3. 传输层还要对收到的报文进行差错检测(首部和数据部分)。网络层只检测 IP 数据报的首部,不检测数据部分。
  4. 提供两种不同的传输协议,TCP 和 UDP。网络层无法同时实现两种协议(网络层只能同时提供一种服务,如面向连接的服务,虚电路;无连接服务,数据报)。

向高层用户屏蔽了底层网络核心细节(网络拓扑,路由协议等),使应用进程看起来像在传输层实体间一条端到端的逻辑通信信道。会对上层表现会因传输协议不同有很大差别。传输层采用 TCP 协议时,尽管网络层是不可靠的,但这种信道相当于一条全双工可信信道;采用 UDP 时,仍是一条不可靠信道。

两个主要协议

  1. 用户数据报协议 UDP
  2. 传输控制协议 TCP

按OSI术语,两个对等运输实体在通信是传送的数据单位叫做运输协议数据单元 TPDU,在 TCP/IP 体系中,分别称为 TCP 报文段UDP 用户数据报

​UDP 传输数据前不需要先建立连接,目的主机收到 UDP 报文后不需要给出任何确认,某些情况 UDP 时最有效的工作方式。在 IP 之上仅提供两个附加服务:多路复用和对数据的错误检查。适用于小文件传送协议 TFTP、DNS、SNMP、实时传输协议RTP

​TCP 提供面向连接的服务,传输数据前必须先建立连接,整个连接情况实时被监控和管理数据传送结束后要释放连接。TCP 不提供广播或多播服务。由于提供可靠、面向连接运输服务,不可避免增加许多开销,会使协议首部增大很多,占用处理机资源,适用于可靠性强的场合,如FYP、HTTP、TELNET。

传输层寻址与端口

端口作用

​让应用层各种应用进程将其数据通过端口向下交付给传输层,让传输层知道应当将其报文端中的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点(TSAP),它在传输层作用类似于 IP 地址(该层的SAP)在网络层的作用或 MAC 地址(该层的SAP)在数据链路层作用,只不过端口标识是主机中的应用进程。

​在协议栈层间的抽象的端口是软件端口,与路由器交换机上的硬件端口概念不同。硬件端口是不同硬件设备进行交互的接口,软件接口是应用层各种协议进程与传输实体进行层间交互的一种地址。传输层使用的是软件端口。

端口号

应用进程通过端口号进行标识,端口长度为 16 bit,能够标识 65536 个不同的端口号。端口号只具有本地意义,在因特网中不同计算机的相同端口号没有联系。可分为两类:

  1. 服务端使用端口号。熟知端口号,0~1023,IANA(互联网地址指派机构)把这些端口号指派给了 TCP/IP 最重要的一些应用程序,让所有用户都知道。另一类为登记端口号,1024 ~ 49151,提供没有熟知端口号的应用程序使用,必须在 IANA 等级,以防重复。常见熟知端口号:
    | 应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
    | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
    | 熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 |

  2. 客户端使用的端口号,数值为 49152 ~ 65535。这类端口号仅在客户进程运行时才动态选择,称为短暂端口号临时端口)。通信结束后,刚用过的客户端口号就不复存在,从而端口号就可供其他客户进程使用。

套接字

​在网络中通过 IP 地址来标识和区别不同主机,通过端口号来标识和区分一台主机中的不同应用进程。在网络中采用发送方和接收方的套接字(Socket)组合来标识端点。套接字实际就是一个通信端点,即

=PI套接字=(主机PI地址,端口号)

唯一标识网络中的一台主机和其上面的一个应用进程。

用户数据报协议 UDP

UDP 数据报

RFC 768定义的 UDP 只是做了传输协议能做的最少工作,运行在传输层,仅在 IP 的数据报服务之上增加了两个基本服务:复用和分用以及差错检测。如果开发者选择 UDP,那么应用程序几乎直接与 IP 打交道。优点如下:

  1. UDP 无须建立连接,因此不会引入建立连接的时延。

  2. 无连接状态。

  3. 分组首部开销小。TCP 首部有20B 的首部开销,UDP 只有 8B.

  4. 应用层能更好地控制要发送的数据和发送时间。UDP 没有堵塞控制,因此网络中的拥塞不会影响主机的发送速率。某些实时应用要求稳定的速度发送,能容忍一些数据丢失,但不允许有较大时延,UDP 正好满足这些应用需求。

常用于一次性传输较少的数据的网络应用,DNS、SNMP等。常用于多媒体应用(IP 电话、实时视频会议等)。可靠传输对这些应用不是最重要的,TCP 的拥塞控制会使数据出现较大延迟。

​UDP 提供尽最大努力交付,即不保证可靠交付,但不意味应用对数据的要求是不可靠的,因此所有维护传输可靠性工作在应用层完成。应用实体可根据应用需求灵活设计自己的可靠性机制。

​UDP 是面向报文的,发送方 UDP 对应用层交下来的报文,添加首部后就下交付给 IP 层,既不合并,也不拆分。留报文边界;接收方 UDP 对 IP 层交上来 UDP 用户数据报,去除首部就原封不动上交给上层应用进程,一次性交付一个完整的报文。报文不可分割,是 UDP 数据处理最小单位。

首部格式

数据报包含两部分:UDP 首部和用户数据,整个UDP 数据报作为 IP 数据报的数据部分封装在 IP 数据报中。首部有 8B,由4个字段组成,每字段长度都是 2B。

各字段含义如下:

  1. 源端口:源端口号,需要对方回信时选用,不需要时全0。
  2. 目的端口:目的端口号,在终点交付报文时必须使用到。
  3. 长度:UDP 数据报长度(包括首部和数据),最小值是8(仅有首部)。
  4. 校验和:检测 UDP 数据报在传输中是否有错。有错就丢弃。字段可选,当源主机不想计算校验和时,可全0。

当传输层从 IP 层收到 UDP 数据报时,根据首部中目的端口,把 UDP 数据报通过相应的端口上交给应用进程。如果接收方 UDP 发现报文中目的端口号不正确,则丢弃该报文,并由 ICMP 发送端口不可达差错报文给对方.

UDP 校验

​计算校验和时,要在 UDP 数据报前加上 12B 的伪首部,并不是 UDP 的真正首部。只是计算校验和时,临时添加在 UDP 数据报前,得到一临时数据报。伪首部既不上交也不下传。这样的校验和,对 IP 数据报的源 IP 地址和目的 IP 地址进行了检验。

​UDP 校验和计算方法和 IP 数据报首部校验和计算方法相似,都使用二进制反码运算求和再取反,不同在于,IP 数据报的校验只检验 IP 数据报首部,UDP 校验和则检测首部和数据部分。过程如下:

  1. 发送方把全零放入校验和字段并添加伪首部,然后把 UDP 数据报视为许多 16 位的字连接起来。若 UDP 数据报的数据部分不是偶数个字节,则要再末尾增加一个全零字节(不发送)。
  2. 按二进制反码计算这些16位字的和,并将此和的二进制反码写入校验和字段
  3. 接收方把收到的 UDP 加上伪首部(不为偶数个字节,需补全零字节)后,按二进制反码计算出这些16位字和。
  4. 无差错是,结果应为全1,否则表明有差错,接收方应丢弃。

TCP 协议

TCP 特点

TCP 是在不可靠 IP 层上实现可靠的数据传输协议,主要解决传输的可靠、有序、无丢失和不重复问题,主要特点如下:

  • TCP 是面向连接的传输层协议

  • 每条 TCP 连接只能有两个端点,TCP 连接只能是点对点的。

  • TCP 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。

  • TCP 提供全双工通信,允许通信双方在任何时候都能发送数据,TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

    发送缓存主要存放:① 发送应用程序传送给发送方 TCP 准备发送的数据;② TCP 已发送但尚未收到确认的数据。

    接收缓存主要存放:① 按需到达但尚未被接收应用程序读取的数据;② 不按序到达的数据。

  • TCP 是面向字节流的,虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序下发的数据仅视为一连串无结构的数据流。

TCP 报文段

​TCP 传送的数据单元称为报文段。分为 TCP 首部和 TCP 数据两部分,整个 TCP 报文段作为 IP 数据报的数据部分封装在 IP 数据报中,如下图所示。首部前 20 B 是固定的。首部最短为 20B,后面有 4N 字节按需增加,通常长度为 4B 的整数倍。

各字段意义如下:

  1. 源端口和目的端口字段各占 2B:端口是运输层与应用层的服务接口,运输层复用和分用功能都要通过端口实现。

  2. 序号字段:占 4B。TCP 是面向字节流的(TCP 传送时是逐个字节传送),所以 TCP 连接传送的数据流中的每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号

    例如,一报文段的序号字段值是 301,携带的数据共 100B,表明本报文段的数据的最后一个字段的序号是 400B,因此下一个报文段的数据序号应从401开始。

  3. 确认号字段:占 4B,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为 N,则表明到序号 N-1 为止的所有数据都已正确收到。

  4. 数据偏移(首部长度):占 4 位,这不是 IP 数据报的片偏移,而是表示首部长度,指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远

  5. 保留字段:占 6 位,保留今后使用,目前置为0,可忽略。

  6. 紧急位 URG:URG=1 时,表明紧急指针字段有效。告诉系统报文段中有紧急数据,应尽快送达(相当于高优先级数据)。但 URG 需要和紧急指针配套使用,数据从第一个字节到紧急指针所指字节就是紧急数据。

  7. 确认位 ACK:ACK=1 时确认号字段有效。ACK=0 时确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置1。

  8. 推送位 PSH:接收 TCP 收到 PSH=1 的报文段,就尽快交付给接受应用进程,而不等缓存填满后再上交。

  9. 复位位 RST:RST=1 时,表明 TCP 连接出现严重差错,必须释放连接,然后重新建立运输连接。

  10. 同步位 SYN:SYN=1 时,表明这是一个连接请求或连接接收报文。

  11. 终止位 FIN:用来释放一个连接。FIN=1 表明此报文段的发送方的数据已发送完毕,并要求释放连接。

  12. 窗口字段:占 2B,指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据,单位为字节

    确认号是 701,窗口字段是1000。表明从701起,发送此报文段的一方还有接收 1000B 数据(字节序号 701~1700)的接收缓存空间。

  13. 校验和:占 2B,校验和字段检验的范围包括首部的数据两部分。计算校验和时,和 UDP 一样,再 TCP 报文段前加 12B 的伪首部。

  14. 紧急指针字段:占16位,指出本报文段中紧急数据共有多少字节(紧急数据放在报文段数据最前面)

  15. 选项字段:长度可变,TCP 只规定了一种选项——最大报文段长度(MSS),是数据字段的最大长度。

  16. 填充字段:这是为了使整个首部长度是 4B 的整数倍

TCP 连接管理

​TCP 是面向连接的协议,每个 TCP 连接都由三个阶段:连接建立、数据传送、连接释放。TCP 连接管理就是使运输连接的建立和释放都能正常进行。连接过程要解决三个问题:

  1. 每一方都能确知对方的存在
  2. 允许双方协商参数
  3. 对运输实体资源进行分配

TCP 把连接作为最基本的抽象,每条 TCP 连接有两个端点,端点不是主机,不是 IP 地址,不是应用进程,也不是传输层协议端口。TCP 连接端口称为套接字 socket 或插口。端口拼接到 IP 地址即构成套接字。每条 TCP 连接唯一被通信两端的两个端点(套接字)决定。采用客户机/服务器方式,主动发起连接建立称为客户机 Client,被动等待连接建立的应用进程称为服务器 Server

1、TCP 连接建立

经历三个步骤,称为三次握手

  • 第一步:客户机 TCP 首先向服务器的 TCP 发送一个连接请求报文段。这个报文段中不含应用层数据,首部 SYN 标志位置1。客户机随机选择一个起始序号 seq=x(连接请求报文不携带数据,但要消耗一个序号)
  • 第二步:服务器的 TCP 收到连接请求报文段后,如果同意连接,就向客户机发回确认,并为该 TCP 连接分配 TCP 缓存和变量。确认报文段中,ACK 和 SYN 都被置1,确认号 ack 字段值为 x+1,服务器随机产生起始序号 seq=y(确认报文不携带数据,也消耗一个序号)。
  • 第三步:当客户机收到确认报文后,还要向服务器给出确认,也要为该连接分配缓存和变量。这个报文段 ACK 标志位置1,序号字段为 x+1,确认号 ack=y+1。该报文段可以携带数据,如果不携带数据则不消耗序号。该步骤主要是为了防止已失效的连接请求报文突然又传到 B,因而产生错误。

三步握手后,就建立了 TCP 连接,就可传送应用层数据。TCP 提供全双工通信。服务器端的资源分配是在第二次握手时分配的,客户端资源是在完成第三次握手时分配的,这使得服务器易受到 SYN 洪泛攻击。

​B 发送给 A 的报文也可以拆分成两个报文段:一个确认报文段(ACK=1,ack=x+1),一个同步报文段(SYN=1,seq=y)。这样就变成了四次报文握手

2、TCP 连接释放

​TCP 连接释放的过程通常称为四次握手

  • 第一步:客户机打算关闭连接时,向其 TCP 发送一个连接释放报文段,并停止发送数据,主动关闭 TCP 连接,该报文段的 FIN 标志位被置1,seq=u,等于前面已传送过的数据的最后一个字节的序号加一(FIN 报文段即使不携带数据,也要消耗一个序号)。发送 FIN 报文时,发送 FIN 的一端不能再发送数据,即关闭了其中一条,另外一条还可以发送数据。
  • 第二步:服务器收到连接释放报文段后即发出确认,确认号是 ack=u+1,而这个报文段自己的序号是 v,等于它前面已传送过的数据的最后一个字节的序号加一。从客户机到服务器这个方向的连接就释放了,TCP 连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
  • 第三步:若服务器已经没有要向客户机发送的数据,就通知 TCP 释放连接,此时发出 FIN=1 的连接释放报文段。
  • 第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK 字段被置为1,确认号 ack=w+1,序号 seq=u+1。此时 TCP 连接还未释放,必须经过时间等待计时器设置的时间为 2MSL 后,A 才进入连接关闭状态。

连接建立和释放总结:

  1. 连接建立:
    1. SYN=1,seq=x
    2. SYN=1,ACK=1,seq=1,ack=x+1
    3. ACK=1,seq=x+1,ack=y+1
  2. 释放连接:
    1. FIN=1,seq=u
    2. ACK=1,seq=v,ack=u+1
    3. FIN=1,ACK=1,seq=w,ack=u+1
    4. ACK=1,seq=u+1,ack=w+1

关于连接和释放的题目,ACK、SYN、FIN 一定等于1。

TCP 可靠传输

​保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。使用了校验、序号、确认和重传等机制来达到这一目的。其中,TCP 的校验机制与 UDP 一样。

1、序号

​TCP 首部的序号字段来保证数据有序提交给应用层,TCP 把数据视为无结构但有序的字节流,序号建立在传送的字节流上,而不建立在报文段之上。TCP 连接传送的数据流中的每一个字节都编上序号。序号字段的值是指本报文段所传送的数据的第一个字节的序号。

​A、B间建立了一条 TCP 连接,A 的发送缓冲区有 10B,序号从0开始标号,第一个报文包含第0~2个字节,则该 TCP 报文段的序号是0,第二个报文段序号是3。

2、确认

​首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。如果接收方B已收到第一个报文段,此时B希望收到的下一个报文段是从第三个字节开始的,那么B发送给A的报文中的确认号字段应该是3。发送方缓存区会继续存储那些已发送但未收到确认的报文段,以便重传。

​TCP 默认是哦也能够累计确认,TCP 只确认数据流中至第一个丢失字节为止的字节。

接收方 B 收到了 A 发送的包含字节0 ~ 2及字节 6 ~ 7 的报文段。由于某原因,B 还未收到字节 3 ~ 5 的报文段,B 还在等待字节3(及其后面字节),因此 B 到 A 的下一个报文段将确认号置为3。

3、重传

超时和冗余 ACK 会导致 TCP 对报文段进行重传:

超时:

​TCP 每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段。 TCP 采用一种自适应算法,记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间差称为往返时间 RTT。TCP 保留了 RTT 的一个加权平均往返时间 RTTs,他会随新测量 RTT 样本值得变化而变化。超时计时器设置的超时重传时间 RTO 应略大于 RTTs,但不能大太多,否则丢失不能很快重传,导致时延大。

冗余 ACK:

​TCP 规定当比期望序号大的失序报文段到达时,就发送一个冗余 ACK,指明下一个期望字节的序号

例如:

发送方 A 发送序号为 1、2、3、4、5 的 TCP 报文段,2号报文段在链路中丢失,因此 3、4、5号报文段对于 B 来说就成了失序报文段,不是 B 所期望收到的下一个报文,于是 B 发送3个对1号报文段的冗余 ACK,表示自己期望收到2号报文段。当 A 收到对于1号报文段的3个冗余 ACK 时,它可认为2号报文段已经丢失,这时 A 可以立即对2号报文段执行重传。称为快速重传

TCP 流量控制

​TCP 提供流量服务消除发送方使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送速率和读取速率)。TCP 提供一种基于滑动窗口协议的流量控制机制。

滑动窗口原理

​任意时刻,发送方都维持一组连续的允许发送的帧的序号,称为发送窗口;接收方也维持一组连续的允许接收帧的序号,称为接收窗口。发送窗口用来对发送方进行流量控制,发送窗口大小 WTW_T 代表在还未收到对方确认信息的情况下发送方最多还可以发送多少个数据帧;接收窗口是为了控制可以接收哪些数据帧和不可以接收哪些帧。

​在接收方,只有收到的数据帧的序号落入接收窗口内时才允许将该数据帧收下。若收到的数据帧落在接收窗口之外,则一律丢弃。

​发送端没收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口内没有可以发送的帧(窗口内的帧全是已发送但未收到确认的帧)时,发送方就停止发送,直到收到接收方发送的确认帧使窗口移动,窗口内有可发送的帧后,才开始继续发送。

​接收端收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,则一律丢弃。

滑动窗口重要特性:

  • 只有接收窗口向前滑动(同时接收方收到了确认帧)时,发送窗口才可能(只有发送方收到确认帧后才一定)向前滑动。
  • 停止-等待协议,后退 N 帧协议和选择重传协议只在发送窗口和接收窗口大小上有所差别
    • 停止-等待协议:发送窗口大小=1,接收窗口大小=1
    • 后退 N 帧协议:发送窗口大小>1,接收窗口大小=1
    • 选择重传协议:发送窗口大小>1,接收窗口大小>1
  • 接收窗口大小为1时,可保证帧的有序接收。
  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中固定。与传输层的滑动窗口有所区别:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制,且数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的可以。

TCP 使用滑动窗口

​在通信过程中,接收方根据接收缓存大小,动态调制发送方的发送窗口大小,称为接收窗口 rwnd ,即调节 TCP 报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率;发送方根据对当前网络拥塞程序的估计而确定的窗口值,称为拥塞窗口 cwnd,大小与网络的带宽和时延密切相关。

​有效数据从 A -> B,B仅向A发送确认报文,B 可以通过设置报文段首部的窗口字段将 rwnd 通知给 A。rwnd 即接收方连续接收的最大能力,单位是字节。发送方根据最新收到的 rwnd 值来限制自己发送窗口的大小,实际发送窗口大小值取 rwnd 和 cwnd 中的最小值。

A 向 B发送数据。连接建立时,B 告诉 A rwnd=400。其中 ACK 为首部确认位 ACK,ack 为确认字段的值,即确认号。

TCP 拥塞控制

​防止过多数据注入网络,保证网络中的路由器或链路不致过载。出现拥塞时,端点并不了解到拥塞发生的细节,对它来说拥塞常常表现为通信时延的增加。拥塞控制和流量控制都通过控制发送方发送数据的速率来达到控制效果。区别在于拥塞控制是让网络能够承受现有的网络负荷,是一个全局性过程,涉及所有主机、路由器,以及与性能相关因素。流量控制往往指点对点的通信量的控制,即接收端控制发送端,抑制发送端发送数据速率以便来得及接收。

TCP 协议要求发送方维护以下两个窗口:

  • 接收窗口 rwnd:接收方根据目前接收缓存大小设置最新窗口值,反映接收方容量。接收方根据 TCP 报文首部字段值通知发送方。
  • 拥塞窗口 cwnd:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络的当前容量。只要网络未出现拥塞,拥塞窗口就大一点。出现拥塞就要减小一点。

​发送窗口上限值应取 rwnd 和 rwnd 中较小值。 接收方有足够大的缓存空间,则发送窗口大小由网络的拥塞程度决定,可将发送窗口等同于拥塞窗口。

1、慢开始和拥塞避免

慢开始算法

​刚刚连接并发送 TCP 报文段,令 cwnd=1,即最大报文段长度 MSS。每收到一个对新报文的确认后,将 cwnd 加1,即增大一个 MSS。用这样方法增大发送方的拥塞窗口 cwnd。

A 向 B 发送数据,发送时 A 的拥塞窗口为2,A一次可以发送两个 TCP 报文段,经过一个 RTT 后,A 收到 B 对刚才两个报文的确认,于是把拥塞窗口调整为4,下一次就可以发送4个报文段。

​使用慢开始算法后,每经过一个传输轮次(RTT),拥塞窗口 cwnd 就会加倍,即 cwnd 呈指数增长。一直增大到规定的慢开始门限 ssthresh(阈值),改用拥塞避免算法。

拥塞避免算法

​发送端窗口 cwnd 每经过一个往返时间 RTT 就增加一个 MSS 的大小,不是加倍,使 cwnd 呈线性增长,每出现一次超时(网络拥塞)时,令 ssthresh 等于当前 cwnd 的一半。可归纳如下:

  • cwnd < ssthresh,使用慢开始算法。
  • cwnd > ssthresh,使用拥塞避免算法。
  • cnwd = ssthresh,两者都可使用。

网络拥塞处理

​无论慢开始阶段还是拥塞避免阶段,只要检测到超时事件的发生,就要把慢开始门限 ssthresh 设置为出现拥塞时发生方 cwnd 的一半(但不能小于2)。然后把 cwnd 重新设置为1,执行慢开始算法。目的为了迅速减少发送到网络中的分组数,使得发生拥塞的路由器有足够时间处理分组。拥塞避免不能完全避免拥塞。利用以上措施完全避免网络拥塞是不可能的。

​注意在慢开始阶段,若 2cwnd > ssthresh,则下一个 RTT 的 cwnd 等于 ssthresh,而不是 2cwnd,即 cwnd 不能超过 ssthresh 值,即图中第16轮次 cwnd=8、ssthresh=12,第17轮次cwnd=12。

2、快重传和快恢复

这两个是对慢开始和拥塞避免算法的改进

快重传

​快重传使用了冗余 ACK 来检测丢包的发生,也可用于网络拥塞的检测(丢包意味着可能出现拥塞)。快重传没有取消重传计时器,在某些情况下可更早地重传丢失的报文段。当发送方连续收到三个重复的 ACK 报文时,直接重传对方尚未收到的报文段,不必等待报文段设置的重传计时器超时。

快恢复

快恢复原理如下:发送端收到连续三个冗余 ACK(重复确认) 时,执行乘法减小算法,把慢开始门限 ssthresh 设置为出现拥塞时发送方 cwnd 的一半。与慢开始不同在于,它把 cwnd 的值设置为慢开始门限 ssthresh 改变后的数值,然后开始执行拥塞避免算法(加法增大),使拥塞窗口线性增大。由于跳过从1起始的慢开始过程,所以被称为快恢复

综上所述,TCP 拥塞控制可以归纳为下图,可以明确知道发送方采用了上面策略。

0x06 应用层

​每个应用层协议都是为了解决某一类应用问题,解决这些问题必须通过不同主机中的多个应用进程之间的通信和协同来完成。应用层的具体内容就是精确定义这些通信规则。

网络应用模型

客户/服务器模型

客户/服务器(C/S)模型中,总是打开的主机成为服务器,服务于许多来自其他客户机的主机请求,工作流程如下:

  1. 服务器处于接收请求状态

  2. 客户机发送服务请求,等待接收结果

  3. 服务器收到请求,分析请求,处理后把结果返回给客户机

客户机必须知道服务器程序的地址,,服务器上运行的软件是专门用来提供某种服务的程序,可同时处理多个远程或本地客户的请求。系统启动后就自动调试并一直运行,被动接收客户请求。主要特征是:

  • 客户是服务请求方;服务器是服务提供方。
  • 网络中计算机地位不平等,服务器可通过对用户权限的限制来达到管理客户机的目的,使不能随机存储/删除数据,或其他网络活动。管理工作由少数服务器担当,管理方便
  • 客户机间不直接通信
  • 可扩展性不佳

P2P 模型

​P2P 模型思想是整个网络中传输内容不再被保存至中心服务器上,每个结点都同时有下载、上传的功能。各计算机没有固定的客户机和服务器的划分。任意一对计算机——称为对等方 Peer,直接相互通信。本质上看,P2P 模型仍使用客户/服务器方式,每个结点既是客户机也是服务器。

相比 C/S 模型,P2P 模型优点如下:

  1. 减轻了服务器计算压力,消除对某个服务器的完全依赖,可将任务分配到各个结点,提高了系统效率和资源利用率
  2. 多个客户机间可直接共享文档
  3. 可扩展性好,传统服务器有响应和带宽限制,只能接收一定数量的请求
  4. 网络健壮性强,单个失效不影响其他部分结点

也有缺点:会占用主机较多内存,影响运行速度,各大 ISP 通常对 P2P 持反对态度。

域名系统 DNS

​DNS 使互联网使用的命名系统,能够把互联网上的主机名字转换成 IP 地址。互联网的域名系统 DNS 被设计成一个联机分布式的数据库系统,采用客户/服务器方式。DNS 使大多数名字都在本地进行解析,仅有少量在互联网上通信,因此 DNS 效率很高。由于使分布式系统,即使单个计算机出现故障,也不妨碍整个 DNS 系统正常运行。

​域名到 IP 地址的解析是由分布在互联网上的许多域名服务器程序(简称域名服务器)共同完成的。过程要点如下:需要把主机名解析为 IP 地址时,该进程调用解析程序,并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 的方式发送给本地域服务器(用 UDP 是为了减少开销),使用53号端口。本地域名服务器在查找域名后,把对应的 IP 地址放在回答报文中返回。应用进程获得目的主机的 IP 地址后即可进行通信。若本地域名服务器不能回答该请求,则此域名服务器就暂时成为 DNS 中的另一个客户,向其他域名服务器发出查询请求,直到找到能够回答该请求域名服务器为止。

域名结构

​DNS 规定,域名中的标号都有英文字母和数字组成,每个标号不超过63字符不区分大小写。标号中除连字符 “-” 外不能使用任何标点符号。级别最低的域名写在最左边,最高级写在最右边。由多个标号组成的完整域名不能超过255个字符。语法上讲,每一个域名都由标号序列组成,标号之间用隔开。

​域只是个逻辑概念,不代表计算机所在的物理地点。

顶级域名 TLD 分为如下三大类:

  1. 国家顶级域名(nTLD):国家和某些地区的域名,如 .cn、.us、.uk,分别表示中国、美国、英国
  2. 通用顶级域名(gTLD):如.com、.net、.org、.gov 本别表示公司、网络服务机构、非营利性组织、国家或政府部门
  3. 基础结构域名:只有 arpa 这一个,用于反向域名解析,又称反向域名

国家顶级域名下注册的三级域名均有该国家自行确定。下图表示域名空间的树状结构。

​每个域分别由不同的组织进行管理。 每个组织都可以将它的域再分成一定数目的子域,并将这些子域委托给其他组织去管理。如 CN 域的中国将 EDU.CN 子域授权中国教育和科研计算机网管理。

域名服务器

​域名到 IP 地址的解析是由运行在域名服务器上的程序完成的,一个服务器所负责管辖的范围称为,各单位根据具体情况来划分自己管辖范围的区,但一个区中所有结点必须是都连通的。每个区应设置相应权限域名服务器,用来保存该区中的所有主机域名到IP 地址的映射。每个域名服务器不但能够进行域名到 IP 地址的解析,还必须有连向其他域名服务器的信息,便于知道到什么地方去找其他域名服务器。 DNS 使用大量域名服务器,以层次方式组织。没有一台域名服务器知道所有因特网上所有主机的映射,该映射分布在所有 DNS 上。

1、根域名服务器

​最高层次的域名服务器,所有根域名服务器都知道所有顶级域名服务器的 IP 地址。不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。因特网有13各根域名服务器,但每个服务器都是冗余服务器的集群。根域名服务器是用来管理顶级域,通常它不直接把待查询的域名直接转换成 IP 地址,而是告诉本地域名服务器下一步应该找哪个顶级域名服务器进行查询。

2、顶级域名服务器

​负责管理在该顶级域名服务器注册的所有二级域名。收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应该查询的域名服务器的 IP 地址)。

3、授权域名服务器

​每台主机都必须在域名授权服务器处登记。为了更可靠的工作,每台主机最好至少有两个域名授权服务器。实际上,许多域名服务器同时充当本地域名服务器和授权域名服务器。授权域名服务器能将其管辖的主机名转换成该主机的 IP 地址。

4、本地域名服务器

​每个 ISP,或一所大学。甚至大学中的一个系,都可以拥有一个本地域名服务器。当一台主机发出 DNS 请求时,这个查询请求报文就发送给该主机本地域名服务器。

域名解析过程

​域名解析是指八域名映射成 IP 地址(正向解析)或把 IP 地址映射成域名(反向解析)的过程。当客户机需要解析时,通过本机 DNS 构造一个 DNS 请求报文。以 UDP 方式发送往本地域名服务器。域名解析有两种方法:递归查询和递归与迭代相结合的查询。递归会造成负载过大,实际中不常用。常用的递归与迭代相结合的查询方式分为两部分:

主机向本地域名服务器的查询采用的是递归查询

​本地主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就作为 DNS 客户的身份,向根域名服务器发出查询请求报文(代替该主机继续查询),而不是让该主机自己进行下一步查询。本地域名服务器只需向根域名服务器查询一次,后面几次查询都是递归在其他几个域名服务器之间进行的(③-⑥)。步骤⑦中,本地域名服务器从根域名服务器得到了所需 IP 地址,在最后步骤⑧中,本地域名服务器把查询结果告诉主机 m.xyz.com

本地域名服务器向根值服务器的查询采用迭代查询

​当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域服务器下一步要向哪个顶级域名服务器进行查询。然后本地域服务器向这个顶级域名服务器进行后续的查询,如上图 b 所示。顶级域名服务器收到查询 报文后,要么给出查询的 IP 地址要么告诉本地域名服务器下一步应向哪个权限服务器查询。最后知道所要解析的域名 IP 地址后,把这个结果返回给发起查询的主机。

​为提高 DNS 查询效率,减少 DNS 查询报文,在域名服务器中广泛使用高速缓存。当一个 DNS 服务器收到 DNS 查询结果时,将 DNS 信息缓存在高速缓存中,可用于下一次相同的查询。由于主机名和 IP 地址间映射不是永久的,DNS 服务器一段时间后丢弃高速缓存中的信息。

假定某客户机想获知域名为 y.abc.com 主机的 IP 地址,域名解析过程如下:

  1. 客户机向其本地域名服务器发出 DNS 请求报文
  2. 本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以 DNS 客户的身份向根域名服务器发出解析请求
  3. 根域名服务器收到请求后,判断该域名属于 .com 域,将对应的顶级域名服务器 dns.com 的 IP 地址返回给本地域名服务器
  4. 本地域名服务器向顶级域名服务器 dns.com 发出解析请求报文
  5. 顶级域名服务器 dns.com 收到请求后,判断该域名属于 abc.com 域,因此将对应的授权域名服务器 dns.abc.com 的 IP 地址返回给本地域名服务器
  6. 本地域名服务器向授权域名服务器 dns.abc.com 发送解析请求报文
  7. 授权域名服务器 dns.abc.com 收到请求后,将查询结果返回给本地域名服务器
  8. 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机

文件传输协议 FTP

工作原理

​文件传输协议 FTP是最广泛的文件传输协议。FTP 提供交互式的访问,允许客户指明文件的类型和格式,并允许文件具有存取权限。屏蔽了各计算机系统细节,适用于异构网络中任意计算机间传输文件。功能如下:

  • 提供不同种类主机系统之间的文件传输能力
  • 以用户权限管理方式提供用户对远程 FTP 服务器上的文件管理能力
  • 以匿名 FTP 的方式提供公用文件共享能力

FTP 采用客户/服务器工作方式使用 TCP 可靠传输服务。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接收新的请求;若干从属进程,负责处理单个请求。工作步骤如下:

  • 打开熟知端口21(控制端口),使客户进程能够连接上
  • 等待客户进程发送连接请求
  • 启动从属进程来处理客户机进程。主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后即终止
  • 回到等待状态,继续等待接收其他客户进程的请求

​FTP 服务器必须在整个会话期间保留用户的状态信息。特别是服务器必须把指定的用户账户与控制连接联系起来,服务器必须追踪用户在远程目录树上的当前位置。

控制连接与数据连接

​FTP 在工作上时使用两个并行的 TCP 连接:一个是控制连接(端口号21),一个是数据连接(端口号20).使用两个不同的端口号可使协议更加简单和容易实现。

1、控制连接

​21端口,等待客户连接,建立在这个端口上的连接称为控制连接,控制连接用来传输控制信息(连接请求、传送请求),并且控制信息都以7位 ASCII 格式传送。FTP 客户发出传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。在传输文件时还可以使用控制连接(如客户在传输中途发一个中止传输的),因此控制连接的在整个会话期间一直保持打开状态。

2、数据连接

​服务器端的控制进程在收到 FTP 客户发来的文件传输请求后,创建 数据传送进程数据连接。数据连接用来连接客户端和服务器端的数据传送进程,数据传送进程实际完成文件的传送,在传送完毕后关闭 数据传送连接 并结束运行。

​FTP 使用了一个分离的控制连接,也称 FTP 的控制信息是带外的(Out-of-band)传送的。使用 FTP 时,若要修改服务器上文件则需要先将此文件传送到本地主机,然后再将修改后的文件副本传送到原服务器。网络文件系统(NFS)运行进程打开一个远程文件,并在该文件的某个特定位置开始读写数据。这样,NFS 可使用户复制一个大文件中的很小的片段,而不需要复制整个大文件。

​当客进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口21,同时告诉服务器进程自己另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口20与客户端进程所提供的端口号建立数据传送连接。

简单文件传送协议 TFTP

​采用客户/服务器工作方式,但使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。TFTP 只支持文件传输而不支持交互。开始工作时,TFTP 客户进程发送一个读请求报文或写请求报文给 TFTP 服务器进程,熟知端口号是69。TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。

电子邮件

电子邮件组成结构

​电子邮件是一种异步通信方式,通信时不需要双方同时在场。电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可以随时上网使用自己的邮件服务器进行读取。

​一个电子邮件系统应具由用户代理邮件服务器电子邮件使用的协议,如 SMTP、POP3 等。

  • 用户代理 UA:用户与电子邮件系统的接口。用户代理使用户能通过一个友好的接口发送和接收邮件,用户代理至少应当具有撰写显示、邮件处理通信功能。通常情况,用户代理就是一个运行在 PC 上的程序。
  • 邮件服务器:组成电子邮件系统的核心。邮件服务器的功能是发送和接收邮件,同时还要向发信人报告邮件传送情况(已交付、被拒绝、丢失)。邮件服务器采用客户/服务器方式工作,能够同时充当客户和服务器。
  • 邮件发送协议和读取协议:邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,通常使用 SMTP;邮件读取协议用于用户代理从邮件服务器读取邮件,如 POP3。其中 SMTP 客户端在用户代理向邮件服务器发送邮件时,主动将邮件送到 SMTP 服务端。当用户读取邮件时,用户代理向邮件服务器发出请求,POP3 拉取用户邮箱中的邮件。

邮件收发过程:

  1. 发信人调用用户代理来撰写和编辑要发送的邮件。用户代理用 SMTP 把邮件传送给发送方邮件服务器。
  2. 发送方邮件服务器将邮件放入邮件缓存队列,等待发送
  3. 运行在发送方邮件服务器的 SMTP 客户进程,发现邮件缓存中有待发送的邮件,就向运行在接收方邮件服务器的 SMTP 服务器进程发起建立 TCP 连接
  4. TCP 连接建立后,SMTP 客户进程开始向远程 SMTP 服务器进程发送邮件。发送完所有待发送邮件后,SMTP 关闭所建立的 TCP 连接
  5. 运行在接收方的邮件服务器中的 SMTP 服务器进程收到邮件后,将邮件放入收信人的用户邮箱,等待读取
  6. 收信人打算读取时,调用用户代理,使用 POP3(或 IMAP)协议将自己的邮件从接收方邮件服务器的用户邮箱取回。

电子邮件格式与 MIME

1、电子邮件格式

​分为信封和内容两大部分,邮件内容又分为首部和主体两部分。RFC 822 规定了邮件的首部格式,邮件主体内容由用户自由撰写。用户写好首部后,邮件系统自动将信封所需的信息提取出来写在信封上,用户不需要亲自填写信封上的信息。首部包含一些首部行,每个首部行有一个关键字后跟冒号再后跟值组成。有些关键字是必需的,有些是可选的。最重要的关键字是 To:To:Subject:Subject:

​To 是必需关键字,后面填入一个或多个收件人的电子邮件地址。电子邮件地址的规定格式为:收件人邮箱名@邮箱所在主机域名,如 [email protected],其中收信人邮箱名即用户名,abc 在 163.com 这个邮箱服务器上必须是唯一的。这也保证了 [email protected] 这个邮件地址在整个因特网上是唯一的。

​Subject 是可选关键字,是邮件的主题,反应重要内容。

​From 也是必填关键字,但通常由邮件系统自动填入。首部与主体之间用一空行进行分割

2、多用途网际邮件扩充 MIME

​由于 SMTP 只能传送一定长度的 ASCII 码,许多其他非英语国家文字就无法传送,且无法传送可执行文件及其他二进制对象,因此提出了多用途网络邮件扩充 MIME。MIME 的意图是继续使用目前的格式,但增加邮件主体的结构,并定义了传送非 ASCII 码的编码规则。也就是 MIME 邮件可在现有的电子邮件程序和协议下传送。MIME 与 SMTP 关系如下图:

MIME 主要包括三部分内容:

  • 五个新的邮件首部字段,MIME 版本、内容识别、内容标识、内容传送编码和内容类型
  • 定义了许多邮件内容格式,对邮件表示方法进行了标准化
  • 定义了传送编码,可对任何内容格式进行转换,不会被邮件系统改变

SMTP 和 POP3

1、SMTP

​提供可靠且有效的电子邮件传输协议,控制两个互相通信的 SMTP 进程交换信息。由于 SMTP 使用客户/服务器方式,所以负责发送邮件的 SMTP 进程就是 SMTP 客户,负责接收邮件的 SMTP 进程就是 SMTP 服务器。 SMTP 用 TCP 连接,端口号为25。SMTP 通信有以下三阶段:

  1. 连接建立

    ​发件人邮箱发送到发送方邮件服务器的邮件缓存中后,SMTP 客户就每隔一定时间对邮件缓存进行一次扫描。有邮件就使用熟知端口25与接收方邮件服务器的 SMTP 服务器建立 TCP 连接。连接建立后,接收方 SMTP 服务器发出 220 service ready。然后 SMTP 胡可向 SMTP 服务器发送 HELO 命令,附上发送方主机名。

    ​SMTP 不使用中间邮件服务器。TCP 连接总是在放松方和接收方这两个邮件服务器之间直接建立,不管多远。接收方的邮件服务器因故障不能建立连接时,发送方邮件服务器就要等一段时间后再次尝试连接。

  2. 邮件传送

    ​从 MAIL 命令开始,MAIL 命令后面有发件人的地址。如: MAIL FROM:< [email protected] >。若 SMTP 服务器已准备好接收邮件,则回答 250OK。接着 SMTP 客户端发送一个或多个 RCPT(收件人缩写)命令,格式为 RCPT TO: < 收件人地址 >。每发送一个或多个 RCPT 命令,都有相应的信息从 SMTP 服务器返回,如 250OK 或 550 No such user here。

    ​RCPT 命令作用是,先弄清楚接收方系统是否已做好接收邮件的准备,然后才发送邮件,避免资源浪费。

    ​获得 OK 答复后,客户端使用 DATA 命令,表示开始传输邮件内容此时 SMTP 客户端就可开始传送邮件内容。

  3. 连接释放

    发送完毕后,SMTP 客户发送 QUIT 命令。SMTP 服务器返回 221,表示SMTP 同意释放 TCP 连接。

2、POP3

​当用户读取邮件时,用户代理向邮件服务器发出请求,拉取用户邮箱中邮件。也使用客户/服务器方式,在传输层使用 TCP,端口号 110。接收方用户代理上必须运行 POP 客户程序,接收方邮件服务器上则运行 POP 服务器程序。有两种工作方式:下载并保存(下载后仍保存在服务器上,可再次读取)、下载并删除(邮件一旦被读取就从服务器上删除)。

​另一个邮件接收协议是因特网报文存取协议 IMAP,比 POP3 复杂得多,为用户提供创建文件夹、不同文件夹间移动邮件、远程文件夹中查询邮件命令,IMAP 服务器维护了会话用户的状态信息。

万维网 WWW

万维网是无数个站点和网页的几何,构成因特网最主要的部分。万维网内核部分由三个标准构成:

  1. 统一资源定位符 URL:负责标识万维网上各站文档,使每个文档在整个万维网的范围内具有唯一的标识符 URL。相当于一个文件名在网络范围的扩展。一般形式: <>://<>:<>/<><协议>://<主机>:<端口>/<路径> 。常见 HTTP、FTP等协议,主机是存放资源的主机在因特网中的域名,也是 IP 地址;端口和路径有时可省略。URL 中不区分大小写。
  2. 超文本传输协议 HTTP:一个应用层协议,使用 TCP 连接进行可靠传输。HTTP 是万维网客户程序和服务器程序之间交互必须严格遵守的协议。
  3. 超文本标记语言 HTML:一种文档结构的标识语言,使用一些约定的标记对页面上的各种信息格式进行描述。

万维网以使用客户/服务器方式工作,浏览器是用户计算机上的万维网客户程序,万维网文档所驻留的计算机则运行服务器程序,称万维网服务器。请求文档过程如下:

  1. Web 用户使用浏览器与 Web 服务器建立连接,并发送浏览请求
  2. Web 服务器把 URL 转换为文件路径,返回信息给 Web浏览器
  3. 通信完毕,关闭连接

超文本传输协议 HTTP

​定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎么样把文档传送给浏览器。层次来看,HTTP 面向事务的应用层协议,规定了浏览器和服务器之间的请求和响应的格式与规则,是万维网能够可靠交换文件的重要基础。

HTTP 操作过程

​浏览器要访问 WWW 服务器时,首先要完成对域名的解析。一旦获取 IP 地址,浏览器就通过 TCP 向服务器发送连接建立请求。

​每个 WWW 站点都有一个服务器进程,不断监听TCP 80 端口(默认),当监听到连接请求后便与浏览器建立连接。TCP 连接建立后,浏览器就像服务器发送请求获取某个 Web 页面的 HTTP 请求。服务器收到 HTTP 请求后,将构建所请求 Web 页的必需信息,并通过 HTTP 响应返回给浏览器。浏览器再将信息进行解释,然后将 Web 页显示给用户。最后释放 TCP 连接。

​在浏览器和服务器之间的请求与响应的交互,必须遵循规定的格式和规则(HTTP)。因此 HTTP 有两类报文:请求报文和响应报文。

单机鼠标后所发生的事件按顺序如下:

  1. 浏览器分析链接指向页面的 URL
  2. 浏览器向 DNS 请求解析域名 IP 地址
  3. 域名系统 DNS 给出 IP 地址
  4. 浏览器与该服务器建立 TCP 连接
  5. 浏览器发出 HTTP 请求:GET/chn/index.html
  6. 服务器通过 HTTP 响应把 index.html 返回给浏览器
  7. 释放 TCP 连接
  8. 浏览器解释文件 index.html,显示 Web 页面

HTTP 特点

​HTTP 是无状态的。不会记得为某个客户服务过多少次。这使得服务器更容易支持大量并发的 HTTP 请求。实际应用中,常使用 Cookie 加数据库的方式来跟踪用户活动。Cookie 是一个存储在用户主机中的文本文件,里面含有一串“识别码”,如“123456”,用于 Web 服务识别用户。Web 服务器根据 Cookie 就能从数据库中查询到该用户的活动记录,进而执行一些个性化工作。

​HTTP 采用 TCP 作为传输层协议,保证了数据的可靠传输。但 HTTP 本身是无连接的,也就是说交换 HTTP 报文之前不需要建立 HTTP 连接。

​HTTP 既可以使用非持久连接,也可使用持久连接(HTTP/1.1 支持)。对于非持久连接,每个网页元素对象的传输都需要单独建立一个 TCP 连接。相当于请求一个万维网文档所需的时间是该文档的传输时间(与文件大小成正比)加上两倍往返时间 RTT (一个用于请求 TCP 连接,另一个用于请求和接收文档)。持久连接,指万维网服务器在发送响应后仍然保持这条连接,使同一个用户和服务器可继续传送后续的 HTTP 请求与响应报文。

HTTP 报文结构

  • 请求报文:从客户向服务器发送请求报文
  • 响应报文:从服务器到客户的回答

​HTTP 是面向文本的,报文中每个字段都是一些 ASCII 码串,所以每个字段长度不确定。都是由三部分组成,两种报文区别就是开始行不同。

  1. 开始行:用于区分请求报文和响应报文。请求报文的开始行叫做请求行,对应响应报文的称为状态行。三个字段间都用空格分隔开。最后的 CR 和 LF 分别表示换行、回车。
  2. 首部行:说明浏览器、服务器或报文主体的一些信息。
  3. 实体主体:通常不用;有些响应报文不用

​请求行中省略了相对 URL(主机域名)是因为收不行给出了主机域名。第三行告诉服务器不使用持续连接,传送完请求对象后就关闭 TCP 连接。

常见状态码

1xx 表示通知信息,如请求收到或正在处理

2xx 表示成功,如接收或知道了

3xx 表示重定向,要完成请求还进一步采取行动

4xx 表示客户差错,请求中有错误语法或不能完成

5xx 表示服务器差错,如服务器失效无法完成请求

远程终端协议 TELNET

​TELNET 是一个简单的远程终端协议。用户用 TELNET 就可在所在地通过 TCP 连接注册登录到远程的另一台主机上,所以又称为终端仿真协议。TELNET 能够适应许多计算机和操作系统的差异,定义了数据和命令如何通过互联网。这些定义就是所谓的网络虚拟终端 NVT。客户软件把用户的点击和命令转换成 NVT 格式,并交送给服务器。服务器软件把收到的数据和命令从 NVT 格式转换成远地系统所需的格式,相反从服务器到客户也是这样传送。

动态主机配置协议 DHCP

​在协议软件中给这些参数赋值的动作叫做协议配置。DHCP 提供了即插即用连网机制,这种机制允许一台计算机加入新的网络和获取 IP 地址而不用手工参与。

​DHCP 采用客户服务器方式。需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文(将目的 IP 地址置为全1),这时该主机就成为 DHCP 客户。发送发现报文时不知道 DHCP 服务器在什么地方,因此要发现 DHCP 服务器的 IP 地址。目前主机还没有 IP 地址,因此将 IP 数据报的源地址设为全0。这样所有主机都能收到这个广播报,但只有 DHCP 服务器才会对此广播报文进行回答。DHCP 服务器先在数据库查找该计算机配置信息,找到则返回找到信息;找不到则从 IP 地址池取一个地址分配给该计算机。DHCP 服务器回答报文叫做提供报文