计算机网络

计算机网络

【计算机网络微课堂(有字幕无背景音乐版)】

一、概述

1.1 因特网概述

1.网络、互联网和因特网的基本概念

网络: 由若干节点(Node) 和连接这些结点的链路(Link) 组成。

互联网: 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网是“网络的网络(Netwrok of Networks) "。

因特网(Internet): 是世界上最大的互连网络。用户数以亿计,互连的网络数以百万计。

注意:internet 与 Internet 的区别

  • internet(互联网或互连网) 是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。
  • Internet(因特网) 则是一个专用名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用TCP/IP协议族作为通信的规则,其前身是美国的ARPANET。

2.因特网发展的三个阶段

  • 从单个网络ARPANET向互联网发展

    • 1969,第一个分组交换网:APRANET
    • 70年代中期,研究多种网络之间的互联;
    • 1983年,TCP/IP协议成为ARPANET的标准协议。通常我们把这看作标志着因特网的诞生。
  • 逐步构成三级结构的因特网

    • 1985年,NSF围绕六个大型计算机中心建设了NSFNET(主干网、地区网和校园网);
    • 1990年,ARPANET任务完成,正式关闭;
    • 1991年,美国政府将因特网猪肝网交给私人公司经营,并开始对接入因特网的单位收费。
  • 逐步形成了多层次ISP结构的因特网

    • 1993年,NSFNET逐渐被若干个商用因特网的主干网替代,政府机构不再负责因特网运营,而是让各种因特网服务提供者ISP来运营;
    • 1994年,万维网WWW技术促使因特网迅猛发展;
    • 1995年,NSFNET停止运作,因特网彻底商业化

3.因特网的标准化工作

image

4.因特网的组成

  • 边缘部分: 由所有连接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
  • 核心部分: 由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。

image

1.2 三种交换方式

1.电路交换(Circuit Switching)

  • 电话交换机接通电话线的方式称为电路交换;

  • 从通信资源的分配角度来看,交换(Switching)就是按照某种方式动态地分配传输线路的资源

  • 电路交换的三个步骤:

    1. 建立连接(分配通信资源)
    2. 通话(一直占用通信资源)
    3. 释放连接(归还通信资源)
  • imageimage

  • 当使用电路交换来传送计算机数据时,其线路的传输效率往往很低

2.报文交换(不重要)

不常用,只在早期电报中使用过,现已被分组交换替代。因此不讲

3.分组交换(Packet Switching)

各个部分的作用:

  • 发送方:构造分组、发送分组
  • 路由接:缓存分组、转发分组
  • 接收方:接收分组、还原报文

image

4.三种交换方式的对比

imageimageimage

电路交换

  • 优点:通信延时小;有序传输;没有冲突;适用范围广;实时性强;控制简单
  • 缺点:建立连接时间长;线路独占、使用效率低;灵活性差;难以规格化

报文交换

  • 优点:无需建立连接;动态分配线路;提高线路可靠性;提高线路利用率;提供多目标服务
  • 缺点:引起了转发时延;需要较大存储缓存空间;需要传输额外的信息量

分组交换

  • 优点:无需建立连接;线路利用率高;简化了存储管理;加速传输;减少出错概率和重发数据量
  • 缺点:引起了转发时延;需要传出额外的信息量;对于数据报服务,存在失序、丢失或重复分组的问题;对于虚电路服务,存在呼叫建立、数据传输和虚电路释放三个过程

1.3 计算机网络的定义和分类

1.定义

  • 计算机网络的精确定义并未统一

  • 计算机网络的最简单的定义是:一些接的、自治的计算机的集合

    • 互连: 是指计算机之间可以通过有线或无线的方式进行数据通信;
    • 自治: 是指独立的计算机,它有自己的硬件和软件,可以单独运行使用;
    • 集合: 是指至少需要两台计算机;
  • 现今计算机网络的较好的定义是:计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用

    • 计算机网络所连接的硬件,并不限于一般的计算机,而是包括了智能手机等智能硬件。
    • 计算机网络并非专门用来传送数据,而是能够支持很多种的应用(包括今后可能出现的各种应用)。

2.分类

按交换技术分类:

  • 电路交换网络
  • 报文交换网络
  • 分组交换网络

按使用者分类:

  • 公用网
  • 专用网

按传输介质分类:

  • 无线网络
  • 有线网络

按覆盖范围分类:

  • 广域网 WAN
  • 城域网 MAN
  • 局域网 LAN
  • 个域网 PAN

按拓扑结构分类:

  • 总线型网络
    image
  • 星型网络
    image
  • 环型网络
    image
  • 网状型网络
    image

1.4 计算机网络的性能指标

性能指标可以从不同方面来度量计算机网络的性能。

  • 速率:连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或数据率。

    常见单位:b/s、B/s、kb/s。注意:kb/s = 103 b/s
    而数据量单位中的bit、Bytet、KB之间的转换则是:kb = 210 B

  • 带宽:用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的 “最高数据率”

    单位:b/s、B/s、Kb/s、Mb/s、Gb/s

  • 吞吐量:表示在单位时间内通过某个网络(或信道、接口)的数据量。

    吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络;
    吞吐量受网络的带宽或额定速率的限制。

  • 时延:分为发送时延、传播时延、处理时延

    • 发送时延:与主机网卡、信道、路由器接口速率有关
      image
    • 传播时延:与传输媒体有关
      image
    • 处理时延:一般不方便计算且忽律不计
  • 时延带宽积:若发送端连续发送数据,则在所发送的第一个比特即将到达终点时,发送端已经发送了时延带宽积个比特。链路的时延带宽积又称为以比特为单位的链路长度

    image

  • 往返时间RTT(round-trip time):在许多情况下,因特网上的信息不是单方向传输,而是双向交互。因此这是一个很重要的性能指标。

  • 利用率:分为信道利用率和网络利用率。信道利用率并非越高越好
    image

  • 丢包率:即分组丢失率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率。

    • 丢包率具体可分为接口丢包率、结点丢包率、链路丢包率、路径丢包率、网络丢包率等。

    • 丢包率是网络运维人员非常关心的一个网络性能指标,但对于普通用户来说往往并不关心这个指标,因为他们通常意识不到网络丢包。

    • 分组丢失主要有两种情况:

      1. 分组在传输过程中出现误码,被结点丢弃;
      2. 分组到达一台队列已满的分组交换机时被丢弃;在通信量较大时就可能造成网络拥塞
    • 因此丢包率反应了网络的拥塞情况:

      • 无拥塞时丢包率为0
      • 轻度拥塞时丢包率为1%~4%
      • 严重拥塞时丢包率为5%~15%

1.5 计算机网络的体系结构

计算机网络的体系结构就是计算机网络及其构件所应完成的功能的精确定义。需要强调的是:这些功能的实现细节(例如采用何种硬件或软件),则是遵守这种体系结构的具体实现问题,并不属于体系结构本身所描述的内容。

1.常见的计算机网络体系结构

OSI体系结构:7层

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

image

TCP/IP体系结构:4层

应用层、传输层、网络层、网络接口层

image

TCP/IP协议各层的常见协议:TCP和IP是其中最重要的两个协议

image

原理体系层:5层。 TCP/IP协议网络接口层没有具体内容,为了更适用于教学需要,综合7层模型和4层模型创造出了5层模型

应用层、传输层、网络层、数据链路层、物理层

image

2.分层的必要性

计算机网络是个非常复杂的系统。 "分层"可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。

5层结构各层解决的问题/作用

物理层: 解决使用何种信号来传输比特的问题

  • 采用怎样的传输媒体;
  • 采用怎样的物理接口;
  • 使用怎样的信号表示比特0或1

数据链路层: 解决分组在一个网络(或一段链路)上传输的问题​

  • 如何标识网络中的各主机(主机编址问题,例如MAC地址)
  • 如何从信号所表示的一连串比特流中区分出地址和数据(分组的封装格式问题)
  • 如何协调各主机争用总线

网络层: 实现分组在网络间传输的作用

  • 如何标识各网络以及网络中的各主机(网络和主机共同编制的问题,例如IP地址)
  • 路由器如何转发分组,如何进行路由选择

传输层: 解决进程之间基于网络的通信问题

  • 如何标识各进程,进而解决进程之间基于网络的通信问题
  • 出现传输错误时,如何处理

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

  • 通过应用进程间的交互来完成特定的网络应用

3.专用术语介绍

来源于OSI体系结构,也适用于TCP/IP协议和5层体系结构

实体: 仍和可发送或接收信息的硬件或软件接触

对等实体: 收发双方相同层次中的实体

image

协议: 控制两个对等实体进行逻辑通信的规则的集合

image

协议的三要素:

  • 语法:定义所交换信息的格式(例如,定义HTTP请求报文的格式)
  • 语义:定义通信双方所要完成的操作(例如,定义如何收发HTTP报文)
  • 同步:定义通信双方的时序关系(例如,TCP的三次握手)

​​

服务: 在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务;要实现本层协议,还需要使用下面一层所提供的服务

注意:协议是“水平的”,服务是“垂直的”

实体看得见相邻下层所提供的服务,但并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实体是 "透明" 的。

服务访问点: 在同一系统中相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型。

  • 数据链路层的服务访问点为帧的“类型”字段
  • 网络层的服务访问点为IP数据报首部中的“协议字段”
  • 传输层的服务访问点为“端口号”

服务原语: 上层使用下层所提供的服务必须通过与下层交换一些命令,这些命令称为服务原语

协议数据单元PDU: 对等层次之间传送的数据包称为该层的协议数据单元。

