本文记录了计算机网络的有关知识. 包括计算机网络的各层次主要内容,TCP/IP协议的主要内容等.

目录

概述

计算机网络

计算机网络是把分布在不同地点, 并具有独立功能的多个计算机系统通过通信设备和线路连接起来, 在功能完善的网络软件和协议的管理下, 以实现网络中资源共享为目标的系统.

计算机网络是由若干节点和连接这些节点的链路组成的网络
其中节点可以是计算机, 集线器, 交换机或路由器

互联网

  • 不同的网络通过 路由器 组成更大的网络
  • 计算机网络将许多计算机连接起来,而互联网将许多网络通过路由器连接起来
  • 与网络相连的计算机称为主机(host)

互联网三个发展阶段

  1. 单个网络ARPANET向互联网发展
  2. 三级网络互联网
    • 分为主干网,地区网和校园网(或企业网)
  3. 多层次ISP结构的互联网

internet与Internet

  • internet泛指由计算机网络连接而成的计算机网络
  • Internet特指当前的因特网

互联网交换节点(Internet eXchange Point, IXP)

  • 为了减少主干网流量,更快的转发分组而建立
  • 使两个网络(例如地区ISP)直接相连而不需要经过第三个网络(例如主干ISP)来转发

互联网的组成

  1. 边缘部分
    • 所有连接在互联网上的主机构成
    • 是用户直接使用的部分
    • 用来进行通信和资源共享
  2. 核心部分
    • 由大量网络和连接这些网络的路由器组成
    • 为边缘部分提供服务

端系统

端系统(end system)是处在互联网边缘的所有主机, 端系统在功能上可能有很大的差别

端系统通讯方式

  1. 客户-服务器方式
    • 描述进程间服务和被服务的关系
    • 客户是服务请求方,服务器是服务提供方
  2. 对等连接方式(P2P)
    • 两台主机在通讯时处于对等地位,不区分哪一个是服务请求方,哪一个是服务提供方

“主机 A 和主机 B 进行通信” 实际上是指:”运行在主机 A 上的某个程序和运行在主机 B 上的另一个程序进行通信”

数据交换方式

  1. 电路交换
    • 在两个通讯端之间建立一条专用的物理通路
    • 必须经过建立连接->通话->释放资源的过程
    • 在通话的全部时间内,通话的两个用户始终占用端到端的通讯资源
  2. 分组交换
    • 采用存储转发技术
    • 一个报文(message)被划分为几个分组以后再进行传送
    • 每个数据段加上一些必要的首部(header)后,构成一个分组(packet)
  3. 报文交换
    • 起源于电报时代,操作员按照报文为单位进行数据发送
    • 整个报文完整的发送到下一个节点

三种方式的比较

  • 若要连续传送大量的数据, 且其传送时间远大于连接建立时间, 则电路交换的传输速率较快.
  • 报文交换和分组交换不需要预先分配传输带宽, 在传送突发数据时可提高整个网络的信道利用率.
  • 由于一个分组的长度往往远小于整个报文的长度, 因此分组交换比报文交换的时延小, 同时也具有更好的灵活性.

计算机网络性能指标

  1. 速率
    • 单位是比特每秒(bit per second,bps)
  2. 带宽
    • 原本指信号具有的频率带宽,单位制赫兹
    • 在计算机网络中指某通道传送数据的能力,单位与速率相同,为bps
  3. 吞吐量
    • 单位时间通过某个网络的实际数据量
    • 吞吐量受带宽或额定速率的限制
  4. 时延
    • 数据从网络的一端传送到另一端所需的时间
    • 发送时延: 主机或路由器发送数据帧所需要的时间,即从发送第一个bit到最后一个bit用的时间
    • 传播时延: 电磁波在信道中传播一定距离的时间 (信道长度/电磁波在信道上传播的速率)
    • 处理时延: 主机或路由器收到分组进行数据提取,差错检验或查找路由的时间
    • 排队延时: 分组在进入路由器后在输入队列等待的时间
    • 总延时 = 发送延时 + 传播延时 + 处理延时 + 排队延时
  5. 时延带宽积
    • 时延带宽积 = 传播时延 X 带宽
    • 表示信号的容量,相当于在第一个bit到达目的地时,发送端发送的在链路上的数据量
    • 也称以比特为单位的链路长度
  6. 往返时间(Round-Trip Time,RTT)
    • 一次双向交互需要的时间
    • A发送完毕后开始计时,B收到后立即发送确认信息,到A收到返回信息后截至计时
  7. 利用率
    • 信道被利用时间与总时间的比例
    • 根据排队了,利用率提高会导致时延增加
    • 利用率U,空闲网络时延D0,当前网络时延D满足 \(D=\frac{D_0}{1-U}\)

奈氏准则与香农定理

  • 每赫带宽的理想低通信道的最高码元传输速率是每秒2个码元
  • 在任何信道中, 码元传输的速率是有上限的, 否则就会出现码间串扰的问题, 使接收端对码元的判决(即识别)成为不可能
  • 信道的带宽或信道中的信噪比越大, 则信息的极限传输速率就越高
  • 只要信息传输速率低于信道的极限信息传输速率, 就一定可以找到某种办法来实现无差错的传输

网络协议(network protocol)

网络协议也成协议,一般包含以下三个要素

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

协议的分层

  • 层次
    • 每个层次解决不同问题
    • 下层为上层提供服务
    • 上层屏蔽下层的服务实现细节
  • 协议
    • 下面的协议对上面的服务用户是透明的.
  • 接口
    • 层间的信息传送的规约
    • 增加灵活性

