2023-07-05
网络协议
00
请注意,本文编写于 540 天前,最后修改于 32 天前,其中某些信息可能已经过时。

目录

计算机网路
网络的分类
衡量网络性能的一些指标
OSI概念模型与TCP/IP四层模型
OSI概念模型
TCP/IP四层模型
网络接口层
物理层
数据链路层
MAC地址(物理地址、硬件地址)
以太网协议
网际层
IP协议
IP协议详解
对比MAC地址与IP地址
IP协议主要内容
IP协议的转发流程
ARP协议和RARP协议
ARP协议内容
RARP
IPv4地址分类
简单划分(存在缺陷)
特殊的主机号
特殊的网络号
IPv4划分子网
子网掩码
无分类编址CIDR
NAT技术
ICMP协议
ICMP协议内容
ping命令
traceroute命令
路由协议
RIP协议
DV算法
RIP协议的过程
OSPF协议
Dijkstra算法
OSPF协议的过程
BGP 协议

本文将讲解计算机网络的模型设计,并从发展-演化的角度角度讲述技术方案的变更,为什么这样设计?希望能带你快速了解掌握计算机网络的核心知识。

计算机网路

定义: 计算机网络是由一些通用的、可编程的硬件互联而成,通过这些硬件,可以传输不同类型的数据,并且可以支持广泛和日益增长的应用。

网络的分类

分类名称范围区域
广域网WAN(Wide Area Network)几十到几千公里跨省、跨国
城域网MAN(Metro. Area Network)5KM-50KM城市间
局域网LAN(Local Area Network)1KM以内地区内

衡量网络性能的一些指标

  • 速率单位 bps=bit/s
  • 时延 (发送时延、排队时延、传播时延、处理时延)
    • 发送时延 = 数据长度(bit)/发送速率(bit/s)
    • 传播时延 = 传输路径距离 / 传播速率(bit/s)
    • 排队时延 = 数据包在网络设备中等待被处理的时间
    • 处理时延 = 数据包到达设备或者目的机器被处理所需要的时间
    • 总时延 = 发送时延 + 排队时延 + 传播时延 + 处理时延
  • 往返时间RTT(Route-Trip Time)
    • RTT表示的是数据报文在端到端通信中的来回一次的时间
    • 通常使用ping命令查看RTT
  • MTU 数据链路层的最大传输单元
    • 数据帧过大或过小都会影响传输的效率 (参考总时延公式)
    • 以太网MTU一般为1500字节
    • 路径MTU 整个链路中最小的MTU

OSI概念模型与TCP/IP四层模型

OSI概念模型

OSI模型将网络划分为七层

  • 应用层 为计算机用户提供接口和服务
  • 表示层 数据处理(编码解码、加密解密等)
  • 会话层 管理(建立、维护、重连)通信会话
  • 传输层 管理端到端的通信连接
  • 网络层 数据路由(决定数据在网络的路径)
  • 数据链路层 管理相邻节点之间的数据通信
  • 物理层 数据通信的光电物理特性

发送时每一层通过添加头部标识包裹,接收时在一层一层解码

image.png

为什么要分层设计

  • 各层之间是相互独立的
  • 每一层需要有足够的灵活性;
  • 各层之间完全解耦

为什么OSI模型没有成为标准?

  • OSI模型设计之初欲成为全球计算机都遵循的标准
  • 但是在市场化过程中困难重重,主要原因是TCP/IP在全球范围成功运行
  • 其次还有以下原因
  • OSI的专家缺乏实际经验
  • OSI标准制定周期过长,按OSI标准生产的设备无法及时进入市场
  • OSI模型设计的并不合理,一些功能在多层中重复出现

TCP/IP四层模型

目前在互联网流行的方案时TCP/IP四层协议模型 image.png

  • TCP/IP四层模型与OSI体系结构对比 image.png

网络接口层

物理层

物理层的作用:连接不同的物理设备,传输比特流。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。