服务数据单元SDU: 同一系统内,层与层之间交换的数据包称为服务数据单元。

多个SDU可以合成为一个PDU;一个SDU也可划分为几个PDU。

image

1.6 小结

三种交换方式的特点和区别:电路交换、报文交换、分组交换

计算机网络的分类

性能指标:带宽、时延、利用率、 速率、吞吐量、时延带宽积、往返时间RTT、丢包率

体系结构:OSI 7层、TCP/IP 4层、5层

image

二、物理层

2.1 物理层的基本概念

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。.

物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。

物理层协议的主要任务:

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

传输媒体通常分为两类:

  • 导引型传输媒体: 双绞线、同轴电缆、光纤
  • 非导引型传输媒体: 微波通信(2-40GHz)

2.2 物理层下面的传输媒体

1.导引型传输媒体

  • 同轴电缆

    • 基带同轴电缆(50欧):数字传输,过去用于局限网
    • 宽带同轴电缆(75欧):模拟传输,目前主要用于有线电视
    • 同轴电缆价格较贵且布线不够灵活和方便,随着集线器的出现,在局域网领域基本上都是采用双绞线作为传输媒体
    • image
  • 双绞线

    • 绞合的作用:抵御部分来自外界的电磁波干扰;减少相邻导线的电磁干扰
    • imageimage
    • image
  • 光纤

    • image
    • 原理:image
    • 单模光纤、多模光纤
      image
  • 电力线

2.非导引型传输媒体

  • 无线电波:WIFI
  • 微波通信(2-40GHz)
  • 红外线
  • 可见光

2.3 传输方式

  • 串行传输: 计算机之间(如计算机网络)通常采用串行传输

    image

  • 并行传输: 计算机内部通常采用并行传输。这种传输方式花费高,速度快

    image

  • 同步传输:收发双方时钟保持同步,以保证接收端对比特信号检测时没有移位

    保持同步的两种方法:

    • 外同步:在收发双方之间添加一条单独的时钟信号线
    • 内同步:发送端将时钟同步信号编码到发送数据中一起传输(例如曼彻斯特编码)
  • 异步传输:接收端仅在每个字节的起始处对字节内的比特实现同步。异步指字节之间的异步(即字节之间的时间间隔不固定)

    同步的方法:在每个字节的前后加上起始位和结束位
    image

  • 单向通信(单工):只需要一条信道。两个设备之间,只能单向传递信息
  • 双向交替通信(半双工):需要两条信道。可以相互传递信息 不能同时传递
  • 双向同时通信(全双工):需要两条信道。可以同时传递相互传递信息

2.4 编码与调制

1.基础知识

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

image

传输媒体 ≠ 信道

一条传输媒体可以包含多个信道

数据是消息的实体,信号是数据的电磁表现。

在计算机网络中,常见的是将数字基带信号通过编码或调制的方法在相应信道进行传输

image

2.常见编码

  • 不归零编码:存在同步问题。一段数据传输过去,不能知道是几个码元

    image

  • 归零编码:每个码元传输结束后信号都要“归零”,所以接收方只要在信号归零后进行采样即可,不需要单独的时钟信号。

    归零编码相当于把时钟信号用“归零”方式编码在了数据之内,这称为“自同步”信号。
    但是归零信号过多,导致编码效率低
    image

  • 曼彻斯特编码:码元中间时刻进行跳变。跳变即表示时钟,又表示数据
    image

  • 差分曼彻斯特编码:码元中间时刻进行跳变。跳变仅表示数据,码元开始处电平是否发生变化表示数据
    image

3.调制方法

  • 基本调制方法: 1个码元只能包含1个比特信息。
    image

  • 混合调制方法: 频率和相位是相关的,所以一次只能调制频率和相位两个中的一个。所以通常情况下,相位和振幅可以结合起来一起调制,称为正交振幅调制QAM:

    • 有12种相位,每种相位有1或2种振幅可选
    • 可以调制出16种码元,每种码元可以对应表示4个比特。每个码元与4个比特的对应关系需采用格雷码,即任意两个相邻码元只有1个比特不同。这样哪怕传输中信号失真,在图中投影发生偏差,对应表示的比特误差也不会过大。
      image

2.5 信道的极限容量

1.信号失真

码间串扰:波形在信号传输过程中失真,导致接收方不能还原信号

产生失真的原因:

  • 码元传输速率
  • 信号传输距离
  • 噪声干扰
  • 传输媒体质量

2.奈氏准则

奈氏准则: 在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的

  • 理想低通信道的最高码元传输速率=2W Baud = 2W码元/秒

  • 理想带通信道的最高码元传输速率=W Baud = W码元/秒

    W:信道带宽(单位为Hz),Baud:波特,即 码元/秒

  • 数据传输速率 = 波特率 x 每个码元所携带的信息量

  • 码元传输速率又称为波特率、调制速率、波形速率或符号速率。它与比特率有一定关系

    • 当1个码元只携带1比特的信息量时,则波特率(码元/秒)与比特率(比特/秒)在数值上是相等的
    • 当1个码元携带n比特的信息量时,则波特率转换成比特率时,数值要乘以n。
  • 要提高信息传输速率(比特率),就必须设法使每一个码元能携带更多个比特的信息量。这需要采用多元制。

只要采用更好的调制方法,让码元可以携带更多的比特,岂不是可以无限制地提高信息的传输速率?

不是这样的。因为信道的极限信息传输速率还要受限于实际的信号在信道中传输时的信噪比

3.香农公式

香农公式: 带宽受限且有高斯白噪声干扰的信道的极限信息传输速率。

  • image
  • 信道带宽或信道中信噪比越大,信息的极限传输速率越高。
  • 在实际信道上能够达到的信息传输速率要比该公式的极限传输速率低不少。这是因为在实际信道中,信号还要受到其他一些损伤,如各种脉冲干扰、信号在传输中的衰减和失真等,这些因素在香农公式中并未考虑。

4.结论

  • 在信道带宽一定的情况下,根据奈氏准则和香农公式,要想提高信息的传输速率就必须采用多元制(更好的调制方法)和努力提高信道中的信噪比
  • 自从香农公式发表后,各种新的信号处理和调制方法就不断出现,其目的都是为了尽可能地接近香农公式给出的传输速率极限

三、数据链路层

3.1 数据链路层概述

链路(Link): 就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。

数据链路(Data Link): 是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。

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

数据链路层的三个重要问题:

  • 封装成帧:添加帧头和帧尾。
  • 差错检测:接收方主机通过帧尾的检错码和差错检测算法来判断传输过程中是否出现误码。
  • 可靠传输:检查到误码后,会将帧丢弃,然后重新申请这个被丢弃的帧的正确副本。
    换句话说,尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输。

以上是点对点传输的问题。

而使用广播信道的传输,除了上面三个问题之外,还有其他几个问题:

  • 编址问题:接收主机判断传输的帧是否是发送给自己的
  • 碰撞问题:CSMA/CD

而现在最常用的传输方式是:局域网

3.2 封装成帧

1.封装成帧

封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。

  • 帧头和帧尾中包含有重要的控制信息。
    image

  • 帧头和帧尾的作用之一就是帧定界: 从比特流中提取出帧。

    • 有些协议的格式有标志,可以通过标志来判断。
    • 但不是每一种协议都有标志。例如上图的MAC帧就没有标志。那么又是怎么从比特流中提取出帧呢?
      物理层在接收到MAC帧后,会在MAC帧后面加上前导码,然后再发送。并且,该协议还规定了96比特时间的帧间间隔,因此不需要结束符
      image

2.透明传输

透明传输是指数据链路层对上层交付的传输数据没有任何限制。

  • 例如,上层交付给数据链路层的数据里,有跟标志一样的字符,如果不加处理,那么接收方收到数据的时候,就会错误判断数据在何处结束。
    image
  • 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输:添加转义字符
    image
  • 面向比特的物理链路使用比特填充的方法实现透明传输:每五个连续的1后面添加一个0
    image

3.帧长度

为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些

考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)

3.3 差错检测

1.差错检测的必要性

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

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

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

2.差错检测方法

奇偶校验:

  • 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中 “1”的个数为奇数(奇校验)或偶数(偶校验)

  • 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)

    因为奇偶校验的漏检率较高,因此不采用这种检测方法

循环冗余校验CRC(Cyclic Redundancy Check):

  • 收发双方约定好一个生成多项式G(x);

  • 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;

  • 接收方通过生成多项式来计算收到的数据是否产生了误码;

  • image

  • 常用生成多项式:
    image

  • CRC例题:
    image

    image

3.检错码不能纠错

  • 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
  • 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
  • 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
  • 在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

3.4 可靠传输

1.可靠传输的基本概念

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

如何处理误码,取决于数据链路层向上层提供的服务类型:

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

一般情况下:

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

需要说明的是:比特差错只是传输差错中的一种

从整个计算机网络体系结构来看:传输差错不仅会发生在数据链路层;传输差错还包括分组丢失分组失序以及分组重复

因此,可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。但是可靠传输的实现比较复杂,开销也比较大,因此是否使用可靠传输取决于应用需求。

介绍三种可靠传输的思想:并不局限在数据链路层,可靠传输可以应用在计算机网络的各个层里。

2.停止-等待协议SW(Stop-and-Wait)

image

发送方: 发送一个数据分组后,不丢弃此数据分组,而是进入停止-等待状态,直到收到接收方的ACK或NAK回复,再发送下一个分组。

接收方: 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。因此这种协议也常被称为自动请求重传协议ARQ(Automatic-Repeat-reQuest) ,因为重传的请求是自动进行的,而不需要接收方显示地请求发送方重传某个分组。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组。