三种体系结构比较

7 应用层应用层5 应用层
6 表示层
5 会话层
4 运输层运输层4 运输层
3 网络层网络层3 网络层
2 数据链路层网络接口层2 数据链路层
1 物理层1 物理层
ISO体系结构TCP/IP体系结构五层体系结构

物理层

物理层特性

  • 机械特性: 接线器形状与尺寸等
  • 电气特性: 各线路电压范围
  • 功能特性: 各线路电压含义
  • 过程特性: 不同功能涉及的顺序

通信交互的三种方法

  1. 单向通信 :
    • 通信双方只有一方向另一个方法发送信息
    • 只使用一个信道
    • 例如 广播
  2. 双向交替通信
    • 通信双方都能发送信息,但不能同时发或者同时收
    • 占用两个信道
    • 例如 对讲机
  3. 双向同时通信
    • 通信双方都能同时发送或者接受信息
    • 占用两个信道
    • 例如 电话

信号与传输

  1. 基带信号
    • 由计算机或终端产生的数字信号. 由于计算机输出的信号中通常包含较多的低频信号, 因此往往不适合信道的传输
  2. 基带传输
    • 把数字信号转换为另外一种数字信号的过程,也成为编码. 基带传输适合近距离,有线传输
  3. 带通信号
    • 基带信号经过载波调制后的模拟信号
  4. 带通传输
    • 把基带信号载波调制成为模拟信号,再送到信道传输. 适合远距离,无线传输

数据传输率

  1. 比特率
    • 单位时间传输的比特数
  2. 波特率
    • 单位时间传输的码元数
  3. 关系
    • 比特率=波特率×码元信息量

奈奎斯特准则

在假定的理想条件下, 为了避免码间串扰, 码元的传输速率的上限值 = 2W Baud. 即最大传输速率等于传输带宽的两倍.

香农公式

信道的极限信息传输速率\( C=W \log_{2}( 1 + \frac{S}{N} ) \) b/s. 其中W为信号带宽, S/N为信噪比.

信道复用技术

  1. 频分复用(Frequency Division Multiplexing, FDM)
    • 用户在分配到一定的频带后, 在通信过程中自始至终都占用这个频带
    • 频分复用的所有用户在同样的时间占用不同的带宽资源
  2. 时分复用(Time Division Multiplexing, TDM)
    • 时分复用则是将时间划分为一段段等长的时分复用帧(TDM 帧)
    • 每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙
    • 每一个用户所占用的时隙是周期性地出现(其周期就是 TDM 帧的长度)
  3. 统计时分复用(Statistic TDM, STDM)
    • 通过统计各个数据的实际到来情况,从而更紧凑的发出数据
  4. 波分复用(Wavelength Division Multiplexing, WDM)
    • 实际就是光的频分复用
  5. 码分复用(Code Division Multiple Access, CDMA)
    • 通过正交向量点乘为零实现多用户同时数据通信

数据链路层

数据链路层的两种信道类型

  1. 点对点协议: 使用一对一的点对点通信方式
  2. 广播协议: 使用一对多的广播通信方式

点对点信道的数据链路层

数据链路层的三个基本问题

在数据链路层协议中有三个基本问题, 后续的各种协议都是围绕以下这三个问题展开

  1. 封装成帧
    • 如何将从上层收到的数据进行封装,组成基本的传输结构
  2. 透明传输
    • 在传输过程中可能用到了特殊的符号, 如何进行控制使得用户的数据不需要对特殊符号进行处理
  3. 差错检测
    • 传输过程中可能存在错误, 如何进行检测

数据链路和帧

  • 链路(link)是指一个节点到另外一个节点的物理线路,在两者之间没有其他交换节点. 通常一次通信需要经过多个这样的链路
  • 数据链路(data link)是指因为通信的需要而使用的一系列硬件和软件的整体.
  • 数据链路传输的基本数据单元称为

透明传输

  • 使用控制字符SOH(Start Of Head)和EOT(End of Tail)作为开始和结束的表示
  • 传输的内容中出现相同编码的字节时,插入一个ESC字符

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

给定一个k bit的数据, 可提供一个n bit的冗余码, 组成k+n位数据进行发送,从而接收端能对数据进行检验. 例如设数据M = 101001, 则k=6, 此时可取n=3. 按照以下步骤进行计算和校验

计算过程
  1. 在M后添加n个零,即变成M’ = 101001000
  2. 产生一个双方事先约定的数据P = 1101. (P要求是一个n+1 bit数据)
  3. 使用模2运算计算 M’ / P , 得余数为001
  4. 将获得的余数加添到M的末尾,组成k+n bit数据,即M’’ = 10100001
检验过程
  1. 接收端将收到的数据N使用模2运算计算 N / P
  2. 如果余数为0,说明数据正确
说明

模2运算实际上就是异或, 在进行除法运算时,只要最高位与P相同,商就可以上1.

对于除数P, 有几种常见的选择,例如CRC-16, CRC-CCITT,CRC-32等, 具体形式可以查阅其他相关资料. 数学上可以证明, 如果数据传输过程中发生改变, 进行校验后除数仍为零是一个非常小的小概率事件.

通过使用CRC等技术, 可以对数据进行校验,从而实现了数据链路过程中的差错检验, 不过数据链路层通常不负责数据错误数据重传, 如果发现错误, 通常仅仅直接将数据丢弃.