物理层的设备:

  • 双绞线、同轴电缆、网线也属于双绞线、光纤)
  • 无限传输介质 红外线、无线、激光
  • 中继器【Repeater,也叫放大器】
  • 集线器

信道:信道是往一个方向传输信息的媒体,一条通信电路包含一个发送信道和一个接受信道。

  • 单工通信信道:只能一个方向通信,没有反方向反馈的信道;
  • 半双工通信信道:双方都可以发送和接受信息,但不能同时发送也不能同时接收;
  • 全双工通信信道:双方都可以同时发送和接收。

数据链路层

数据链路层主要作用是 封装成帧、透明传输、差错监测

  • 封帧 即 头尾加标记包裹, 为防止内容中含有相同标记,采用透明传输
  • 透明传输即转译,与URL query参数值含有特殊字符的处理一致,
  • 差错监测 奇偶校验码 循环冗余校验码CRC
    • 奇偶校验码 计算bit流的和是奇数还是偶数 0偶数1奇数, 如果有两个bit流出错,就监测不出来了
    • 循环冗余校验码CRC CRC-1即奇偶校验码

MAC地址(物理地址、硬件地址)

  • 每一个设备都拥有唯一的MAC地址
  • MAC地址共48位,使用十六进制表示
  • 每个字节表示一个十六进制数,用 - 或 : 连接起来;
  • MAC广播地址:FF-FF-FF-FF-FF-FF。
  • window ipconfig /all mac ifconfig

以太网

  • 一种广泛使用的局域网(LAN)技术。
  • 核心内容 MAC地址 和 以太网协议

以太网协议

  • 一种应用于数据链路层的协议
  • 使用以太网协议可以完成相邻设备的数据帧传输

image.png

以太网协议的数据帧

目标地址源地址类型帧数据CRC
66246~15004

通过 MAC地址表 进行数据包的转发。

MAC地址硬件接口
mac地址1接口1

具体流程如下: image.png

当E(路由器)不知道MAC地址对应的接口怎么办?

  1. 通过广播除去A以外的所有端口
  2. E收到回复并记录到MAC地址表

网际层

上面只是讲述相邻物理节点的传输, 如果两台计算机跨域千山万水如何通信?

image.png

问题放大一下 就是网络层通信问题

image.png

网络层的核心是IP协议, 其他还有ARP协议、RARP协议、ICMP协议

IP协议

对于上图 计算机A 与计算机B的通信路径有很多种

实际上我们并不需要关心网络是怎样连接的,数据包是怎样走的,这些是网络层解决的,网络层有个重要概念虚拟互联网络。

虚拟互联网络

  • 如果所有的物理设备都通过使用IP协议,就可以屏蔽了物理网络之间的差异
  • 当网络中的主机使用IP协议连接时,则无需关注网络细节
  • 我们只需要关注 A与虚拟互联网络的连接 和 B与虚拟互联网络的的连接
  • image.png
  • 这就是IP协议

IP协议详解

  • IP协议使得复杂的实际网络变为一个虚拟互连的网络
  • IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
  • IP协议解决了在虚拟网络中数据报传输路径的问题

前面说过 MAC地址 ,它是数据链路的身份证, 在数据链路层只要拥有的 MAC地址, 就可以进行数据帧的传输了。

对于网络层来说 也有一个身份证 即IP地址,
IP地址对于网络来说,与MAC对于数据链路层来说作用是类似的

对比MAC地址与IP地址

-表示二进制是否可变
MAC地址十六进制表示
30-B4-9E-ED-85-CA
48位固定的
一个网卡从A计算机卸下来安装到B计算机是不变的
IP地址点分十进制表示
192.168.11.11
32位可变的
一个电脑在不同的地方连接不同的WIFI,IP地址会变化

IP协议主要内容

IP协议.png

IP协议的转发流程

将前面网络传输问题的过程拉平,在分析下 image.png 转发的过程被称为 逐跳(hop-by-hop)