当数据分组丢失:

  • 接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。

  • 为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传

    • 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
    • 然而在传输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
  • 一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。

当ACK/NAK分组丢失:

  • 发送方收不到ACK分组,因此会重传分组。此时接收方如何判断这个分组是重传的,还是新分组呢?
  • 避免分组重复这种传输错误,必须给每个分组带上序号
  • 对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。

当ACK/NAK分组迟到:

  • image
  • 解决方案:对确认分组也进行编号。
  • 注意,对于数据链路层的点对点信道,往返时间比较固定,不会出现ACK分组迟到的情况。因此如果只在数据链路层实现停止-等待协议,可以不给ACK分组编号

停止-等待协议的信道利用率:TA一般远小于TD,可以忽略

image

  • 信道利用率image
  • 当往返时延RTT远大于数据帧发送时延TD时(如使用卫星链路),信道利用率非常低;
  • 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低;
  • 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即回退N帧协议GBN和选择重传协议SR。

3.回退N帧协议GBN

停止-等待协议中,TD越大,其信道利用率越大。一个直观的想法是:一次性发送多个分组来增大TD

回退N帧协议GBN:

  1. 采用n个比特给分组编序号,即序号0~2n- 1;
  2. 发送窗口的尺寸WT的取值:1<WT≤2n- 1,本例取WT=5;(不可超过取值范围!否则接收方无法分辨新旧数据分组)
  3. 接收窗口的尺寸WR的取值必须是WR=1,因此接收方只能按序接收数据分组;
  4. 接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),对按序到达的最后一个数据分组发送确认
    ACKn表示序号为n及以前的所有数据分组都已正确接收。​
  5. image​​image

若W**T**取值超过范围,如W**T**=8会出现什么情况?

  • 发送方发送0-7分组;
  • 接收方正确接收0-7分组,并回复ACK7,接受窗口指向0;
  • ACK7分组丢失;
  • 发送发重传计时器超时后重新发送0-7分组;
  • 接收方无法分辨新旧分组,再次接受0-7分组,出现错误

image

4.选择重传协议SR

选择重传协议SR是对回退N帧协议的改进:

  • 一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
  • 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1(而应大于1) ,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议
  • 注意:选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐—确认!

选择重传协议SR:

  1. 采用n个比特给分组编序号,即序号0~2n- 1;
  2. 发送窗口的尺寸WT的取值:1<WT≤2n- 1,本例取WT=4;(不可超过取值范围!否则接收方无法分辨新旧数据分组)
  3. 接收窗口的尺寸WR的取值:WR=WT=4;
  4. 接收方需要对收到的数据分组逐个发送确认,若最左侧的分组正确接收,则接受窗口右移
  5. image

发送窗口和接受窗口的要求:

  • 发送方的发送窗口尺寸WT必须满足:1<W**T**≤2**n-1**,其中n是构成分组序号的比特数量。注意和回退N帧范围不一样!

    • 若WT=1:与停止-等待协议相同;
    • 若WT>2n-1:接收方无法分辨新、旧数据分组
  • 接收方的接收窗口尺寸WR必须满足:1 <WR≤WT

    • 若WR=1:与回退N帧协议相同
    • 若WR>WT:无意义

3.5 点对点协议PPP

1.简介

点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。

PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661, RFC1662]。

常见应用场景:个人用户和ISP链接使用PPP协议;广域网链路中的两台路由器使用PPP协议

image

image

2.PPP协议内容

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

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

帧格式:

  • image

  • 标志(Flag)字段:PPP帧的定界符,取值为0x7E

  • 地址(Address)字段:取值为0xFF,预留(目前没有什么作用)

  • 控制(Control)字段:取值为0x03,预留(目前没有什么作用)

  • 协议(Protocol)字段:指明帧的数据部分送交哪个协议处理

    • 取值0x0021表示:帧的数据部分为IP数据报:image
    • 取值0xC021表示:帧的数据部分为LCP分组:image
    • 取值0x8021表示:帧的数据部分为NCP分组:image
  • 帧检验序列(Frame Check Sequence)字段:CRC计算出的校验位

如何实现透明传输:

  • 面向字节的异步链路:字节填充法——插入“转义字符”

    • 发送方的处理:7E->(7D,5E)7D->(7D,5D) ;ASCII码控制字符xx(数值小于0x20的字符xx) ->(7D,0x20+xx)
    • 接收方的处理:进行反变换即可恢复出原来的帧的数据部分。
  • 面向比特的同步链路:比特填充法——插入“比特0”

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

如何实现差错检测:

  • image
  • 使用循环冗余校验CRC来计算,使用的G(x)如下所示:image
  • RFC 1662的附录部分给出了FCS的计算方法的C语言实现:为了减少对CPU的占用,采用查表法来实现。
  • 接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务

工作状态:

image

3.6 媒体介入控制

1.基本概念

共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)

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

- 媒体接入控制
	- 静态划分信道
		- 频分多址
		- 时分多址
		- 码分多址
	- 动态接入控制
		- 受控接入
			- 集中控制
			- 分散控制
		- 随机接入

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

受控接入: 已退出历史舞台

  • 集中控制:有一个主站以循环方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据。最大缺点是存在单点故障问题。
  • 分散控制:各站点是平等的,并连接成一个环形网络。令牌(一个特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据,并在发送完数据后将令牌传递给下一个站点。

随机接入: 所有站点通过竞争,随机地在信道上发送数据。如果恰巧有两个或更多的站点在同一时刻发送数据。则信号在共享媒体上就要产生碰撞(即发生了冲突)。使得这些站点的发送都失败。因此,这类协议要解决的关键问题是如何尽量避免冲突及在发生冲突后如何尽快恢复通信。著名的共享式以太网采用的就是随机接入。

2.静态划分信道

信道复用:

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

在本课程中,我们不严格区分复用与多址的概念。两个概念可简单理解如下:

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

常见的信道复用技术:

  • 频分复用FDM:同时占用不同的频带资源,并行通信

  • 时分复用TDM:不同时占用同样频带宽度,串行通信

  • 波分复用WDM:就是光的频分复用

  • 码分复用CDM:主要用于多址接入,更常用的名字是——码分多址CDMA。

    • 在同样的时间使用同样的频带进行通信。 由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰;
    • CDM最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力其频谱类似于白噪声,不易被敌人发现;
    • 在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip) 。通常m的值是64或128;
    • 使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence):一个站如果要发送比特1,则发送它自己的m bit码片序列;如果要发送比特0,则发送它自己的m bit码片序列的二进制反码
    • 接收方将收到的码片信号与各站码片求规格化内积:结果为+1则该站发送了比特1;结果为-1则该站发送了比特0;结果为0则该站没有发送信号。
    • 码片序列必须满足以下要求:分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列;分配给每个站的码片序列必须相互正交(规格化内积为0)。

3.随机接入——CSMA/CD

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

多址接入MA:

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

载波监听CS:

  • 每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧(“先听后说”) ;
  • 若检测到总线空闲96比特时间,则发送这个帧;
  • 若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后发送这个帧。
  • image

碰撞检测CD:

  • 每一个正在发送帧的站边发送边检测碰撞(“边说边听”) ;
  • 一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送(“一旦冲突,立即停说,等待时机,重新再说”) ;
  • 以太网还采取一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号(Jamming Signal),以便有足够多的碰撞信号使所有站点都能检测出碰撞

争用期(碰撞窗口):

  • 以太网的端到端往返传播时延2t称为争用期或碰撞窗口;
  • 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
  • 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间;
  • 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长:10Mb/s以太网把争用期定为512比特发送时间,即51.2pus,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m。
  • image

最小帧长:

  • 因为边发送边监听,所以若帧长很小时,会很快发送完后停止监听。此时若发生碰撞,发送方已经停止监听了,不会知道碰撞的发生。所以以太网的帧长不能太短
  • 以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期)。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。
  • 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
  • 最小帧长 = 争用期 x 传输速率

最大帧长:

  • 帧很长时,会长时间占用总线,也有可能使接收方的缓冲区溢出
  • image

退避时间: 等待多久再次发送

  • image

    image

  • 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。

  • 重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞。则丢弃该帧,并向高层报告。

信道利用率:

考虑理想情况:

  • 各主机发送帧都不会产生碰撞;
  • 总线一旦空闲就有某个主机立即发送帧;
  • 发送一帧占用总线的时间为T0+ t,而帧本身的发送时间是T0
  • 则极限信道利用率 image
  • 为使Smax增大,则以太网端到端的距离不应太长,而帧的长度应尽量长些

帧发送流程图:

image

帧接收流程图:

image

4.随机接入——CSMA/CA

适用于无线局域网

既然CSMA/CD协议已经成功地应用于使用广播信道的有线局域网,那么同样使用广播信道的无线局域网能不能也使用CSMA/CD协议呢?

  • 在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。

  • 在无线局域网中,不能使用碰撞检测CD,原因如下:

    • 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。
    • 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。​
    • 隐蔽站问题:
      image

802.11标准:

  • 802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。

  • 由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止-等待协议) 来保证数据被正确接收

  • 802.11的MAC层标准定义了两种不同的媒体接入控制方式:

    • 分布式协调功能DCF(Distributed Coordination Function) 。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。
    • 点协调功能PCF(Point Coordination Function) 。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用。
  • 802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS。

帧间间隔IFS(InterFrame Space):

  • 帧间间隔的长短取决于该站点要发送的帧的类型:

    • 高优先级帧需要等待的时间较短,因此可优先获得发送权;
    • 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。
  • 常用的两种帧间间隔如下:

    • 短帧间间隔SIFS(28us) ,是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。
      使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
    • DCF帧间间隔DIFS(128us) ,它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧

工作原理:

image

什么时候使用退避算法:

  • 当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法

  • 以下情况必须使用退避算法

    • 在发送数据帧之前检测到信道处于忙状态时;
    • 在每一次重传一个数据帧时;
    • 在每一次成功发送后要连续发送下一个帧时(避免一个站点长时间占用信道)。

退避算法:

  • 在执行退避算法时,站点为退避计时器设置一个随机的退避时间:

    • 当退避计时器的时间减小到零时,就开始发送数据;
    • 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器。
  • 在进行第i次退避时,退避时间在时隙编号{0,1,...,2*1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应第6次退避)就不再增加了。

  • image

信道预约和虚拟载波监听: 为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约

  1. 源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS(Request To Send) ,它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间。

  2. 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clar To Send) ,它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。

  3. 源站收到CTS帧后,再等待一段时间SIFS后,就可发送其数据帧。

  4. 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK。

  5. 除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。

  6. 由于RTS帧和CTS帧很短,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择:

    • 使用RTS帧和CTS帧
    • 不使用RTS帧和CTS帧
    • 只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧
  7. 除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制

    由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题

image

3.7 MAC地址、IP地址以及ARP协议

  • MAC地址是以太网的MAC子层所使用的地址;
  • IP地址是TCP/IP体系结构网际层所使用的地址;
  • ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址;
  • 尽管IP地址和ARP协议属于TCP/IP体系结构的网际层而不属于数据链路层,但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、IP地址以及ARP协议。因此,我们将这三者放在一起讨论。

1.MAC地址

  • 使用点对点信道的数据链路层不需要使用地址

  • 使用广播信道的数据链路层必须使用地址来区分各主机:

    • 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址
    • 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control) ,因此这类地址被称为MAC地址。 MAC地址有时也被称为物理地址
    • MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址
  • 一般情况下,用户主机会包含两个网络适配器——有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。

IEEE 802局域网的MAC地址格式:

  • image

  • image

  • 标准表示方法:用十六进制表示,每8比特为一组,每组之间用短线“-”链接。例如:XX-XX-XX-XX-XX-XX

    其他表示方法:XX:XX:XX:XX:XX:XX。XXXX.XXXX.XXXX

  • 发送顺序:字节发送顺序是第一字节->第六字节;字节内比特发送顺序是b0->b7

单播MAC地址:

image

广播MAC地址: FF-FF-FF-FF-FF-FF

image

多播MAC地址: 快速判断多播地址的方法——地址的第二个字符若为奇数,则为多播地址

image

2.IP地址

属于网络层而非数据链路层。

MAC地址不具备区分不同网络的功能:

  • 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址
  • 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。

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

  • 网络编号: 标识因特网上数以百万计的网络
  • 主机编号: 标识同一网络上不同主机(或路由器各接口)
  • 前三个数表示的是网络编号,同一网络各设备的网络编号是相同;最后一个数表示的主机编号,同一网络各设备的主机编号各不相同
    image

数据包转发过程中IP地址与MAC地址的变化情况:

  • 数据包转发过程中源lP地址和目的IP地址保持不变;
  • 数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变;
  • image

3.ARP协议

image

  • 源主机在自己的ARP高速缓存表中查找目的主机的IP地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送;若找不到,则发送ARP请求(封装在广播MAC帧中);
  • 目的主机收到ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送ARP响应(封装在单播MAC帧中),ARP响应中包含有目的主机的IP地址和MAC地址;

设备有一个ARP高速缓存表,用来记录IP地址和MAC地址的对应关系。分为两种类型:

  • 动态:自动获取,声明周期默认为两分钟,生命周期结束时自动删除。
  • 静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。

ARP的作用范围: 逐段链路或逐个网络使用,不能跨网络使用。

3.8 集线器与交换机的区别

  • 早期的总线型以太网
    image

  • 使用双绞线和集线器HUB的星型以太网:在物理层扩展以太网
    image

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

    • 与集线器的区别:交换机只转发给目的主机,而集线器则转发给网络中的其他各个主机
    • 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式
    • 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)
    • 以太网交换机一般都具有多种速率的接口,例如:1OMb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合
    • 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
    • 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的
    • 帧的两种转发方式:存储转发;直通交换
    • 用交换器连接时,扩大了广播域,隔离碰撞域。
      image

集线器和交换机的区别小结如下: 集线器现已被淘汰

image

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

  • 以太网交换机工作在数据链路层(也包括物理层)
  • 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
  • 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。帧交换表中的每条记录都有自己的有效时间,到期自动删除。这是因为MAC地址与交换机接口的对应关系并不是永久性的,交换机接口可能改接另一台主机,而主机也可以更换网卡

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

  1. 收到帧后进行登记:登记的内容为帧的源MAC地址及进入交换机的接口号

  2. 跟据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况:

    • 明确转发: 交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)
    • 盲目转发: 交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)
    • 明确丢弃: 交换机知道不应该转发该帧,将其丢弃

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

如何提高以太网的可靠性?答:添加冗余链路可以提高以太网的可靠性。

但是冗余链路也会带来负面效应——形成网络环路。网络环路会造成以下问题:

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

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

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

3.11 虚拟局域网VLAN

1.虚拟局域网VLAN的概述

  • 以太网交换机工作在数据链路层(也包括物理层)

  • 使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域

  • 随着交换式以太网规模的扩大,广播域相应扩大。巨大的广播域会带来很多弊端

    • 广播风暴
    • 难以管理和维护
    • 潜在的安全问题

那么如何将较大的广播域分隔开来呢?

分隔广播域的方法:

  • 路由器。 但是路由器成本较高,在局域网中全部使用路由器来隔离是不现实的。
  • 虚拟局域网VLAN技术

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

2.虚拟局域网VLAN的实现机制

需要实现两个功能:能处理IEEE 802.1Q帧、可支持不同类型的端口。

能处理IEEE 802.1Q帧:

  • IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记

    image

  • VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN

    • VID的取值范围是:0~4095 (0 ~ 212-1)
    • 0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1~4094
  • 802.1Q帧是由交换机来处理的,而不是用户主机来处理的。

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

可支持不同类型的端口:

交换机的端口类型有以下三种

  • Access
  • Trunk
  • Hybrid

交换机各端口的缺省VLAN ID = 默认VLAN ID:

  • 在思科交换机上称为Native VLAN,即本征VLAN
  • 在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID。

Access端口:

  • Access端口一般用于连接用户计算机
  • Access端口只能属于一个VLAN
  • Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
  • Access端口接收处理方法:一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签” ,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
  • Access端口发送处理方法:若帧中的VID与端口的PVID相等,则 “去标签”并转发该帧;否则不转发。

Trunk端口:

  • Trunk端口一般用于交换机之间交换机与路由器之间的互连

  • Trunk端口可以属于多个VLAN

  • 用户可以设置Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1。

  • Trunk端口接收处理方法:

    • 对VID等于PVID的帧, “去标签”再转发
    • 对VID不等于PVID的帧,不去掉标签直接转发
  • Trunk端口发送处理方法:

    • 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签” ,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
    • 接收“已打标签的帧”

Hybrid端口: 华为交换机的私有协议,大部分都与Trunk端口相同。

  • Hybrid端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)

  • Hybrid端口可以属于多个VLAN(同Trun端口)用户可以设置Hybrid端口的PVID值。默认情况下,Hybrid端口的PVID值为1(同Trun端口)

  • Hybrid端口发送处理方法(与Trunk端口不同):查看帧的VID是否在端口的“去标签”列表中

    • 若存在,则“去标签”后再转发
    • 若不存在,则直接转发
  • Hybrid端口接收处理方法(同Trunk端口):

    • 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
    • 接收“已打标签的帧”

四、网络层

4.1 网络层概述

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

  • 要实现网络层任务,需要解决以下主要问题:

    • 网络层向传输层提供怎样的服务:“可靠传输”还是“不可靠传输”
    • 网络层寻址问题:根据IP地址确定路由器接口
    • 路由选择问题:从A->B可能有不止一条路径
  • 因特网(Internet) 是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈

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

  • 综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。

4.2 网络层提供的两种服务

面向连接的虚电路服务:一种逻辑上的连接

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

无连接的数据报服务:

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

4.3 IPv4

1.IPv4地址概述

  • 在TCP/IP体系中,IP地址是一个最基本的概念

  • IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符

  • IP地址由因特网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配:

    • 我国用户可向亚太网络信息中心APNIC(Asia Pacific Network Information Center)申请IP地址,需要缴费。
    • 2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕。
    • 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。
  • IPv4地址的编址方法经历了如下三个历史阶段:

    • 1981年,分类编址
    • 1985年,划分子网
    • 1993年,无分类编址
  • 32比特的IPv4地址不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用:

    image

2.分类编址的IPv4地址

分为ABCDE五类:

  • image
  • 只有A类、B类和C类地址可分配给网络中的主机或路由器的各接口
  • 主机号为 “全0” 的地址是网络地址,不能分配给主机或路由器的各接口
  • 主机号为 “全1”的地址是广播地址,不能分配给主机或路由器的各接口

A类地址: image

  • 最小网络号为0,保留不指派image

  • 第一个可指派的网络号为1,网络地址为1.0.0.0image

  • 最大网络号127,作为本地环回测试地址,不指派image

    • 最小的本地环回测试地址为127.0.0.1image
    • 最大的本地环回测试地址为127.255.255.254image
  • 最后一个可指派的网络号为126,网络地址为126.0.0.0image

  • 可指派的网络数量为 2(8-1)-2=126:减去最小网络号0和最大网络号127

  • 每个网络中可分配的IP地址的数量为 224-2=16777214:减去主机号为“全0”的网络地址和“全1”的广播地址