点对点协议(Point-to Point Protocol, PPP)

PPP协议满足特点

  1. 简单
    • 数据链路层上不需要提供比IP协议更多的功能, 因此不进行纠错, 不负责流量控制等
  2. 封装成帧
  3. 透明性
  4. 多种网络协议
    • PPP能够在同一物理链路上支持多种网络层协议(例如IP和IPX)
  5. 多种链路类型
    • 除了要支持多种网络协议外, PPP协议必须能够在多个类型的链路上运行(例如并行链路和串行链路)
  6. 错误检测
  7. 检测连接状态
    • 具有能够及时的(几分钟内)检测链路是否正常的机制
  8. 最大传输单元
    • 规定了数据部分的默认最大长度MTU(默认为1500字节)
    • 接受过程中超过了最大长度的帧会被丢弃
  9. 网络层地址协商
    • 能够使网络层协议知道彼此的网络层地址
  10. 数据压缩协商
    • 提供协商压缩算法的方法

PPP帧格式

PPP帧格式

  1. 帧首尾的F字段是开始和结束的标记, 都指定为0x7E
  2. 帧头部的A字段和C字段长度均为1字节, 没有定义, 通常设置为0xFF和0x03
  3. 帧头部的协议字段,为0x0021时为IP数据报,为0xC021为LCP协议
  4. 后续为信息部分,可变长,不超过1500字节
  5. 尾部FCS字段是使用CRC的帧检验序列

字节填充(异步传输)

  • 使用0x7D作为转移符号
  • 出现0x7E时,转换为0x7D 0x5E
  • 出现0x7D时,转换为0x7D 0x5D
  • 出现ASCII控制字符时, 也使用类似的方法加入转移字符

零比特填充(同步传输)

  • 发送过程中,一旦出现5个1,就立即插入一个0
  • 接受过程中,一旦读取到5个1,下一个比特如果是0,就删除这个0并继续解码

广播信道的数据链路层

以太网

以太网是美国施乐公式的研究中心与1975年研制成功的. 当时以太网是一种基带总线局域网, 以无源电缆作为总线来传输数据帧, 并以历史上表示传播电磁波的以太(Ether)命名.

以太网的两个标准

  • DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约.
  • IEEE 802.3 是第一个 IEEE 的以太网标准.
  • DIX Ethernet V2 标准与 IEEE 的 802.3 标准只有很小的差别, 因此可以将 802.3 局域网简称为“以太网”.
  • 严格说来, “以太网” 应当是指符合 DIX Ethernet V2 标准的局域网

局域网数据链路分层

  • 可以分为逻辑链路控制(Logical Link Control,LLC)和媒体接入控制(Medium Access Control,MAC)
  • 由于DIX Ethernet V2的胜利,现在的很多配置器只有MAC协议

适配器与MAC地址

  • 配适器处理计算机与网络之间交换的数据
  • 对数据进行串并转换,速率适配等操作

CSMA/CD协议

载波监听多点介入/碰撞检测(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)协议是总线结构的以太网常用的协调方法.

多点接入是指这是总线型网络, 有许多计算机接入. 载波监听是指利用电子技术,在数据发送前和发送中对数据信道进行监听. 发送数据前如果发现其他节点正在发送,就暂时等待. 发送数据过程中, 检测到其他节点也在发送,即发送碰撞,就进行相应的处理.

传播时延

假定在线路上有A,B两个节点且相距1km, 由于电磁波传输1km大约需要5μs, 因此如果某时段信道为空,A检测到后发送信息,则信息需要5μs后才到达B节点, 若B在此时间段内发送信息,则会导致碰撞. 而从B发送信息开始的5μs后,A才能检测到发送碰撞, 因此在线路上,至多只需要10μs,任意一个节点都能检测到碰撞. 通常,将A到B的传播时延记为τ. 将2τ称为争用期

截断二进制指数退避算法

协议规定,基本退避时间为争用期2τ, 具体值为51.2μs. 对于10Mbps的网络,相当于发送512个bit的时间, 因此也说争用期是512比特时间.

从离散的整数集合[0,1,2,3,4,…,(2^k-1)]中随机取出一个数r,重传推迟时间为r倍的争用期. 并且k按照以下规律获得

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

即当重传次数小于10次时,k等于重传次数,重传次数大于10时,k始终为10. 且当重传次数为16时仍然不能成功,则丢弃该帧并向高层反馈.

一些限制

  1. 发送数据最小长度必须大于64字节,即512bit,否则数据发送完毕后发生的冲突无法被发现
  2. 从开始发送数据的一个争用期内没有发送冲突,则后续也不会发生冲突
  3. 由于发送过程需要监听信道,因此只能以半双工方式工作
  4. 由于争用期为51.2μs,因此以太网理论上最大长度约为5km
  5. 发送节点检测到碰撞以后,立即停止发送数据并发送32bit或48bit的人为干扰信息以强化碰撞
  6. 帧与帧之间最小间隔96bit时间,即任何时刻必须监听到96bit以上空闲时间才能发送数据

发送过程

  1. 收到数据后封装成帧
  2. 等待信道空闲96bit时间
  3. 发送数据,一边发送一边等待,有两种情况
    1. 如果开始发送后的一个争用期内没有检测到冲突,则此帧必定可以发送成功
    2. 如果在争用期内检测到冲突,则执行指数退避算法

MAC协议