与 数据链路层传输需要 查询 MAC地址表 一样, IP协议转发也需 “路由地址表”

目标IP地址下一跳IP地址

image.png

ARP协议和RARP协议

还是上面一张图, A发送报文给C时,第一跳的过程如下

image.png

如何根据IP地址查询mac地址 就是ARP协议做的事情

  • ARP协议 就是将 网络层IP32位地址 转换为 数据链路层MAC48位地址

与数据链路层转发与网络层转发类似, 根据IP找mac地址有ARP缓存表

IP地址MAC地址

当缓存表没有缓存映射关系怎么办? 也是广播

总结

  • ARP缓存表是ARP协议和RARP协议运行的关键
  • ARP缓存表缓存了IP地址到硬件地址之间的映射关系
  • ARP缓存表中的记录并不是永久有效的,有一定的期限

arp -a 命令可以查询arp缓存表

ARP协议内容

'

image.png

因为ARP协议中包含了IP地址,所以把ARP协议划分到网络层,它是网络层和数据链路层配合使用的一个重要的协议

RARP

  • 逆地址解析协议,与ARP协议相反, 将数据链路层48位MAC地址,解析为网络层的32位IP地址
  • 它的类型是0835 其他与ARP协议一致

IPv4地址分类

IP地址长度32位,用点分十进制表示 0~255.0~255.0~255.0~255

232=43亿2^{32}=43亿 如何使用这43亿个IP地址, 因此需要规划和分配IP地址

IP地址非常简单

image.png

  • A类 网络号8位 以0开头
  • B类 网络号16位 以10开头
  • C类 网络号24位 以110开头

简单划分(存在缺陷)

image.png

现实中的网络需要预留一些特殊的主机号和网络号处理一些问题

特殊的主机号

  • 主机号全0表示当前网络段,不可分配为特定主机
  • 主机号为全1表示广播地址,向当前网络段所有主机发消息 举例来说 如 1.2.3.4这个A类地址IP,
  • 1.0.0.0表示网络段
  • 1.255.255.255表示广播地址, 不能分配给任何主机,往这个地址发消息就会广播给1.0.0.0这个网络段的所有主机

特殊的网络号

  • A类地址网络段全0 表示特殊网络
  • A类地址网络段后7位全1 即 127开头的 表示回环地址
    • 回环地址通常用于进行回环测试。
    • 当将数据发送到回环地址时,数据会被送回给发件人的本地主机,而不会在网络上转发。
    • 回环地址常用于本地主机测试网络应用程序和服务。
    • 127.0.0.1 表示本地
  • B类地址网络段全0 即 128.0 是不可使用的
  • C类地址网络段全0 即192.0.0 是不可使用的

排除这些特殊网络号和主机号,得到一个可划分的IP地址分类 image.png

回环地址

  • 127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何 一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远 不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在 安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络 协议、基本数据接口等是否正常的

保留地址块

  • 0.0.0.0 到 0.255.255.255
  • 224.0.0.0 到 239.255.255.255
  • 这些地址块是为特殊用途保留的。其中,0.0.0.0被用作默认路由,表示未知目标网络;224.0.0.0 到 239.255.255.255是多播地址范围,用于支持多播通信。

除A、B、C三类地址外,还有

  • D类 1110 开头
  • E类 11110开头 用于特殊用途。

IPv4划分子网

某公司拥有100名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?

  • 根据前面网络分类C类有254个主机,因此申请C类地址最划算
  • 假设申请的是 193.10.10.0 假设这个公司有256个员工呢?
  • 这是C类已经不能满足, B类有 2161=655342^{16}-1=65534 个地址
  • 但是如果人人都这样浪费,IP地址很快就不够用了,
  • 因此提出子网划分的概念, 将主机号在划分为子网号和主机号
  • image.png
  • 这样只需将 192.10.10.1~192.10.10.126分配给该公司, 只浪费了26个主机号而已