B类地址: image

  • 最小网络号为128.0,网络地址为128.0.0.0image
  • 最大网络号也是最后一个可指派的网络号191.255,网络地址为191.255.0.0image
  • 可指派的网络数量为 2(16-2)=16384
  • 每个网络中可分配的IP地址的数量为 216-2=65534:减去主机号为“全0”的网络地址和“全1”的广播地址

C类地址: image

  • 最小网络号也是第一个课指派的网络号为192.0.0,网络地址为192.0.0.0image
  • 最大网络号也是最后一个可指派的网络号223.255.255,网络地址为223.255.255.0image
  • 可指派的网络数量为 2(24-3)=2097152
  • 每个网络中可分配的IP地址的数量为 28-2=254:减去主机号为“全0”的网络地址和“全1”的广播地址

一般不使用的几种特殊的IP地址

  • 地址0.0.0.0是一个特殊的IPv4地址,只能作为源地址使用,表示“在本网络上的本主机”。封装有DHCP Discovery报文的IP分组的源地址使用0.0.0.0
  • 以127开头且后面三个字节非“全0”或“全1”的IP地址是一类特殊的IPv4地址,既可以作为源地址使用,也可以作为目的地址使用,用于本地软件环回测试,例如常用的环回测试地址127.0.0.1
  • 地址255.255.255.255是一个特殊的IPv4地址,只能作为目的地址使用,表示“只在本网络上进行广播(各路由器均不转发)”。
  • image

判断IP地址为哪类:

  1. 根据地址左起第一个十进制数的值,可以判断出网络类别:小于127的为A类,128-191的为B类,192-223的为C类

  2. 根据网络类别,就可找出地址中的网络号部分和主机号部分:A类地址网络号为左起第一个字节,B类地址网络号为左起前两个字节,C类地址网络号为左起前三个字节

  3. 以下三种情况的地址不能指派给主机或路由器接口:

    • A类网络号和127
    • 主机号为“全0”的网络地址
    • 主机号为“全1”的广播地址

IP地址分配方法:

  1. 找出图中有哪些网络

  2. 根据各网络中主机和路由器接口总数量来决定给各网络分配哪个类别的网络号:

    • A类-16777214个
    • B类-65534个
    • C类-254个
  3. 依据所确定的网络号类别,为每个网络挑选一个网络号:

    • A类网络号的取值范围:1~126
    • B类网络号的取值范围:128.0~191.255
    • C类网络号的取值范围:192.0.0~223.255.255
  4. 为每台主机或接口分配一个IP地址,注意主机号部分不可以是“全0”或“全1”

3.划分子网的IPv4地址

为什么会出现划分子网的需求?在实际应用中,会发生已有网络的调整,例如从一个大的网络拆分成多个子网。为新增网络申请新的网络号会带来以下弊端:

  • 需要等待时间和花费更多的费用
  • 会增加其他路由器中路由表记录的数量
  • 浪费原有网络中剩余的大量IP地址

一个直观的想法就是,从主机号借用一部分来标记子网号。

但是设备如何知道主机号的哪些部分是子网号呢?这就引出了子网掩码

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

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

  • image
  • image
  • image

4.无分类编址的IPv4地址

划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用。

为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题。

1993年,IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing) 的RFC文档:

  • CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念

  • CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。

  • CIDR使用 “斜线记法” ,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量:

    image

  • CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块”

  • 我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节:

    • 地址块的最小地址:主机号全0
    • 地址块的最大地址:主机号全1
    • 地址块中的地址数量:2(32-x)
    • 地址块聚合某类网络(A类、B类或C类)的数量:地址数量÷一个某类网络的地址数量
    • 地址堆码(也可继续称为子网掩码)
  • 路由聚合(构造超网)的方法是找共同前缀

  • 网络前缀越长,地址块越小,路由越具体

  • 若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配。因为这样的路由更具体

5.IPv4地址的应用规划

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

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

变长的子网掩码VLSM(V​ariable Length Subnet Mask):

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

【【计算机网络】子网划分题型总结】

4.4 IP数据包的发送和转发过程

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

  • 主机发送IP数据报
  • 路由器转发IP数据报

注意:为了将重点放在TCP/IP协议栈的网际层发送和转发IP数据报的过程上,在此节之后的举例中,忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程以及以太网交换机自学习和转发帧的过程。

主机发送IP数据报:

  • 将子网掩码与源/目的主机的IP地址进行运算,求出两台主机所在的网络,以此判断目的主机是否与自己在同一个网络
  • 若在同一个网络,则属于直接交付
  • 若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发

路由器转发IP数据报:

  1. 检查IP数据报首部是否出错:

    • 若出错,则直接丢弃该IP数据报并通告源主机
    • 若没有出错,则进行转发
  2. 根据IP数据报的目的地址在路由表中查找匹配的条目:

    • 若找到匹配的条目,则转发给条目中指示的下一跳
    • 若找不到,则丢弃该lP数据报并通告源主机

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

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

使用静态路由配置可能出现以下导致产生路由环路的错误:

  • 配置错误
  • 聚合了不存在的网络
  • 网络故障

路由条目的类型:

  • 直连网络
  • 静态路由(人工配置)
  • 动态路由(路由选择协议)

特殊的静态路由条目:

  • 默认路由:不在路由表里的其他主机都被匹配默认路由。目的网络为0.0.0.0,地址掩码为0.0.0.0
  • 特定主机路由:目的网络为特定主机的IP地址,地址掩码为255.255.255.255
  • 黑洞路由:下一跳为null0,即丢弃

4.6 路由选择协议

1.路由选择协议概述

静态路由选择:

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

动态路由选择:

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

因特网采用的路由选择协议主要特点:

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

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

  • 域间路由协议:外部网关协议EGP
  • 域内路由协议:内部网关协议IGP

常见的路由选择协议:

image

路由器的基本结构:

  • 路由选择部分

    • 路由选择处理机
    • 任务是周期性地与其他路由器进行路由信息交互,来更新路由表
  • 分组转发部分由以下三部分构成

    • 交换结构:分组处理+查表转发(查转发表)
    • 输入/输出端口:拆封/封装,物理层->网络层/网络层->物理层
    • 输入输出缓冲区

路由表和转发表:

  • 路由表一般仅包含从目的网络到下一跳的映射
  • 路由表需要对网络拓扑变化的计算最优化
  • 转发表是从路由表得出的
  • 转发表的结构应当使查找过程最优化
  • 为简化问题的分析,时常不严格区分路由表和转发表

2.RIP的基本工作原理

路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议之一。

RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为 “距离向量D-V(Distance-Vector)" 。向量记为<net1, n>

RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离

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

RIP包含以下三个要点:

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

RIP的基本工作过程

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

RIP的路由条目的更新规则:

  • 发现了新的网络,添加
  • 到达目的网络,相同下一跳,最新消息,更新
  • 到达目的网络,不同下一跳,新路由优势,更新
  • 到达目的网络,不同下一跳,距离相等,等价负载均衡
  • 到达目的网络,不同下一跳,新路由劣势,不更新

RIP存在 “坏消息传播得慢” 的问题:

  • “坏消息传播得慢”又称为路由环路距离无穷计数问题,这是距离向量算法的一个固有问题

  • 可以采取多种措施减少出现该问题的概率或减小该问题带来的危害:

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

3.OSPF的基本工作原理

  • 开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的

    • “开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。"
    • “最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF
  • OSPF是基于链路状态的,而不像RIP那样是基于距离向量的

  • OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路

  • OSPF不限制网络规模,更新效率高,收敛速度快

  • 链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价” (cost):

    “代价”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。

OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系

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

OSPF在多点接入网络中路由器邻居关系的建立:

  • 选举指定路由器DR(designated router)和备用的指定路由器BDR(backup designated router)
  • 所有的非DR/BDR只与DR/BDR建立邻居关系
  • 非DR/BDR之间通过DR/BDR交换信息

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

    • 直连网路的链路状态信息
    • 邻居路由器的链路状态信息
  • LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。

  • 使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致。

使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。

OSPF有以下五种分组类型:

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

OSPF的基本工作过程:

  1. 相互发送问候分组,建立和维护邻居关系
  2. 相互发送数据库描述分组
  3. R1向R2发送链路状态请求分组
  4. R2向R1发送链路状态更新分组
  5. R1向R2发送链路状态确认分组

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

4.BGP的基本工作原理

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

  • 内部网关协议IGP

    • 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络
    • 无需考虑自治系统外部其他方面的策略
  • 外部网关协议EGP(例如BGP)

    • 在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的
    • 自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
    • 因此BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由

BGP的工作过程:

  • 在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的 “BGP发言人”

  • 不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179

    • 在此TCP连接上交换BGP报文以建立BGP会话
    • 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
    • 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)
  • BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。

  • BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)

  • 当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图

BGP-4有以下四种报文:

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

4.7 IPv4数据报的首部格式