MAC地址

  • MAC地址是一种全球唯一的48bit的固化在适配器ROM中的地址
  • 前3字节需要购买,后3字节厂家自行分配

MAC帧格式

MAC帧格式

  • 前8字节为同步码和帧开始符,后面紧跟MAC帧
  • 数据部分长度为46~1500字节,以保证整个MAC帧至少有64字节
  • 帧中不包含尾部,信道为空则说明到达尾部
  • 同步模式时不需要同步码

扩展以太网

在物理层扩展

由于铜线衰减速度很快, 因此可以使用光纤代替铜线,将主机距离扩展. 使用集线器可以将多台主机连接,组成一个看似星型实际为总线型的网络, 且集线器还可以连接集线器, 从而将多个网络连接到一起. 但由于所有设备竞争一个总线, 因此网络传输效率有所下降.

在数据链路层扩展

在数据链路层,可以使用以太网交换机对以太网进行扩展,以太网交换机具有以下特点

  1. 相互通信的主机都是独占传输媒体,无碰撞的传输数据
  2. 内部使用交换表,通过自学习算法建立

使用交换机的以太网就不再是总线结构, 因此也不存在共享总线的问题, 也不使用CSMA/CD算法, 但由于此网络依旧使用以太网帧,因此还是称为以太网

虚拟局域网

通过以太网交换机有条件的转发分组, 虚拟局域网技术可以将不同位置的主机模拟成处于同一局域网的状态. 使用该技术可以减少广播风暴的影响.

网络层

网络层与电信网络提供的虚电路不同, 网络层向上只提供简单灵活的, 无连接的, 尽量努力交付的 数据报服务. 网络层 不提供服务质量的承诺.

网络层协议

网络层最重要的协议是IP协议, 除此以外, 还有三个协议与IP协议配套使用

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

由于历史的进程, 实际上网络最初并没有统一的通信标准, 因此各种网络之间是无法直接通信的, IP协议的出现使得不同的网络之间可以使用同样的协议进行通信, 从而将不同的网络连接起来,组成更大网络, 即虚拟IP网络或互联网.

常见中间网络设备和工作的网络层次

网络层次 中间设备
物理层 转发器(repeater)
数据链路层 网桥/桥接器(bridge)
网络层 路由器(router)
网络层以上 网关(gateway)

当中间设备是转发器或者网桥时, 则仅仅是把一个网络扩大, 网络的角度看, 这仍然是一个网络. 而网关用于连接两个不兼容的系统并在高层进行协议转换, 现在已经很少使用. 因此对网络进行互连时, 主要时通过路由器进行连接.

IP地址及其表示方法

IP地址是一个32位的标识符,通常可以按照字节写成4个使用.划分的十进制数,例如127.0.0.1. 一个IP地址可以分成 网络号主机号, 不同类型的IP地址具有不同长度的网络号和主机号, IP地址可以划分为5大类

  1. A类, 网络号占1字节且以0开始, 主机号占3字节
  2. B类, 网络号占2字节且以10开始,主机号占2字节
  3. C类, 网络号占3字节且以110开始,主机号占1字节
  4. D类, 多播地址, 以1110开始
  5. E类, 保留地址, 以1111开始

各类型网络对比

网络类型 最大网络数 第一个可指派网络号 最后一个可指派网络号 每个网络最大主机数
A 126(\(2^{7}-2\)) 1 126 16777214
B 16383(\(2^{14}-1\)) 128.1 191.255 65534
C 2097151(\(2^{21}-1\)) 192.0.1 223.255.255 254

注意

  1. A类网络中,0表示本网络,127表示回环测试,从而不能使用
  2. B类中128.0被保留
  3. C类中192.0.0被保留
  4. 主机号全0表示本主机连接的网络地址,全1表示本网络所有主机,从而不能使用

特殊地址规则

网络号 主机号 源地址使用 目标地址使用 含义
0 0 Y N 本网络上的本主机
0 host-id Y N 本网络的某台主机host-id
全 1 全1 N Y 对本网络广播
net-id 全1 N Y 对net-id上的所有主机广播
127 非全0或全1 Y Y 回环测试

IP网络的特点

  1. 每一个IP由网络号和主机号组成, 从而便于分配和管理
  2. 路由器只需要根据 网络号进行转发而不需要考虑主机号,从而极大减少路由表的大小和查找时间
  3. IP地址本质上是表示一个接口,一个主机(或路由器)可以连接多个网络从而获得不同的IP地址, 这种主机称为多归属主机

IP地址和MAC地址的一些特点

IP地址与MAC地址的关系

IP地址与MAC地址的关系如上图所示,

  1. IP层抽象的互联网只能看到IP数据报
  2. 中间过程的路由器IP地址不体现在IP数据报中
  3. 路由器仅仅根据目标IP地址的网络号进行路由选择
  4. 在局域网的数据链路层,只能看到MAC帧,每一步都更换MAC地址
  5. 由于IP层屏蔽了不同网络的下层细节,因此不同网络能使用统一的方式通信

地址解析协议ARP

在网络中传输数据时,网络层使用IP地址,而数据链路层需要使用MAC地址,因此需要有协议能将IP地址转换为MAC地址, ARP协议完成这个工作.每台主机设有一个ARP高速缓存, 保存了本局域网中各主机和路由器的IP地址与MAC地址映射关系.主机A与主机B通信,如果可以直接由IP地址查询到B的MAC地址,则直接发送信息,否则广播ARP分组请求.