子网号这么多,有没有办法快速判断某个IP的网络号?

子网掩码

  • 它并非真实的IP
  • 它用于表示有多少网络位与主机位长度, 1填充网络位 0填充主机位, 如255.255.255.0 前24位是网络位,后8位是主机位

image.png

IP 193.10.10.6的子网掩码 255.255.255.128 ,两者转换为二进制, 通过与运算,快速算出某个IP所属的子网号, 这里子网号为 192.10.10.0

无分类编址CIDR

由于子网划分太复杂,要先知道网络号,再进行子网号划分,我们希望有更简便的方法,因此提出了CICR

  • CIDR中没有A、B、C类网络号、和子网划分的概念
  • CIDR将网络前缀相同的IP地址称为一个“CIDR地址块”
  • 网络前缀是任意位数的
  • 斜线记法
    • 193.10.10.129/25

image.png

相比原来子网划分更加灵活

回到前面的问题 “某公司拥有100名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?” /25

image.png

image.png

NAT技术

  • IPv4最多只有40+亿个IP地址
  • 早期IP地址的不合理规划导致IP号浪费
内网地址外网地址
内部机构使用全球范围使用
避免与外网地址重复全球公网唯一

三类内网地址

A、B、C类是私有地址(局域网IP),它们在公共互联网中不被路由器转发

标题范围
A类10.0.0.0~10.255.255.255
B类172.16.0.0~172.31.255.255
C类192.168.0.0~192.168.255.255

思考: 一个家庭只有一个IP地址,那么有很多设备连上互联网呢?公司也有一样的问题

image.png

解决方案: 路由器将公网IP通过端口划分给多个主机使用, 通过NAT表转入数据发的收发,进而实现局域网内的设备都能上网 image.png

网络地址转换NAT技术

  • 网络地址转换NAT(Network Address Translation)
  • NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中
  • NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度

ICMP协议

  • 网际控制报文协议(Internet Control Message Protocol)
  • ICMP协议可以报告错误信息或者异常情况

ICMP协议内容

image.png

ICMP报文首部

  • 8位类型
  • 8位代码
  • 16位校验和

它主要有两种 差错报告报文询问报文

image.png

image.png

ICMP协议有两个重要的应用ping命令 和 traceroute命令

ping命令

ping命令就是利用ICMP的询问报文功能。 image.png

  • 因ICMP协议是放到IP协议内部的,IP协议头部供20字节,这里ICMP长度为 3220=12字节32-20=12字节
  • TTL及IP协议头部的生存时间字段,每一跳减1,为零将丢弃

通常我们遇到网路问题 都是通过ping命令排查

  1. ping 127.0.0.1 如果得不到返回说明协议栈可能出问题了, 要重装系统或重新安装协议栈
  2. ping 网关地址
    • 网关地址即路由器IP 如 192.168.0.1
    • 如果不通,说明网线有问题
  3. ping 远端地址
    • 如果不通,说明你家到ICMP之间有故障, 要联系宽带运营商解决

traceroute命令

Traceroute可以探测IP数据在网络中走过的路径

它的原理是利用IP协议头部的TTL字段,每经过一个设备TTL-1,
当TTL=0时,网络设备丢弃该报文,同时会上报一个ICMP差错报告报文,

路由协议

前面讲述IP协议通过逐跳的方式完成数据包的转发, 逐跳依赖的是路由表,那么路由表的数据是怎样来的呢?

需要一个好的算法去解决这件事情

路由的算法可以抽象为图论的算法

  • 每一顶点表示一个网络、路由器或计算机
  • 每一条边表示一条网络路径

实际上网络环境更复杂,路由算法要比图论算法更复杂

路由算法的必要条件

  • 算法是正确的、完整的
  • 算法在计算上应该尽可能的简单
  • 算法可以适应网络中的变化
  • 算法是稳定的和公平的

为了处理路由算法问题,就需要对网络进行划分, 于是提出了自治系统概念