image

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

  • 首部长度

    • 占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位
    • 最小十进制取值为5,表示IP数据报首部只有20字节固定部分
    • 最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分
  • 区分服务: 占8比特,用来获得更好的服务。只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

  • 总长度

    • 占16比特,表示IP数据报的总长度(首部+数据载荷)。
    • 最大取值为十进制的65535,以字节为单位。
  • 标识、标志、片偏移:这三个字段共同用于IP数据报分片

    标识:

    • 占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。
    • IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此信赋给标识字段。

    标志:

    • 占3比特,各比特含义如下:
    • DF位:1表示不允许分片,0表示允许分片;
    • MF位:1表示“后面还有分片”,0表示“这是最后一个分片”
    • 保留位:必须为0.

    片偏移:

    • 占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
    • 片偏移以8个字节为单位。
  • 生存时间: 防止IP数据报在网络中永久兜圈

    • 最初以秒为单位,最大生存周期为255秒;路由器转发lP数据报时,将P数据报首部中的该字段的值减去P数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃
    • 现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1.若不为0就转发,否则就丢弃。
    • IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
  • 协议: 占8比特,指明IPv4数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值如下图所示
    image

  • 首部检验和: 占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。

  • 可选字段: 可选字段长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。

    可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理P数据报的开销。实际上可选字段很少被使用

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

4.8 网际控制报文协议ICMP

为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。

主机或路由器使用ICMP来发送差错报告报文询问报文。

ICMP报文被封装在IP数据报中发送。

ICMP差错报文共有以下五种

  • 终点不可达:路由器或主机不能交付数据报时,丢弃IP数据报,并向源主机发送ICMP终点不可达报告报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误

  • 源点抑制:路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

  • 时间超过:

    • 路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文
    • 另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
  • 参数问题:当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。

  • 改变路由(重定向)路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

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

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

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

  • 回送请求和回答

    • ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
    • 收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
    • 这种询问报文用来测试目的站是否可达及了解其有关状态。
  • 时间戳请求和回答

    • ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
    • 在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
    • 这种询问报文用来进行时钟同步和测量时间

ICMP应用举例:

  • 分组网间探测PING(Packet InterNet Groper)

    • 用来测试主机或路由器间的连通性
    • 应用层直接使用网际层的ICMP(没有通过传输层的TCP或UDP)
    • 使用ICMP回送请求和回答报文
  • 跟踪路由(traceroute)

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

    • Windows版本

      • tracert命令
      • 应用层直接使用网际层ICMP
      • 使用了ICMP回送请求和回答报文以及差错报告报文
    • Unix版本

      • traceroute命令
      • 在传输层使用UDP协议
      • 仅使用ICMP差错报告报文

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

1.虚拟专用网VPN(Virtual Private Network)

利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN

由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址

  • 同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN
  • 有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网VPN。
  • 在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN

2.网络地址转换NAT(Network Address Translation)

NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源

由于绝大多数的网络应用都是使用传输层协议TCP或UDP来传送数据,因此可以利用传输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation)。

对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。

由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护

五、传输层

5.1 概述

  • 之前所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信
  • 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
  • 如何为运行在不同主机上的应用进程提供直接的通信服务是传输层的任务,传输层协议又称为端到端协议。
  • 传输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个传输层实体之间有一条端到端的逻辑通信信道
  • 根据应用需求的不同,因特网的传输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP,这两种协议就是本章要讨论的主要内容。

5.2 传输层端口号、复用、分用的概念

为什么有端口号:

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

TCP/IP体系的传输层使用端口号区分应用层的不同应用进程

  • 端口号使用16比特表示取值范围0~65535

  • 端口号分为以下三类:

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

TCP/IP体系的应用层常用协议所使用的熟知端口号

  • UDP: IP协议字段=17

    RIP-520;DNS-53;TFTP-69;SNMP-161;DHCP-67/68

  • TCP: IP协议字段=6

    SMTP-25;FTP-21/20;BGP-179;HTTP-80;HTTPS-443

发送方的复用和​接收方的分用

  • image
  • image

5.3 UDP与TCP的对比

UDP和TCP是TCP/IP体系结构传输层中的两个重要协议

用户数据报协议UDP(User Datagram Protocol):

  • UDP可以随时发送信息,无连接
  • UDP支持单播、多播以及广播
  • UDP是面向应用报文的,对应用层交付的报文直接打包
  • UDP向上层提供无连接不可靠传输服务(适用于实时应用,如IP电话、视频会议等)
  • UDP首部开销小,仅包括四个字段,每个字段2字节。共8字节
    image

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

  • 建立连接后才能发送信息。 “三报文握手”建立连接“四报文挥手”释放连接
  • TCP仅支持单播
  • TCP是面向字节流
  • TCP向上层提供面向连接的可靠传输服务,有流量控制拥塞控制(适用于要求可靠传输的引用,如文件传输)
  • TCP报文段的首部最小20字节,最大60字节
    image

5.4 TCP的流量控制

为什么要进行流量控制:

  • —般来说,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
  • 所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收
  • 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

滑动窗口:

5.5 TCP的拥塞控制

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

TCP拥塞控制的四种算法

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

在介绍四种拥塞控制算法基本原理之前,我们假定如下条件

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

拥塞控制:

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

    • 拥塞窗口cwnd的维护原则: 只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些。
    • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)。
  • 发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd

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

    • 当cwnd < ssthresh时,使用慢开始算法;
    • 当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法;
    • 当cwnd = ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法;
  • image

  • 慢开始+拥塞避免:image

  • 有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这将导致发送方超时重传,并误认为网络发生了拥塞。发送方把拥塞窗口cwnd设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率

  • 快重传: 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传

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

    • 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法

    • 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3。

    • 原因:

      • 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络
      • 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中
      • 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。
  • image

5.6 TCP超时重传时间的选择

超时重传时间的选择是TCP最复杂的问题之一:

  • 超时重传时间较小:会引起报文不必要的重传,使网络负荷增大
  • 超时重传时间较大:重传推迟时间太长,使网络空闲时间较长,降低传送效率
  • 超时重传时间RTO应略大于往返时间RTT。

因为往返时间RTT并不是固定的,因此不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO。

  • 利用每次测量得到的RTT样本,计算加权平均往返时间RTTs(又称为平滑的往返时间)。

    image

  • 在上式中,0 ≤ a <1 :

    • 若α很接近于0,则新RTT样本对RTTs的影响不大
    • 若α很接近于1,则新RTT样本对RTTs的影响较大
    • 已成为建议标准的RFC6298推荐的α值为1/8,即0.125。
  • 用这种方法得出的加权平均往返时间RTTs就比测量出的RTT值更加平滑。

  • 显然,超时重传时间RTO应略大于加权平均往返时间RTTs

RFC6298建议使用下式计算超时重传时间RTO:

image

往返时间RTT的测量比较复杂:

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

5.7 TCP可靠传输的实现

TCP基于以字节为单位的滑动窗口来实现可靠传输

  • 发送方在未收到接收方的确认时,可将发送窗口内还未发送的数据全部发送出去
  • 接收方只接收序号落入发送窗口内的数据

发送窗口:

  • 后沿的移动情况有两种可能:

    • 不动:没有收到新的确认
    • 前移:收到了新的确认
  • 前沿的移动情况有三种可能:

    • 通常是不断向前移动

    • 不动

      • 没有收到新的确认,对方通知的窗口大小也不变
      • 收到新的确认,但对方通知窗口缩小,使发送窗口前沿正好不动
    • 向后收缩(不建议):对方通知的窗口缩小了

  • 如何描述发送窗口的状态

    • 使用三个指针P1,P2,P3分别指向相应的字节序号
      image
    • 小于P1的是已发送并已收到确认的部分
    • 大于等于P3的是不允许发送的部分
    • P3 - P1=发送窗口的尺寸
    • P2 - P1=已发送但尚未收到确认的字节数
    • P3 - P2=允许发送单目前尚未发送的字节数(又称为可用窗口或有效窗口)

补充说明:

  • 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大

    • 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
    • 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
  • 对于不按序到达的数据应如何处理,TCP并无明确规定。

    • 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据
    • TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
  • TCP要求接收方必须有累积确认捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。

    • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。
    • TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报立段就发送个确认[RFC 1122]
    • 捎带确认实际上并不经常发生,因为多数应用程序很少同时在两个方向上发送数据。
  • TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。

5.8 TCP的运输连接管理

1.TCP连接的简介

  • TCP是面向连接的协议,它基于运输连接来传送TCP报文段

  • TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。

  • TCP运输连接有以下三个阶段

    1. “三次握手”建立TCP连接
    2. 数据传送
    3. “四次挥手”释放TCP连接
  • TCP的运输连接管理就是使运输连接的建立和释放的都能正常地进行

2.TCP连接的建立

TCP的连接建立解决以下三个问题

  1. 使TCP双方能够确知对方的存在
  2. 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)
  3. 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

“三次握手”建立连接的过程:客户进程主动发起

  • image

  • SYN:同步位,表示连接请求

  • ACK:确认位,=1时有效,=0时无效

  • seq:序号

  • ack:确认号,为对方发送序号+1

  • seq=x:x是随机序号

  • seq=y:y是随机序号

  • 注意

    • TCP的标准规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号。
    • TCP的标准规定,普通的确认报文段(即最后一次“握手”)如果不携带数据,则不消耗序号。

不能简化为两次握手:

  • 为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误。​
  • image

3.TCP连接的释放

TCP通过 “四次挥手”来释放连接

  • image
  • seq=u:u是TCP客户进程之前已传送过的数据的最后一个字节的序号+1
  • ack=v:v是TCP客户进程之前已收到的数据的最后一个字节的序号+1
  • FIN=1的报文段即使不携带数据也要消耗掉一个序号
  • 两次挥手后,TCP连接进入半关闭状态,即TCP客户进程不会再发送数据,但TCP服务器进程可能会继续发送数据
  • seq=w:w是TCP服务器之前已传送过的数据的最后一个字节的序号+1
  • MSL(Maximum Segment Lifetime)最长报文段寿命