ARP分组请求

  • ARP分组的请求的格式类似”我的IP是209.0.0.5 MAC地址是00-00-C0-15-AD-18, 我想知道IP地址位209.0.0.6的主机的MAC地址”
  • 局域网中只有B的IP地址与分组请求的地址一致,因此B则收下该分组并向A发送ARP分组相应
  • ARP响应的格式类似”我的IP地址是209.0.0.6 MAC地址是08-00-2B-00-EE-0A”
  • ARP分组请求是广播的,而响应是单播的
  • 考虑到A与B发送消息后,B可能还要与A发送消息,因此ARP分组中包含A的MAC地址,B可以保存下来以便于后续使用
  • ARP高速缓存中的条码都存在生存时间, 时间到达后会被自动删除

跨网络通信

ARP请求是为了解决 同一局域网上 主机 或 路由器IP地址和MAC地址映射关系的问题. 当请求的IP地址不再同一网络时, 通过ARP协议是无法获得MAC地址的(实际也不需要获得). 此时数据直接转发给路由器, 由路由器决定后续的转发路径

IP数据报格式

IP数据报

版本

  • 表示IP协议版本, 当前使用的版本号为4或者6

首部长度

  • 以4字节为一个单位,表示首部长度的的单位数
  • 通常首部占20个字节, 因此首部长度值一般为5

区分服务

  • 该字段通常不使用

总长度

  • 包括首部和数据在内的整个数据报的长度
  • 该字段占16bit,单位为字节, 因此IP数据包最大为65535字节
  • 由于底层的数据链路层协议都规定了最大传输长度, 因此IP协议虽然支持65535字节,但往往不能传输如此大的数据报
  • 如果数据报长度超过限制, 一般进行分片处理

标识

  • IP软件内部维持一个计数器, 同一批的数据具有同样的标识值
  • 从而一个分片的数据报能够依据标识值进行恢复

标志

  • 占3bit,但目前只有低2bit有意义
  • 最低位是MF(More Fragment), MF=1表示后续还有分片, MF=0表示这是最后一个数据报片
  • 中间位是DF(Don’t Fragment), DF=0时才允许分片
  • 注意分片时,最后一个分片的值是 MF=0, DF=0

片偏移

  • 占13bit, 以8字节位一个单位,表示此分片的数据在原始数据中的偏移单位数
  • 以8字节为单位,相当于左移3位,从而扩展到16bit, 能够表示接近65535的偏移
  • 分片时, 数据偏移需要按照8的倍数分割,从而起始位置能被正确的表示

生存时间

  • 每经过一个节点, 生存时间减一
  • 生存时间为零时, 数据报被丢弃

协议

  • 表述此数据报携带的数据使用的协议,从而上层能使用正确的方式进行处理
  • 常见协议字段值如下所示
协议名 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP OSPF
字段值 1 2 4 6 8 9 17 41 50 89

首部检验和

  • 使用二进制反码求和对数据报首部进行计算
  • 计算时将校验和字段设置为0,计算所有字段的反码二进制和, 取反后写入校验和字段
  • 校验时将所有字段再次计算反码二进制和后求反码, 结果为0则数据正常,否则丢弃该数据包

IP数据报首部可变部分

  • 该部分没有规定,可以自行扩展
  • 由于当前的很多路由器并不考虑可变部分, 因此在后续的协议(例如IPv6)中取消了可变部分

IP层转发过程

路由器的路由表中只包含了目的网络地址(网络号)和下一跳地址(主机或者其他路由器IP地址). 有以下三种情况

  1. 目标主机在当前网络,则路由器直接交付
  2. 目的主机在其他网络,且所在网络号在路由表中有记录, 则路由器转发给相应的下一跳地址
  3. 目的主机所在网络没有记录,则路由器转发给默认路由, 如果没有默认路由,则报告转发分组错误

虽然任意一个路由器都不包含完整的路径信息, 但是通过一步步的查询最终也能找到目标主机

划分子网

  • 从主机号借用若干位构成子网号,从而使IP地址变成由 网络号, 子网号, 主机号 构成
  • 划分子网后, 内部分成若干网络, 对外仍然表现为一个网络
  • 路由器收到数据后,如果在当前网络,则直接交付,否则根据子网号交付给相应的子网

子网掩码

  • 由于子网长度可以任意设置, 因此需要设置一个子网掩码来表明网络号+子网号的长度
  • 将数据包中的网络号和掩码进行&运算即可得到目标主机的网络号+子网号

注意: 按照规定, 对于n位的子网号, 全0和全1不能使用, 因此划分后只有 \( 2^{n} - 2\) 个子网, 总可用IP数进一步减少了.

子网转发过程

  1. 从收到的数据提取目的IP地址D
  2. 判断是否位于同一网络(使用掩码运算),是则直接交付,否则执行下一步
  3. 判断是否又特定路由,是则发送给特定路由,否则执行下一步
  4. 对比路由表中每一行, 通过掩码计算后比较是否是同一网络, 发现匹配项目后发送给对应的端口
  5. 没有匹配条目则发送给默认路由或报错

构造超网

CIDR(Classless Inter-Domain Routing), 即无分类域间路由选择, 该技术消除了传统的A,B,C类地址以及划分子网的概念, 从而能更有效的利用IPv4地址.

CIDR将IP地址划分为网络前缀和主机号两个部分,并且使用斜线记法来表示网络前缀的长度,例如

128.14.35.7/20 => 10000000 00001110 00110011 00000111