自治系统

  • 一个自治系统(AS)是处于一个管理机构下的网络设备群
  • AS内部网络自行管理,AS对外提供一个或者多个出(入)口
  • 自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
  • 自治系统外部路由的协议称为:外部网关协议(BGP)

image.png

RIP协议

  • 距离矢量DV算法
  • RIP协议的过程

DV算法

dv2.jpg

总结:

  • 每一个节点使用两个向量 DiD_iSiS_i
  • DiD_i 描述的是当前节点到别的节点的距离
  • SiS_i 描述的是当前节点到别的节点的下一节点
  • 每一个节点与相邻的节点交换向量 DiD_iSiS_i 的信息
  • 每一个节点根据交换的信息更新自己的节点信息

RIP协议的过程

协议内容

  • RIP协议是使用DV算法的一种路由协议
  • RIP协议把网络的跳数(hop)作为DV算法的距离
  • RIP协议每隔30s交换一次路由信息
  • RIP协议认为跳数>15的路由则为不可达路由

具体过程

  1. 路由器初始化路由信息(两个向量 DiD_iSiS_i)
  2. 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
    • 检索本地路由,将信息中新的路由插入到路由表里面
    • 检索本地路由,对于下一跳为X的,更新为修改后的信息
    • 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
  3. 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)

思考: 这种协议有没有什么问题?
假设 A - B - C 三个节点, A节点发生了故障
image.png
总结:RIP协议的缺点

  • 随便相信 “隔壁老王”
  • “自己不思考” “视野不够”
  • RIP协议适合小型的网络

OSPF协议

  • Dijkstra(迪杰斯特拉)算法
  • OSPF协议的过程

Dijkstra算法

它解决的是最短路径问题

  • Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题
  • “以起始点为中心,向外层层扩展”

Dijkstra.jpg

OSPF协议的过程

OSPF协议 包含 链路状态(LS)协议, 先来看一下LS协议

LS协议与RIP协议对比

LS协议RIP协议
向所有的路由器发送消息
一传十、十传百
只和相邻路由器交换信息
消息描述该路由器与相邻路由器的链路状态
- 距离、时延、带宽、。。。
- 这些数据是可以人为决定的
只交换跳数
只有链路状态发生变化时,才发送更新信息每隔30s交换路由信息

LS协议解决了RIP协议的两个问题

  • 随便相信“隔壁老王”
  • “视野不够”

OSPF协议的过程

  1. 向所有的路由器发送消息
    • image.png
  2. 消息描述该路由器与相邻路由器的链路状态
    • image.png
  3. 只有链路状态发生变化时,才发送更新信息
    • 减少了数据的交换,更快收敛

五种消息类型

  1. 问候消息(Hello)
  2. 链路状态数据库描述信息
  3. 链路状态请求信息
  4. 链路状态更新信息
  5. 链路状态确认信息

image.png

BGP 协议

  • BGP(Border Gateway Protocol: 边际网关协议)
  • BGP协议是运行在AS之间的一种协议

一个公司到另一个公司, 一个学校到另一个学校,城市之间,国家之间都是使用BGP协议

思考: 为什在AS之间要使用这个协议

  • 互联网规模很大 如使用OSPF协议, 1)每个路由器都要存储很大的数据,2)迪杰斯特拉计算最短路径很慢
  • AS内部使用不同的协议 有的使用RIP协议 有的使用OSPF协议
  • AS之间需要考虑除网络特性以外的一些因素(政治、安全…)

综上分析:

  • BGP协议只能够找到一条到达目的比较好的路由(OSPF可以找到最佳路由)

BGP发言人

  • BGP并不关心内部网络拓扑
  • AS之间通过BGP发言人交流信息
  • BGP Speaker可以人为配置策略 ---代价

image.png

总结:

  • BGP协议能够找到一条到达目的比较好的路由
  • AS之间通过BGP发言人来进行路由信息的交换

本文作者:郭敬文

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!