为什么客户进程要等待2MSL才关闭:

  • TCP客户进程最后的确认报文可能丢失,如果此时TCP客户进程已关闭,则TCP服务器会不停地重发TCP连接释放报文,又无法收到确认报文,导致TCP服务器无法关闭
  • image
  • 并且等待2MSL可以确保此次连接中所产生的所有报文都已在网络中消失,而不会对下一次的TCP连接造成干扰

保活计时器的作用:

  • 参与TCP连接的设备可能会出现故障而导致再也不能发送或接受信息,如果不采取措施,那么设备将会白白地等待下去
  • TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(2小时定时)。
  • 若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每隔75秒钟发送一次。若一连发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。

5.9 TCP报文段的首部格式

  • 为了实现可靠传输,TCP采用了面向字节流的方式。

  • 但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。

    • 一个TCP报文段由首部和数据载荷两部分构成
    • TCP的全部功能都体现在它首部中各字段的作用。

image

  • 源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。

  • 目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。

  • 序号: 占32比特,取值范围[0, 232-1],序号增加到最后一个后,下一个序号就又回到0。用来指出本TCP报文段数据载荷的第一个字节的序号

  • 确认号: 占32比特,取值范围[0, 232-1],序号增加到最后一个后,下一个序号就又回到0。用来指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认
    例如:若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。

  • 确认标志位ACK: 取值为1时确认号字段才有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1

  • 数据偏移:占4比特,并以4字节为单位。用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。这个字段实际上是指出了TCP报文段的首部长度

    • 首部固定长度为20字节,因此数据偏移字段的最小值为(0101)2。5x4=20
    • 首部最大长度为60字节,因此数据偏移字段的最大值为(1111)2。15x4=60
  • 窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。这是以接收方的接收能力来控制发送方的发送能力称为流量控制

  • 校验和:占16比特,检查范围包括TCP报文段的首部和数据载荷两部分在计算校验和时,要在TCP报文段的前面加上12字节的伪首部

  • 同步标志位SYN:在TCP连接建立时用来同步序号。

  • 终止标志位FIN:用来释放TCP连接。

  • 复位标志位RST:用来复位TCP连接。当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接

  • 推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。

  • 紧急标志位URG取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。

  • 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度

    • 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。
    • 紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据
    • 紧急数据之后是普通数据。
  • 选项

    • 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。
    • 窗口扩大选项:为了扩大窗口(提高吞吐率)。
    • 时间戳选项:用来计算往返时间RTT;用于处理序列号超范围的情况,又称为防止序号绕回PAWS
    • 选择确认选项:用来实现选择确认功能
  • 填充:由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,也就是首部长度字段,是以4字节为单位的)

六、应用层

6.1 应用层概述

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

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

包括:

  • 早期基于文本的应用(电子邮件、远程登录、文件传输、新闻组)
  • 20世纪90年代将因特网带入千家万户的万维网www
  • 当今流行的即时通信、P2P文件共享各种音视频应用
  • 最常见的:万维网WWW,域名系统DNS,动态主机配置DHCP,电子邮件,文件传送FTP,P2P文件共享,多媒体网络应用等

6.2 客户-服务器方式和对等方式

网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务。

开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。目前流行的主要有以下两种:

  • 客户/服务器(Client/Server,C/S)方式
  • 对等(Peer-to-Peer,P2P)方式

1.C/S方式

  • 客户和服务器是指通信中所涉及的两个应用进程

  • 客户/服务器方式所描述的是进程之间服务和被服务的关系

  • 客户是服务请求方,服务器是服务提供方。

  • 服务器总是处于运行状态,并等待客户的服务请求服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址

  • C/S方式是因特网上传统的、同时也是最成熟的方式,很多我们熟悉的网络应用采用的都是C/S方式。包括万维网www、电子邮件、文件传输FTP等。

  • 基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。

    • 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况
    • 为此,在C/S应用中,常用计算机群集(或服务器场)构建一个强大的虚拟服务器

2.P2P方式

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

6.3 动态主机配置协议DHCP

DHCP的作用:动态主机配置协议DHCP(Dynamic Host Configuration Protocol)提供了一种机制,称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息不用手工参与

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

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

DHCP主要使用以下报文来实现其功能:

  • DHCP DISCOVER:DHCP发现报文
  • DHCP OFFER:DHCP提供报文
  • DHCP REQUEST:DHCP请求报文
  • DHCP ACK:DHCP确认报文
  • DHCP NACK:DHCP否认报文
  • DHCP RELEASE:DHCP释放报文

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

DHCP的工作过程:

  • DHCP客户广播发送DHCP发现报文DHCP DISCOVER,该报文的源IP地址为0.0.0.0,目的IP地址为255.255.255.255

  • DHCP服务器收到报文后,根据DHCP客户端的MAC地址查找对应的配置信息,如果没有则采用默认信息构造DHCP提供报文DHCP OFFER。该报文的源IP地址为DHCP服务器,目的IP地址为255.255.255.255。也是广播

    • 配置信息包括:IP地址、子网掩码、地址租期、默认网关、DNS服务器
    • 客户机根据DHCP提供报文中的事务ID来判断是否需要接受该报文
  • DHCP客户端发送DHCP REQUEST报文向DHCP服务器确认自己接受租约。报文源IP地址为0.0.0.0,目的IP地址为255.255.255.255。也是广播

    • 封装有:事务ID、DHCP客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器端的IP地址
  • DHCP服务器发送确认报文DHCP ACK。该报文的源IP地址为DHCP服务器,目的IP地址为255.255.255.255。也是广播

  • DHCP客户端接收到DHCP ACK后,就可以使用租用的IP地址了

    • DHCP客户端在正式使用该地址之前,还会使用ARP检测所分配到的IP地址是否已被网络中其他主机占用:
    • 若被占用:给DHCP服务器发送“DHCPDECLINE”报文撤销IP地址租约,并重新发送“DHCP DISCOVER”报文
    • 若未被占用:可以使用租约中的IP地址与网络中其他主机通信了
  • 当IP地址的租用期过半时,DHCP客户端会向DHCP服务器发送请求报文DHCP REQUEST, 来请求更新租期。该报文的源IP地址为租用的地址,目的地址为DHCP服务器的地址

    • 情况一:若DHCP服务器同意,则发送DHCP ACK报文。DHCP客户端得到新的租期。该报文的源IP地址为DHCP服务器的地址,目的地址为租用的地址
    • 情况二:若DHCP服务器不同意,则发送DHCP NACK报文。DHCP客户机立即停止使用租用的IP地址并重新发送"DHCP DISCOVER"报文
    • 情况三:若DHCP服务器未响应,则DHCP客户端需要在租期进行到0.875时,再次发送请求报文DHCP REQUEST,然后继续等待DHCP服务器的响应
    • 情况四:若DHCP服务器直到租期到期都未响应,则租期到期后,DHCP客户端需要立即停止使用租用的IP地址,并重新发送"DHCP DISCOVER"报文来租用IP地址
  • DHCP客户可随时发送DHCP RELEASE报文,来提前终止使用租用的IP地址

  • image

DHCP中继代理:

  • 在每个网络上都设置一个DHCP服务器太过浪费,但路由器会隔离广播域
  • 解决方法:给路由器配置DHCP服务器的IP地址并使之成为DHCP中继代理

6.4 域名系统DNS

域名系统DNS的作用: 域名系统DNS是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名(例如www.hnust.cn),转换为便于机器处理的IP地址

  • 因特网采用层次树状结构的域名结构

  • 域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。

    • image
    • 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写字母。
    • 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边
    • 完整的域名不超过255个字符。
  • 域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。

  • 各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理。

  • 这种按等级管理的命名方法便于维护名字的唯一性,并且也容易设计出一种高效的域名。需要注意的是,域名只是个逻辑概念,并不代表计算机所在的物理地点。

顶级域名:

  • 顶级域名TLD(Top Level Domain)分为以下三类:

    • 国家顶级域名nTLD:采用ISO 3166的规定。如cn表示中国,us表示美国,uk表示英国
    • 通用顶级域名gTLD:最常见的通用顶级域名有七个,即:com(公司企业) 、net(网络服务机构)、org (非营利性组织)、int(国际组织)、edu(美国教育结构)、gov(美国政府部门) 、mil(美国军事部门)。
    • 反向域arpa:用于反向域名解析,即IP地址反向解析为域名。
  • 在国家顶级域名下注册的二级域名均由该国家自行确定。例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和co,而不用edu和com。

  • 我国则将二级域名划分为以下两类:

    • 类别域名:共七个: ac(科研机构)、com(工、商、金融等企业)、edu(教育机构)、gov(政府部门)、net(提供网络服务的机构)、mil(军事机构)和 org(非营利性组织)。
    • 行政区域名:共34个,适用于我国的各省、自治区、直辖市。例如: bj为北京市、sh为上海市、js为江苏省,等等。

域名服务器:

  • 域名和IP地址的映射关系必须保存在域名服务器中,供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。DNS使用分布在各地的域名服务器来实现域名到IP地址的转换。

  • 域名服务器可以划分为以下四种不同的类型:

    • 根域名服务器:根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有的顶级域名服务器的域名及其IP地址。因特网上共有13个不同IP地址的根域名服务器。尽管我们将这13个根域名服务器中的每一个都视为单个的服务器,但“每台服务器”实际上是由许多分布在世界各地的计算机构成的服务器群集。当本地域名服务器向根域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。这就加快了DNS的查询过程,同时也更合理地利用了因特网的资源。根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址
    • 顶级域名服务器:这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答(可能是最后的结果,也可能是下一级权限域名服务器的IP地址)。
    • 权限域名服务器:这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务嚣处注册登记。因此权限域名服务嚣知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下级域名服务器的地址。
    • 本地域名服务器:本地域名服务器不属于上述的域名服务器的等级结构。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器、本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中。每一个因特网服务提供者ISP,一个大学,甚至一个大学里的学院,都可以拥有一个本地域名服务器,它有时也称为默认域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离,也可能就在同一个局域网中。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。