即使用20位表示网络前缀,剩余的12为表示主机号. CIDR使用与子网掩码同样的技术来指示网络前缀.

注意:

  1. 在使用此模式表示IP地址时, 一定要写斜线后面的数字, 否则是没有意义的
  2. 不使用主机号为全0或者全1的IP地址

最长前缀匹配

由于CIDR的分配方式, 在一个大的网络中, 可以进一步的分配成多个子网, 因此在路由表中可能或有多个条目与指定的IP匹配. 此时按照最长前缀原则匹配, 即尽可能到更具体的网络位置. 查询过程可以使用二叉树等技术.

网际控制报文协议ICMP

网络层使用网际控制报文协议(Internet Control Message Protocol, ICMP)来保证更加有效的转发IP数据报. ICMP允许主机或路由器报告差错情况和提供有关异常的报告. ICMP作为数据部分封装在IP数据报中.

类型

ICMP分成两大类, 一类是差错报告报文, 另一类是询问报文. 其中差错报告报文包括

  1. 终点不可达
  2. 时间超时
  3. 参数问题
  4. 改变路由

询问报文包括

  1. 回送请求或回答
  2. 时间戳请求或回答

ICMP的格式

ICMP格式

  • ICMP的前4字节结构是相同的,分别表示类型,代码和校验和
  • 之后的4个字节内容取决于不同的协议
  • ICMP的数据部分都是相同的, 将收到需要进行差错报告的IP数据报的首部以及数据部分的前8个字节作为ICMP的数据部分
  • 由于IP数据报的数据部分前8字节包含运输层协议的端口内容, 因此加上此内容有助于通知高层协议.

ICMP应用

ICMP协议最常见的应用是分组网间探测(Packet InterNet Groper, PING). 在Windows上和Linux上都是使用ping指令来执行此应用. 此外还可以使用traceroute(UNIX)或tracert(Windows)指令来执行路由追踪, 了解一个数据包从本地主机到目标主机的路由路径.

例如以下是从本地到知乎服务器的路由路径, 可以看到数据包在本地局域网中经过若干步跳转后进入本地ISP网络, 最后达到位于北京的腾讯云服务器.

到知乎的路由

互联网路由选择协议

互联网规模非常大, 让每一个路由器知道所有的网络如何到达时不现实的,而且很多企业不愿意暴露自己网络的布局和细节. 因此可以把互联网划分成许多较小的自治系统(Autonomous System,AS). 自治系统内部使用单一的技术一致的路由选择策略, 然后将不同的自治系统连接起来组成互联网.

这样, 互联网就涉及两种协议,即 内部网关协议(Interior Gateway Protocol,IGP)和外部网关协议(External Gateway Protocol, EGP). 由于历史的进程原因, 这里的网关实际上是指路由器, 但由于名称由来已久,因此依旧使用此名称.

内部网关协议

IGP协议有两个主要的协议, 即基于距离向量的路由选择协议(Routing Information Protocol)和开放最短路径优先(Open Shortest Path First, OSPF)

RIP协议的特点

  • 仅和相邻的路由器交换数据, 交换当前的全部路由表数据,按固定的时间间隔交换数据
  • 定义直接相连距离为1, 每通过一个路由器距离+1, 定义16为不可达
  • 坏消息传的慢(不可到信息可能被其他路由中未更新的错误信息覆盖)

RIP协议交换过程

  • 收到X的路由表后,对其中的所有条目进行修改,将所有的下一条地址都修改为X,对距离字段都+1
  • 对比修改后的路由表A和当前的路由表B的每一条记录I
    • 如果B中不包含I的网络,则将I加入B
    • 如果A和B都包含I的网络,且B中下一跳地址正好是X,则使用I更新B的条目
    • 如果A和B都包含I的网络,且下一跳地址不同,则I的路径更短时更新B的条目

OSPF协议特点

  • 和所有的路由器交换信息, 使用泛洪法
  • 交换本路由器和其他路由器的链接信息
  • 只有网络改变时才交换信息
  • 通过将一个自治域划分未为若干个区域,可以扩展OSPF网络规模

运输层

从通信和信息处理的角度看, 运输层向它上面的应用层提供通信服务, 它属于面向通信部分的最高层, 同时也是用户功能中的最底层. 网络层是为主机之间提供逻辑通信, 而运输层为应用程序之间提供端到端的通信.

运输层的一个重要功能是复用和分用. 根据应用程序的需求不同, 运输层有两种不同的运输协议, 即面向连接的TCP协议和无连接的UDP协议.

端口

建立端口是为了在不同的主机之间能够确定需要通信的进程,而不受到相关进程动态变化的影响. 0~1023为熟知端口1024~49151为登记端口, 49152~65535为短暂端口

UDP协议

  • 提供无连接服务
  • 在传输数据前不需要建立连接
  • 对方在收到UDP报文后不需要给出任何确认
  • 虽然UDP不提供可靠交付, 但在某些情况下是一种最有效的方式
  • UDP支持一对一,一对多,多对一和多对多通信

UDP格式

UDP格式

  1. 长度: 整个数据报的程度, 字节为单位, 至少为8
  2. 校验和:
    • 使用 二进制反码加法 计算包括伪首部在内的全部数据,计算结果最后取反写入校验和字段
    • 计算时,每16bit作为一个数字
    • 数据部分必须为偶数, 如果不足可以使用0补充
    • 检验时,直接对所有内容使用二进制反码求和,结果全1,则校验正确

TCP协议

  • 面向连接的服务, 提供可靠交付
  • 提供全双工通信
  • 面向字节流, TCP协议会根据各种因素自行决定数据块大小
  • 只提供点对点通信

停止等待协议

  • 每发送一个数据,都等待接收方的确认
  • 等待一段时间后没有收到确认,则自动重发数据
  • 这种协议通常称为自动重传协议(Automatic Repeat reQuest,ARQ)

TCP格式

TCP格式

  1. 源端口和目的端口
  2. 序号: 本报文发送的第一个字节在待发送的字节流中的序号
  3. 确认号: 期望收到对方的下一个报文的第一个字节的序号
  4. 数据偏移: TCP报文中数据部分在此报文中的起始位置,以4字节为单位,此字段最大值为15
  5. 保留: 此段应该置为零
  6. 控制位:
    1. 紧急URG, 为1时, 表示紧急指针有效,从而可发送紧急数据
    2. 确认ACK, 为1时, 确认号字段才有效,建立连接后的所有报文ACK都必须为1
    3. 推送PSH, 为1时, 表示不等缓冲区满就发送信息
    4. 复位RST, 为1时, 表示出现严重错误, 必须释放连接
    5. 同步SYN, 当SYN=1,ACK=0时,表示一个请求报文,SYN=1,ACK=1表示接收请求
    6. 终止FIN, 为1时, 表示传输结束, 要求释放连接
  7. 窗口: 发送此报文方的接收窗口大小, 作为另一方决定发送窗口大小的依据
  8. 检验和: 校验包括伪首部在内的全部内容,校验方法与UDP一致
  9. 紧急指针: 指示紧急数据的大小,从而能提取紧急数据和其他正常数据
  10. 选项: 长度可变,最多40字节

TCP的滑动窗口

TCP滑动窗口

  • 根据B的确认号和窗口值, 可以构建A的发送窗口
  • 发送窗口表示在没有收到B的确认信号前,A可以将窗口内的数据连续的发送出去
  • B根据接收缓冲区大小以及已经收到的数据决定窗口值大小
  • 通常不建议前沿收缩

超时重传的选择

对于超时重传时间的选择, TCP采取了一种自适应算法, 通过采集传输过程的往返时间动态的调整重传时间

加权平均往返时间

第一次测量到 RTT 样本时, \(RTT_S\) 值就取为所测量到的 RTT 样本值. 以后每测量到一个新的 RTT 样本, 就按下式重新计算一次\(RTT_S\)

$$新的 RTT_S 值 = (1 - α) \times (旧的 RTT_S 值) + α \times (新的RTT样本)$$

其中α建议取值为0.125, 可以看到, 上述公式对应了时间序列中的指数平滑公式,相当于使用现有样本来预测以后的RTT值的变化.

加权平均往返值偏差

除了对往返时间进行估计以外, 还同时的对往返时间的偏差进行估计, 第一次测量时 \(RTT_D\) 取值为 \(RTT_S\) 值的一般,以后按照如下的公式计算

$$ 新的RTT_D 值 = (1- β) \times (旧的RTT_D值) + β \times |RTT_S - 新的RTT样本| $$

其中β建议取值为0.25.

超时重传时间

超时重传时间(Retransmission Time-Out, RTO)按照如下公式计算:

$$ RTO = RTT_S + 4 \times RTT_D $$

样本的选择

由于发生重传以后,无法知道对方发送的确认是对于以前的包的确认还是对重传包的确认, 因此使用Karn算法时, 不将重传的确认作为样本. 但如果线路发送变化, 导致延时突然增加, 产生了大量的重传, 则由于不采用这些数据, 导致算法无法调整.

修正的Karn算法在每次发生重传时, 将超时重传时间翻倍, 当不再发送超时重传以后, 再采用之前的公式计算重传时间. 实践证明, 此策略较为合理.

TCP流量控制

流量控制就是让发送方的发送速率不要太快, 使接受发来得及接收.

零窗口探测报文

  • 在一定的情况下,接受方可能将窗口值置为零, 使发送方停止发送
  • 若后续增加窗口值的报文丢失, 则会导致双方互相等待
  • 因此对于发送方, 窗口值被置为零后启动一个计数器, 到达设定时间后向接收方发送零窗口探测报文
  • 接受方即使窗口为零, 也必须接收和处理此报文, 从而双方能保证消息被相互传达, 解除死锁

拥塞控制算法

TCP的拥塞控制算法有四种, 即慢开始(slow-start), 拥塞避免(congestion avoidance), 快重传(fast retransmit)和快恢复(fast recovery)

1. 慢开始

发送方维持一个拥塞窗口cwin(congestion window)的变量, 此变量大小取决与网络的拥塞层度, 并且可以动态变化.

慢开始算法要求主机先使cwin取一个较小的值, 例如cwin等于1个发送方最大报文段长度(Sender Maximum Segment Size,SMSS). 以后每次收到一个报文段确认,则有

$$ d(cwin) = min(N,SMSS) $$

其中N为之前未被确认, 而现在被确认的字节数. 因此cwin每次最多可以增加一个SMSS大小. 通常以SMSS为单位讨论数据发送, 因此每轮收到全部的确认以后,cwin大小翻倍. 但实际上收到确认报文后, 会立即更新, 而不会按照轮次进行翻倍. 但最终表现都是cwin随时间指数增加.

2. 慢开始门限

为了防止cwin无限增大,导致网络最终拥塞,设置了一个门限值ssthresh, cwin到达门限值后采用拥塞避免算法