域名解析的过程: 包含两种查询方式——递归查询、迭代查询

  • 递归查询
    image
  • 迭代查询
    image
  • 由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。

DNS高速缓存:

  • 为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
  • 由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)
  • 不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。

6.5 文件传送协议FTP

将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。

文件传送协议FTP (File Transfer Protocol)是因特网上使用得最广泛的文件传送协议:

  • FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
  • FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。

常见用途:

  • FTP的常见用途是在计算机之间传输文件,尤其是用于批量传输文件
  • FTP的另一个常见用途是,让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务

FTP的基本工作原理:

主动模式:

  1. FTP客户发起TCP连接,用于传送控制命令。控制连接在整个会话期间一直保持打开
  2. 有数据要传输时,FTP客户通过命令通道告知FTP服务器来与自己的另一个临时端口号建立TCP连接,建立数据通道。
  3. FTP服务器发起TCP连接,用于传输数据。数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。
  4. 该模式下,建立数据通道时,FTP服务器主动连接FTP客户,因此被称为主动模式
  5. image

被动模式:

  1. FTP客户发起TCP连接,用于传送控制命令。控制连接在整个会话期间一直保持打开
  2. 有数据要传输时,FTP客户通过命令通道告知FTP服务器开启某个临时端口被动等待TCP连接,建立数据通道。
  3. FTP客户发起TCP连接,用于传输数据。数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。
  4. 该模式下,建立数据通道时,FTP服务器被动等待FTP客户的连接,因此被称为被动模式
  5. image

FTP使用端口的情况:

  • 默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。
  • 但是,是否使用TCP20端口建立数据连接与传输模式有关,主动方式使用TCP 20端口被动方式由服务器和客户端自行协商决定。

6.6 电子邮件

电子邮件(E-mail)是因特网上最早流行的一种应用,并且仍然是当今因特网上最重要、最实用的应用之一

传统的电话通信属于实时通信,存在以下两个缺点

  • 电话通信的主叫和被叫双方必须同时在场
  • 一些不是十分紧迫的电话也常常不必要地打断人们的工作或休息。

电子邮件与邮政系统的寄信相似:

  • 发件人将邮件发送到自己使用的邮件服务器
  • 发件人的邮件服务器将收到的邮件按其目的地址转发到收件人邮件服务器中的收件人邮箱
  • 收件人在方便的时候访问收件人邮件服务器中自己的邮箱,获取收到的电子邮件。

电子邮件使用方便、传递迅速而且费用低廉。它不仅可以传送文字信息,而且还可附上声音和图像。

电子邮件:

  • 电子邮件系统采用客户/服务器方式

  • 电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议

    • 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件
    • 邮件服务器是电子邮件系统的基础设施。因特网上所有的ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱
    • 协议包括邮件发送协议(例如SMTP)和邮件读取协议(例如POP3)
  • image

简单邮件传送协议SMTP(Simple Mail Transfer Protocol)的基本工作原理:

  • 发送方邮件服务器周期性对邮件缓存进行扫描(例如30分钟),如发现有邮件,则建立TCP连接(常见端口25),使用SMTP命令(14种)向接收方邮件服务器发送邮件,而接收方服务器则使用SMTP命令(21种)进行应答。
  • image

电子邮件的信息格式:

  • 电子邮件的信息格式并不是由SMTP定义的,而是在RFC 822中单独定义的。这个RFC文档已在2008年更新为RFC 5322。
  • 一个电子邮件有信封内容两部分。而内容又由首部主体两部分构成。
  • 信封:用户不需要填写,由邮件系统自动从首部中提取所需信息并写在信封上
  • 首部:“关键字: 内容”
    image

SMTP协议的缺点和MIME:

  • SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象。

  • SMTP不能满足传送多媒体邮件(例如带有图片、音频或视频数据)的需要。并且许多其他非英语国家的文字(例如中文、俄文、甚至带有重音符号的法文或德文)也无法用SMTP传送。

  • 为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME(Multipurpose Internet Mail Extensions)。

    • 增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。
    • 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化
    • 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
  • image

  • 实际上,MIME不仅仅用于SMTP,也用于后来的同样面向ASCIl字符的HTTP。

常用的邮件读取协议:

  • 邮局协议POP(Post Office Protocol),POP3是其第三个版本,是因特网正式标准。

    • 非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹,对邮件进行分类管理等)
  • 因特网邮件访问协议IMAP(Internet Message Access Protocol),IMAP4是其第四个版本,目前还只是因特网建议标准。

    • 非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹,对邮件进行分类管理等)
  • POP3 和 IMAP4都采用基于TCP连接的客户/服务器方式

  • POP3 使用熟知端口110,IMAP4 使用熟知端口143。

基于万维网的电子邮件:

  • 通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。
  • 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理

6.7 万维网WWW

万维网WWW(Worid Wide Web)是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用

浏览器最重要的部分是渲染引擎,也就是浏览器内核。负责对网页内容进行解析和显示。

1.HTTP

万维网的文档:

  • 超文本标记语言HTML(HyperText Markup Language):使用多种“标签”来描述网页的结构和内容
  • 层叠样式表CSS(Cascading Style Sheets):从审美的角度来描述网页的样式
  • JavaScript:一种脚本语言(和Java没有任何关系)。控制网页的行为
  • 为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置。
  • URL的一般形式由以下四个部分组成:
    image

超文本传输协议HTTP(HyperText Transfer Protocol):

  • HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。

  • HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。

    • 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间。
    • 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。
    • image
  • HTTP/1.1采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。

    • 为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。

2.HTTP的报文

HTTP的报文格式:

  • HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。
  • 请求报文:
    image
    image
    image
  • 响应报文:
    image
    image

3.Cookie

Cookie:

  • 早期的万维网应用非常简单,仅仅是用户查看存放在不同服务器上的各种静态的文档。因此HTTP被设计为一种无状态的协议。这样可以简化服务器的设计。
  • 现在,用户可以通过万维网实现各种复杂的应用,如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户。
  • Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术

Cookie的工作流程:

image

4.万维网缓存与代理服务器

  • 在万维网中还可以使用缓存机制提高万维网的效率
  • 万维网缓存又称为Web缓存(Web Cache),可位于客户机,也可位于中间系统上,位于中间系统上的Web缓存又称为代理服务器(Proxy Server) 。
  • Web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源
  • image

七、套接字编程

【中科大郑老师《计算机网络》TCP套接字编程】

7.1 TCP套接字编程

数据结构 sockaddr_in: 用来放IP放端口,表示两个进程进行通信时的一个端进程

struct sockaddr_in {
	short sin_family;	//地址簇
	u_short sin_port;	//port
	struct in_addr sin_addr;	//IP地址
	char sin_zero[8];	//用于地址对齐
}

数据结构 host_ent: 域名->IP地址

struct host_ent {
	char *host_name;	//主机域名
	char **h_aliases;	//主机的一系列别名
	int h_addrtype;
	int h_length;	//地址长度
	char **h_addr_list;	//IP地址列表
	#define h_addr h_addr_list[0];
}

Server(1.1.1.1:80) Client(2.2.2.2:777)
1.创建WelcomeSocket=socket(),返回的是一个整数sad
2.调用bind(WelcomeSocket, &sad),将socket与本地的IP和端口号绑定
3.ConnectionSocket = accept(WelcomeSocket),阻塞,等待来自于客户端的连接请求
4.创建ClientSocket=socket(),返回的是一个整数cad
5.bind(ClientSocket, &cad),将socket与本地的IP和端口号绑定
6.调用Connect(ClientSocket, &sad),指明Server的IP和端口
7.发送TCP连接建立请求
8.解除阻塞,给ConnectionSocket返回一个新的socket值,并给出应答
9.连接建立

10.调用write(ClientSocket, msg),发送消息
11.调用read(ConnectionSocket),接收消息
12.调用write(ConnectionSocket, msg),发送消息
13.调用read(ClientSocket),接收消息

14.关闭连接Close(ClientSocket)
15.返回步骤3,继续阻塞,等待连接请求

7.2 UDP套接字编程

Server(1.1.1.1:80) Client(2.2.2.2:777)
1.创建ServerSocket=socket(),返回值是一个整数sad
2.调用bind(ServerSocket, &sad),将socket与本地的IP和端口号绑定
3.recvfrom(ServerSocket , msg, &cad),阻塞,等待接收消息
4.ClientSocket=socket(),返回值是一个整数cad
5.bind(ClientSocket, ),将socket与本地的IP和端口号绑定
6.Sendto(ClientSocket, msg, &sad)
7.Sendto(ServerSocket, msg, &cad)
8.read
9.close

八、复习用

计算题巩固:

【【计算机网络】子网划分题型总结】

【图-最短路径-Dijkstra(迪杰斯特拉)算法】

【计算机网络网络层“距离向量算法”】

【[中英字幕×精译搬运] 错误检测与纠正1 网络校验和 Internet Checksum】

串讲:

【【网络】半小时看懂<计算机网络>】

【中科大郑烇老师《计算机网络》总复习】

【计算机网络】期末考试复习简答题最全整理:题目+答案_交换机考试简答题-CSDN博客

posted @   Baizzzzzz  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示