3. 拥塞避免算法

每轮使cwin增加一个SMSS大小, 由于实际的确认报文是逐一到达的, 因此每次到达后,可以设置

$$ d(cwin) = MSS \times (MSS / cwin) $$

例如当前cwin等于10个MSS, 则现在收到一个确认以后增加0.1个MSS, 从而一轮以后正好增加一个MSS.

当拥塞避免算法运行到产生超时重传时, 将门限值ssthresh置为当前cwin的一半. 并开始执行慢开始算法

4. 快重传

在通信过程中, 快重传算法要求接受发每次收到一个报文后,立即发送确认. 例如有某个报文段M2缺失, 后续收到M3,M4,M5时, 接受发都要发送确认收到M1.

当接受发收到3个重复的确认时, 就可以肯定M2确实没有被收到, 此时立即重传M2, 以免由于超时进入慢开始过程.

5. 快恢复

发生快重传以后,启动快恢复过程, 将门限值ssthresh置为当前cwin的一半, 并从ssthresh值开始执行拥塞避免算法

6. 控制过程图

拥塞控制过程

7. 发送窗口大小

实际的发送窗口大小等于接受方给出的窗口值和实际拥塞窗口值中的最小值

TCP的连接建立

TCP建立连接的过程叫握手, 握手需要在客户端和服务器之间交换三个TCP报文段. 使用三次报文主要是为了保证已经失效的请求不会被服务器端处理.

三报文握手的过程如下所示:

TCP的连接建立

注意: SYN报文始终消耗序号, 单纯的ACK报文如果不携带数据,则可以不消耗序号,即第三次报文后,A的下一个报文还可以使用x+1作为序号

TCP的链接释放

释放过程如下所示:

TCP的链接释放

  1. A主动结束程序, 发送FIN报文
  2. B对A的报文确认, 后续根据实际情况传输一些数据
  3. B数据传输完毕, 发送FIN+ACK报文
  4. A对B的报文进行确认, 并等待2MSL的时间(报文最大生存时间)

在等待过程中,若B没有收到A的确认报文, 超时后B会重传FIN+ACK报文, 从而A在2MSL的等待时间内可以重传ACK报文. 如果A在等待的时间内没有收到B的重传报文, 则可以认为B已经收到了确认报文, 从而可以关闭连接.

应用层

DNS服务

  • 一个服务器所负责管辖的(或有权限的)范围叫做区(zone)
  • 各单位根据具体情况来划分自己管辖范围的区. 但在一个区中的所有节点必须是能够连通的
  • 每一个区设置相应的权限域名服务器, 用来保存该区中的所有主机的域名到IP地址的映射
  • DNS 服务器的管辖范围不是以“域”为单位, 而是以“区”为单位
  • 主机向本地域名服务器的查询一般都是采用递归查询, 本地域名服务器向根域名服务器的查询通常是采用迭代查询

FTP协议

  • 文件传送协议 FTP 只提供文件传送的一些基本的服务, 它使用 TCP 可靠的运输服务
  • FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性
  • FTP 使用客户服务器方式. 一个 FTP 服务器进程可同时为多个客户进程提供服务
  • FTP 的服务器进程由两大部分组成
    • 一个主进程, 负责接受新的请求
    • 另外有若干个从属进程, 负责处理单个请求
  • 控制连接在整个会话期间一直保持打开, FTP 客户发出的传送请求通过控制连接发送给服务器端的控制进程, 但控制连接不用来传送文件
  • 实际用于传输文件的是“数据连接”. 服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”, 用来连接客户端和服务器端的数据传送进程.
  • 数据传送进程实际完成文件的传送, 在传送完毕后关闭“数据传送连接”并结束运行.

电子邮件协议

  • 发送邮件的协议: SMTP
  • 读取邮件的协议: POP3(Post Office Protocol), 网际报文存取协议(Internet Message Access Protocol, IMAP)

邮件传输过程

基于万维网的电子邮件

基于万维网的电子邮件

两端的用户使用HTTP协议与服务器通信,服务器之间使用SMTP协议. 从而只要能够找到上网的计算机, 打开任何一种浏览器就可以非常方便的收发邮件.

网络安全

计算机网络的安全威胁

  1. 被动攻击: 主要是截获, 即从网络上窃听他人的通信内容, 又称为流量攻击
  2. 主动攻击:
    • 篡改: 故意篡改网络上传送的报文
    • 恶意程序:包括计算机病毒, 计算机蠕虫,特洛伊木马和逻辑炸弹, 后门入侵等
    • 拒绝服务: 包括分布式拒绝服务攻击, 攻击者向互联网的某个服务器不停发送大量分组而导致该服务器无法提供正常服务

数字签名

数字签名必须保证以下三点:

  1. 报文鉴别: 接收者能够核实发送者对报文的签名;
  2. 报文的完整性: 发送者事后不能抵赖对报文的签名;
  3. 不可否认: 接收者不能伪造对报文的签名

鉴别分类

  • 报文鉴别:即鉴别所收到的报文的确是报文的发送者所发送的, 而不是其他人伪造的或篡改的. 这就包含了端点鉴别和报文完整性的鉴别.
  • 实体鉴别:仅仅鉴别发送报文的实体. 实体可以是一个人, 也可以是一个进程(客户或服务器). 这就是端点鉴别.

最后更新: 2024年03月28日 23:43

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2018/03/01/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%AC%94%E8%AE%B0/