网络协议总结

news2024/11/15 14:07:46

网络协议总结

  • 网络模型
    • 网络协议
    • TCP/IP 模型
      • 网络接入层
      • 封装与解封装
      • 实际数据传输举例
        • 发送数据包
      • 接收数据包
        • 网络接口处理
        • IP 模块处理
        • TCP 模块处理
        • 应用程序处理
    • 网络构成
      • 通信介质与数据链路
      • 网卡
      • 二层交换机
      • 路由器 / 三层交换机![在这里插入图片描述](https://img-blog.csdnimg.cn/a8e33f1a78b145f2b9b7ee5a894dc521.png)
      • 四至七层交换机![4层与7层交换机](https://img-blog.csdnimg.cn/de544731624d48269231fcb8cacc6804.png)
  • 数据链路层
    • MAC 地址
    • 以太网
    • 以太网数据格式
    • 交换机二层转发原理
    • VLAN
      • VLAN 原理
      • 划分 VLAN
      • 跨交换机 VLAN 原理
  • 网络层
    • 数据如何传输到目的地?
    • IP 地址的基础知识
      • IP 地址的组成
      • IP 地址的分类
      • 广播地址
      • IP 组播
      • 子网掩码
      • CIDR 与 VLSM
      • 公网地址与私有地址
      • IP 路由
      • 路由条目类型
      • 路由汇总
      • IP 分片与重组
        • 数据链路不同, MTU 则不同
        • IP 报文的分片与重组
        • 路径MTU发现
      • 路由器三层转发原理
      • ARP
        • ARP 的工作原理
        • ARP 代理
        • 免费 ARP
      • ICMP
        • ping
    • IPv4 头部
  • 路由协议
    • 路由的概念
      • 什么是路由器
      • 什么是路由
      • 什么是路由表
      • 路由表来源
      • 路由优先级
      • 路由环路
      • 黑洞路由
    • 动态路由协议
      • 动态路由协议基本原理
      • 自治系统
      • EGP 和 IGP
    • 动态路由协议类型
      • 距离矢量路由协议
      • 链路状态路由协议
      • 路由协议的性能指标
      • 主要路由协议
  • 传输层
    • 初识传输层
      • TCP
      • UDP
      • TCP 和 UDP 的区别
    • 端口号
    • UDP
    • TCP
      • 序列号和确认应答
      • 超时重发
      • 连接管理
        • 三次握手
        • 四次挥手
      • 单位段
      • 窗口控制
      • 窗口控制和重发控制
      • 流控制
      • 拥塞控制
    • 对比 TCP 和 UDP
    • UDP 格式
    • TCP 格式
  • 应用层
  • NAT
    • 初始 NAT
    • NAT 技术
      • 基本 NAT

网络模型

网络协议

  • 局域网 :小范围内的私有网络,一个家庭内的网络、一个公司内的网络、一个校园内的网络都属于局域网。
  • 广域网:把不同地域的局域网互相连接起来的网络。运营商搭建广域网实现跨区域的网络互连。
  • 互联网:互联全世界的网络。互联网是一个开放、互联的网络,不属于任何个人和任何机构,接入互联网后可以和互联网的任何一台主机进行通信。

网络协议就是为了通信各方能够互相交流而定义的标准或规则,设备只要遵循相同的网络协议就能够实现通信。

TCP/IP 模型

TCP/IP 是有由 IETF 建议、推进其标准化的一种协议,是 IP 、 TCP 、HTTP 等协议的集合。TCP/IP 是为使用互联网而开发制定的协议族,所以互联网的协议就是 TCP/IP 。

先介绍下 TCP/IP 与 OSI 分层之间的对应关系,以及 TCP/IP 每层的主要协议。
在这里插入图片描述

网络接入层

TCP/IP 是以 OSI 参考模型的物理层和数据链路层的功能是透明的为前提制定的,并未对这两层进行定义,所以可以把物理层和数据链路层合并称为网络接入层。网络接入层是对网络介质的管理,定义如何使用网络来传送数据。但是在通信过程中这两层起到的作用不一样,所以也有把物理层和数据链路层分别称为硬件、网络接口层

设备之间通过物理的传输介质互连, 而互连的设备之间使用 MAC 地址实现数据传输。采用 MAC 地址,目的是为了识别连接到同一个传输介质上的设备。

封装与解封装

通常,为协议提供的信息为包头部,所要发送的内容为数据。每个分层中,都会对所发送的数据附加一个头部,在这个头部中包含了该层必要的信息, 如发送的目标地址以及协议相关信息。在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据。
数据发送前,按照参考模型从上到下,在数据经过每一层时,添加协议报文头部信息,这个过程叫封装
封装
数据接收后,按照参考模型从下到上,在数据经过每一层时,去掉协议头部信息,这个过程叫解封装

解封装
经过传输层协议封装后的数据称为,经过网络层协议封装后的数据称为,经过数据链路层协议封装后的数据称为帧,物理层传输的数据为比特

TCP/IP 通信中使用 MAC 地址、 IP 地址、端口号等信息作为地址标识

实际数据传输举例

发送数据包

实际应用中,互联网是使用的 TCP/IP 协议进行网络连接的。我们以访问网站为例,看看网络是如何进行通信的。
http传输

接收数据包

包的接收流程是发送流程的反向过程。

网络接口处理

收到以太网包后,首先查看头部信息的目的 MAC 地址是否是发给自己的包。如果不是发送给自己的包就丢弃。如果是发送给自己的包,查看上层协议类型是IP 包,以太网帧解封装成 IP 包,传给 IP 模块进行处理。如果是无法识别的协议类型,则丢弃数据。
网络接口处理

IP 模块处理

收到 IP 包后,进行类似处理。根据头部信息的目的 IP 地址判断是否是发送给自己包,如果是发送给自己的包,则查看上一层的协议类型。上一层协议是TCP ,就把 IP 包解封装发送给 TCP 协议处理。
IP模块处理
假如有路由器,且接收端不是自己的地址,那么根据路由控制表转发数据。
在这里插入图片描述

TCP 模块处理

收到 TCP 段后,首先查看校验和,判断数据是否被破坏。然后检查是否按照序号接收数据。最后检查端口号,确定具体的应用程序。
在这里插入图片描述
数据接收完毕后,发送一个 “ 确认回执 ” 给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。

数据被完整接收后,会把 TCP 段解封装发送给由端口号识别的应用程序。

应用程序处理

应用程序收到数据后,通过解析数据内容获知发送端请求的网页内容,然后按照HTTP 协议进行后续数据交互。

网络构成

搭建一套网络涉及各种线缆和网络设备。
在这里插入图片描述

通信介质与数据链路

设备之间通过线缆进行连接。有线线缆有双绞线、光纤、串口线等。根据数据链路不同选择对应的线缆。传输介质还可以被分为电波、微波等不同类型的电磁波。

  • 传输速率:单位为 bps ,是指单位时间内传输的数据量有多少。又称作带宽,带宽越大网络传输能力就越强。
  • 吞吐量:单位为 bps ,主机之间实际的传输速率。吞吐量这个词不仅衡量带宽, 同时也衡量主机的 CPU 处理能力、 网络的拥堵程度、 报文中数据字段的占有份额等信息。

网卡

任一主机连接网络时,必须要使用网卡。可以是有线网卡,用来连接有线网络,也可以是无线网卡连接 WiFi 网络。每块网卡都有一个唯一的 MAC 地址,也叫做硬件地址或物理地址

二层交换机

在这里插入图片描述
二层交换机位于 OSI 模型的第 2 层(数据链路层)。它能够识别数据链路层中的数据帧,并将帧转发给相连的另一个数据链路。

数据帧中有一个数据位叫做 FCS ,用以校验数据是否正确送达目的地。二层交换机通过检查这个值,将损坏的数据丢弃。

二层交换机根据 MAC 地址自学机制判断是否需要转发数据帧。

路由器 / 三层交换机在这里插入图片描述

路由器是在 OSI 模型的第 3 层(网络层)上连接两个网络、并对报文进行转发的设备。二层交换机是根据 MAC 地址进行处理,而路由器 / 三层交换机则是根据== IP 地址==进行处理的。 因此 TCP/IP 中网络层的地址就成为了 IP 地址。

四至七层交换机4层与7层交换机

四至七层交换机负责处理 OSI 模型中从传输层至应用层的数据。以 TCP 等协议的传输层及其上面的应用层为基础,分析收发数据,并对其进行特定的处理。例如,流量大的应用的一台服务器不能满足访问需求,通过负载均衡设备将访问分发到后台多个服务器上,就是四至七层交换机的一种。还有带宽控制、广域网加速器、防火墙等应用场景。

数据链路层

MAC 地址

每个网卡或三层网口都有一个 MAC 地址, MAC 地址是烧录到硬件上,因此也称为硬件地址。MAC 地址作为数据链路设备的地址标识符,需要保证网络中的每个 MAC 地址都是唯一的,才能正确识别到数据链路上的设备。

MAC 地址由 6 个字节组成。前 3 个字节表示厂商识别码,每个网卡厂商都有特定唯一的识别数字。后 3 个字节由厂商给每个网卡进行分配。厂商可以保证生产出来的网卡不会有相同 MAC 地址的网卡。
在这里插入图片描述
现在可以通过软件修改 MAC 地址,虚拟机使用物理机网卡的 MAC 地址,并不能保证 MAC 地址是唯一的。但是只要 MAC 地址相同的设备不在同一个数据链路上就没问题。

以太网

有线局域网中普遍使用以太网,以太网标准简单,传输速率高。常见的网络拓扑结构如下图。
在这里插入图片描述

什么是网络拓扑

网络的连接和构成的形态称为网络拓扑。它不仅可以直观的看到网络物理连接方式,还可以表示网络的逻辑结构。

以太网数据格式

当今最常用的以太网协议标准是 ETHERNET II 标准。 ETHERNET II标准定义的数据帧格式如下图。
在这里插入图片描述

  • 前导码( Preamble )
    前导码由 7 个字节组成,每个字节固定为 10101010 。之后的 1 个字节称为帧起始定界符,这个字节固定为 10101011 。这 8 个字节表示以太网帧的开始,也是对端网卡能够确保与其同步的标志。帧起始定界符的最后两位比特被定义为 11 ,之后就是以太网数据帧的本体。
  • 目的地址( Des tination Address )
    目的地址由 6 个字节组成,用来标识数据帧的目的设备。
  • 源地址( Sour ce Address )
    源地址由 6 个字节组成,用来标识数据帧的始发设备,类似于快递的发件人地址。
  • 类型( Type )
    类型字段由 2 个字节组成。类型字段是表明上一层(即网络层)的协议类型,可以让接收方使用相同的协议进行数据帧的解封装。
  • 数据( Data )
    帧头后就是数据。一个数据帧所能容纳的最大数据范围是 46 ~ 1500 个字节。如果数据部分不足 46 个字节,则填充这个数据帧,让它的长度可以满足最小长度的要求。
  • FCS( Frame Check Sequence )
    FCS 由 4 个字节组成,位于数据帧的尾部,用来检查帧是否有所损坏。通过检查 FCS 字段的值将受到噪声干扰的错误帧丢弃。

交换机二层转发原理

交换机有多个网络端口,它通过识别数据帧的目标 MAC 地址,根据 MAC 地址表决定从哪个端口发送数据。MAC 地址表不需要在交换机上手工设置,而是可以自动生成的。
在这里插入图片描述

交换机是如何添加、更新、删除 M AC 地址表条目的?

在初始状态下,交换机的 MAC 地址表是空的,不包含任何条目。当交换机的某个端口接收到一个数据帧时,它就会将这个数据帧的源 MAC 地址、接收数据帧的端口号作为一个条目保存在自己的 MAC 地址表中,同时在接收到这个数据帧时重置这个条目的老化计时器时间。这就是交换机自动添加 MAC 地址表条目的方式。
在这里插入图片描述

如何使用 M AC 地址表条目进行转发?

当交换机的某个端口收到一个单播数据帧时,它会查看这个数据帧的二层头部信息,并进行两个操作。一个操作是根据源 MAC 地址和端口信息添加或更新MAC 地址表。另一个操作是查看数据帧的目的 MAC 地址,并根据数据帧的目的 MAC 地址查找自己的 MAC 地址表。在查找 MAC 地址表后,交换机会根据查找结果对数据帧进行处理,这里有 3 中情况:

  • 交换机没有在 MAC 地址表中找到这个数据帧的目的 MAC 地址,因此交换机不知道自己的端口是否有连接这个 MAC 地址的设备。于是,交换机将这个数据帧从除了接收端口之外的所有端口泛洪出去。
    在这里插入图片描述
  • 交换机的 MAC 地址表中有这个数据帧的目的 MAC 地址,且对应端口不是接
    收到这个数据帧的端口,交换机知道目的设备连接在哪个端口上,因此交换机
    会根据 MAC 地址表中的条目将数据帧从对应端口单播转发出去,而其它与交
    换机相连的设备则不会收到这个数据帧。
    在这里插入图片描述
  • 交换机的 MAC 地址表中有这个数据帧的目的 MAC 地址,且对应端口就是接收到这个数据帧的端口。这种情况下,交换机会认为数据帧的目的地址就在这个端口所连接的范围内,因此目的设备应该已经收到数据帧。这个数据帧与其它端口的设备无关,不会将数据帧从其它端口转发出去。于是,交换机会丢弃数据帧。
    在这里插入图片描述
  • 单播:主机一对一的发送数据。单播地址是主机的 MAC 地址。
  • 广播:向局域网内所有设备发送数据。只有全 1 的 MAC 地址为广播 MAC 地址,即 FF-FF-FF-FF-FF-FF 。
  • 泛洪:将某个端口收到的数据从除该端口之外的所有端口发送出去。泛洪操作广
    播的是普通数据帧而不是广播帧。

VLAN

广播域是广播帧可以到达的区域。换句话说,由多个交换机和主机组成的网络就
是一个广播域。

网络规模越大,广播域就越大,泛洪流量也越来越大,降低通信效率。在一个广播域内的任意两台主机之间可以任意通信,通信数据有被窃取的风险。
在这里插入图片描述
为了解决广播域扩大带来的性能问题和安全性降低问题, VLAN 技术应运而生。 VLAN 技术能够在逻辑上把一个物理局域网分隔为多个广播域,每个广播域称为一个虚拟局域网(即 VLAN )。每台主机只能属于一个 VLAN ,同属一个 VLAN 的主机通过二层直接通信,属于不同 VLAN 的主机只能通过 IP路由功能才能实现通信。通过划分多个 VLAN ,从而减小广播域传播的范围,过滤多余的包,提高网络的传输效率,同时提高了网络的安全性。

VLAN 原理

VLAN 技术通过给数据帧插入 ==VLAN 标签(即 VLAN TAG )==的方式,让交换机能够分辨出各个数据帧所属的 VLAN 。

VLAN 标签是用来区分数据帧所属 VLAN 的,是 4 个字节长度的字段,插入到以太网帧头部上。 VLAN 标签会插入到源 MAC 地址后面, IEEE 802.1Q标准有这个格式定义和字段构成说明。
在这里插入图片描述

  • TPID (标签协议标识符):
    长度 2 个字节,值为 0x8100 ,用来表示这个数据帧携带了 802.1Q 标签。不支持 802.1Q 标准的设备收到这类数据帧,会把它丢弃。
  • TCI (标签控制信息):
    长度 2 个字节,又分为三个子字段,用来表示数据帧的控制信息:
    • 优先级( Priorit y ):长度为 3 比特,取值范围 0 ~ 7 ,用来表示数据帧的优先级。取值越大,优先级越高。当交换机发送拥塞是,优先转发优先级高的数据帧。
    • CFI (规范格式指示器):长度为 1 比特,取值非 0 即 1 。
    • VLAN ID ( VLAN 标识符):长度为 12 比特,用来表示 VLAN 标签的数值。取值范围是 1 ~ 4094 。

划分 VLAN 后,交换机如何处理广播报文?

交换机上划分了多个 VLAN 时,在交换机接收到广播数据帧时,只会将这个数据帧在相同 VLAN 的端口进行广播。
在这里插入图片描述

划分 VLAN 后,交换机如何处理目的 M AC 地址不在 M AC 地址表中的单播数据帧?

交换机上划分了多个 VLAN 时,当交换机接收到一个目的 MAC 地址不存在于自己 MAC 地址表中的单播数据帧时,只会将这个数据帧在相同 VLAN 的端口进行泛洪。

划分 VLAN 后,不同 VLAN 的主机能否通信?

在不使用路由转发的前提下,交换机不会从一个 VLAN 的端口中接收到的数据帧,转发给其它 VLAN 的端口。

怎么区分不同的 VLAN ?

通过 VLAN ID 进行区分,例如 VLAN 10 和 VLAN 20 就是不同的 VLAN。

VLAN 技术有哪些好处?

  • 增加了广播域的数量,减小了每个广播域的规模,也减少了每个广播域中终端设备的数量;
  • 增强了网络安全性,保障网络安全的方法增加了;
  • 提高了网络设计的逻辑性,可以规避地理、物理等因素对于网络设计的限制。

划分 VLAN

我们可以使用不同的方法,把交换机上的每个端口划分到某个 VLAN 中,以此在逻辑上分隔广播域。

交换机通常会使用==基于端口划分 VLAN ==的方法。在交换机上手动配置,绑定交换机端口和 VLAN ID 的关系。

  • 优点:配置简单。想要把某个端口划分到某个 VLAN 中,只需要把端口的PVID (端口 VLAN ID )配置到相应的 VLAN ID 即可。
  • 缺点:当终端设备移动位置是,可能需要为终端设备连接的新端口重新划分VLAN 。

除了这种方法外,还可以使用基于 ==MAC 地址划分 VLAN 、基于 IP 地址划分VLAN 、基于协议划分 VLAN 、基于策略划分 VLAN ==等方法来划分VLAN。

PVID :接口默认 VLAN ID ,是交换机端口配置的参数,默认值是 1 。

跨交换机 VLAN 原理

终端设备不会生成带 VLAN 标签的数据帧,它们发出的数据帧叫做无标记帧(Untagged )。它们连接的交换机会给无标记帧打上 VLAN 标签。交换机通过每个端口的 PVID ,判断从这个接口收到的无标记帧属于哪个 VLAN ,并在转发时,插入相应的 VLAN 标签,从而将无标记帧变为标记帧( Tagged )

网络层

为什么没有配置 IP 地址就无法上网? IP 协议又是啥?

这要从 TCP/IP 协议说起,互联网使用的是 TCP/IP 协议,其中 IP 协议又是最重要的协议之一。IP 协议是基于 IP 地址将数据包发送给目的主机,能够让互联网上任何两台主机进行通信。
在这里插入图片描述
IP 协议位于 OSI 参考模型的第三层,即网络层。

网络层的主要作用是实现终端节点之间的通信。这种终端节点之间的通信,也叫点对点通信。
在这里插入图片描述

  • 主机:配置有IP 地址,不进行路由控制的设备。
  • 路由器:既有IP地址又具有路由控制的设备。
  • 节点:主机和路由器的统称。

数据如何传输到目的地?

数据链路层实现两个直连设备之间的数据传输,网络层的 IP 协议实现没有直连的两个网络之间的数据传输。

IP 地址的基础知识

在 TCP/IP 通信中使用 IP 地址识别主机和路由器。 IP 地址是逻辑地址,需要手工配置或自动获取,为了保证正常通信,每个设备必须配置 IP 地址

IP 地址的组成

IP 地址由网络号(网段地址)和主机号(主机地址)两部分组成。
在这里插入图片描述
网络号是设备所在区域的一种标识,网络号相同的设备位于同一个网段内,网络号不同的设备通过路由器实现通信。主机号是在同一个网段中不同设备的标识,不允许同一个网段内出现重复的主机号。

路由器是根据目的 IP 地址的网络号进行路由。
在这里插入图片描述

IP 地址的分类

IP 地址分为四类,分别是== A 类、 B 类、 C 类、 D 类==(还有一个保留的 E类)。

A 类地址

A 类 IP 地址是首位以“ 0 ”开头的地址。从第 1 位到第 8 位是它的网络号,网络号的范围是 0 ~ 127 。其中 0 和 127 属于保留地址,减去两个保留地址,因此有 126 个可用的 A 类地址。

B 类地址

B 类 IP 地址是前两位以“ 10 ”开头的地址。从第 1 位到第 16 位是它的网络号,网络号的范围是 128.0 ~ 191.255 。其中 128.0 和 191.255 属于保留地址,减去两个保留地址,因此有 16382 个可用的 B 类地址。

C 类地址

C 类 IP 地址是前三位以“ 110 ”开头的地址。从第 1 位到第 24 位是它的网络号,网络号的范围是 192.0.0 ~ 223.255.255 。其中 192.0.0 和223.255.255 属于保留地址,减去两个保留地址,因此有 2097150 个可用的C 类地址。

D 类地址

D 类 IP 地址是前四位以“ 1110 ”开头的地址。从第 1 位到第 32 位是它的网络号,网络号的范围是 224.0.0.0 ~ 239.255.255.255 。D 类地址没有主机号,用于组播。

网段地址和广播地址

当主机号全为 0 时,表示的是网段地址,非主机地址。当主机号全为 1 时是广播地址,也不是主机地址。因此在分配 IP 地址过程中,需要排除这两个地址。例如一个 C 类地址 192.168.1.0/24 最多只有 254 个可用主机地址,而不是 256 个。

广播地址

IP 地址中的主机号全部为 1 的就是广播地址,它是向同一个网段中的所有主机发送数据包。例如一个 B 类主机地址 172.20.1.100 的广播地址是172.20.255.255 。

IP 组播

组播用于将包发送给特定组内的所有主机。
在这里插入图片描述

组播使用 D 类地址。因此 IP 地址前四位是“ 1110 ”开头的,就是组播地址。剩下的 28 位就是组播的组编号。组播的地址范围是 224.0.0.0 ~239.255.255.255 ,其中 224.0.0.0 ~ 224.0.0.255 既可以在同一个网段内实现组播,又可以跨网段给全网所有组员发送组播包。

子网掩码

早期网络地址采用固定网络位长度的方式,使 IPv4 地址遭到大量浪费。如今网段地址的长度可变,同时也需要一种标识来获取网段地址,以便路由器对数据包进行转发,这种识别码就是子网掩码。

CIDR 与 VLSM

解决 IP 地址浪费问题,除了使用子网掩码,还使用了 CIDR 和 VLSM 技术。

CIDR ,即无类域间路由,采用任意长度分割 IP 地址的网络号和主机号。它有两个作用:

  • 把多个网段聚合到一起,生成一个更大的网段;
  • 汇总路由表 IP 地址,分担路由表压力。

==VLSM ==,即可变长子网掩码,它可以对 A 、 B 、 C 类地址再进行子网划分,以达到充分利用 IP 地址的目的。

CIDR 和 VLS M 的区别

  • CIDR 是主机号向网络号借位,目的是把几个网络汇总成一个大的网络,增加子网主机数量;
  • VLSM 是网络号向主机号借位,目的是把一个标准的网络划分成几个子网,减少子网主机数量。

公网地址与私有地址

IP 地址分为公网地址和私有地址。公网地址是在互联网上使用的,私有地址是在局域网中使用的。

  • 公网地址由 Internet NIC 负责分配,通过它直接访问互联网。
  • 私有地址是一段保留的 IP 地址。只在局域网中使用,无法在互联网上使用。但是私有地址可以通过 NAT 技术,将私有地址转换为公网地址接入互联网。

公网 IP 地址在互联网范围内是唯一的,私有 IP 地址只要在同一个局域网内唯一即可。在不同局域网内出现相同的私有 IP 不会影响使用。

IP 路由

IP 路由是设备根据 IP 地址对数据进行转发的操作。当一个数据包到达路由器时,路由器根据数据包的目的地址查询路由表,根据查询结果将数据包转发出去,这个过程就是 IP 路由。

路由表

为了将数据包发给目的节点,所有节点都维护着一张路由表。路由表记录 IP 数据在下一跳应该发给哪个路由器。 IP 包将根据这个路由表在各个数据链路上传输。

路由表的生成方式有两种:一种是手动设置,也叫静态路由。另一种是路由器之间通过交换信息自动刷新,也叫动态路由

下一跳

Hop ,中文叫“跳”。它是指网络中的一个区间。 IP 包就是在网络中一跳一跳的转发,在每一个区间内决定 IP 包下一跳的路径。

一跳是指数据链路中广播域的区间,也就是说不经过路由器而能直接到达的相连主机或路由器网卡的一个区间。

路由条目类型

默认路由

默认路由是指路由表中任何一个地址都能与之匹配的条目。所有数据包都可以使用默认路由进行数据转发。默认路由为 0.0.0.0/0 或 default 。

主机路由

“ IP地址/32 ”被称为主机路由,它是路由表中指向单个 IP 地址或主机名的路由条目。例如: 192.168.153.15/32 就是一条主机路由,表示整个 IP 地址的所有位都将参与路由。

回环地址

以 127 开头的 IP 地址都是环回地址,其所在的回环接口可以理解为虚拟网卡。使用回环地址时,数据包会直接被主机的 IP 层获取,而不经过链路层,也不会流向网络。一般用来检查主机上运行的网络服务是否正常。

路由汇总

路由汇总主要是为了减少路由条目,把可以聚合的路由汇聚为一个大网络。

路由表越大,查找路由表所需的内存和 CPU 也就越多,时间也会越长,导致转发 IP 数据包的性能下降。如果想要搭建大规模、高性能的网络,就需要尽可能的控制路由表的大小。

IP 分片与重组

数据链路不同, MTU 则不同

每种数据链路的最大传输单元( MTU )不同,网络层的 IP 是数据链路的上一层, IP 通过分片屏蔽数据链路的差异,实现不同数据链路互通。从 IP 的上一层看,它完全可以忽略各个数据链路上的 MTU ,只需要按照源 IP 地址发送的长度接收数据包。
在这里插入图片描述

IP 报文的分片与重组

当遇到 IP 数据包大于数据链路 MTU 时,往往无法直接发送出去,主机或路由器就会对 IP 数据包进行分片处理。

经过分片后的 IP 数据,只会在目标主机上进行重组,中途经过路由器时不会进行重组。

在这里插入图片描述

路径MTU发现

分片机制有两点不足:

  • 加重路由器的处理性能;
  • 在分片传输中,一旦某个分片丢失,会造成整个 IP 数据包作废。

为了解决这个问题,要使用路径 MTU 发现( Path MTU Di scover y )技术。路径 MTU 是指从发送端主机到接收端主机之间不需要分片时最大 MTU值。即路径中存在的所有数据链路中最小的 MTU 。路径 MTU 发现是从发送主机按照路径 MTU 的值将数据报分片后进行发送,避免在中途的路由器上进行分片处理。

在这里插入图片描述
路径 MTU 发现的工作原理如下:

  1. 发送端主机发送 IP 数据包时将其头部的分片禁止标志位设置为 1 。根据这个标志位,途中的路由器即使收到需要分片的大包,也不会分片,而是直接将包丢弃。之后通过一个 ICMP 不可达消息将数据链路上 MTU 值给发送端主机。

  2. 发送端主机根据收到的 MTU 值对数据包进行分片处理,再把 IP 数据包发送给相同的目的主机。如此重复,直到数据包被发送到目标主机为止没有再收到任何 ICMP ,就认为最后一次 ICMP 所通知的 MTU 即是一个合适的 MTU值。 MTU 值至少可以缓存约 10 分钟,在这 10 分钟内使用刚得到的 MTU,过了 10 分钟后就重新做一次路径 MTU 发现。

如果是在 TCP 的情况下,根据路径 MTU 的大小计算出最大段长度( MSS ),然后再根据这些信息进行数据包的发送。因此,在TCP 中如果使用路径 MTU 发现, IP 层则不会再分片。

路由器三层转发原理

路由器有多个端口,分别连接不同的数据链路。它通过识别目的 IP 地址的网络号,再根据路由表进行转发,路由表中有匹配的路由条目才会转发,无匹配的路由条目则直接丢弃。路由条目既可以手动设置静态路由,也可以通过路由协议自动生成动态路由。

路由器如何进行三层转发

当一台路由器收到一个数据包时,会执行如下步骤:

  • 对数据包进行解封装
    通过解封装,查看网络层头部信息的目的 IP 地址

  • 在路由表中查找匹配的路由条目
    查找匹配的路由条目,就需要将数据包的目的 IP 地址与各个路由条目的网段地址先进行二进制与( AND )运算,再将运算结果与路由条目的网段地址进行比较,若一致则该条目与目的 IP 地址相匹配。最后,与所有路由条目完成运算和比较,可得到一条或多条相匹配的路由条目。也可能没有匹配的路由条目,那么丢弃数据包。
    在这里插入图片描述

  • 从多个匹配项中选择掩码最长的路由条目。
    如果路由表中有多条路由条目都匹配数据包的目的 IP 地址,则路由器会选择掩码长度最长的路由条目,这种匹配方式称为最长匹配原则
    例如:10.1.3.10 的网络地址与 10.1.3.0/16 和 10.1.3.0/24 两项都匹配,这时应该选择匹配度最长的 10.1.3.0/24 。
    在这里插入图片描述

  • 将数据包按照相应路由条目进行转发
    路由条目中包含下一跳出接口。当路由器找到相应的路由条目后,它就会根据对应的下一跳和出接口,将数据包从出接口发送数据给下一跳设备。
    在这里插入图片描述

ARP

只要确定了 IP 地址,就可以向这个目标地址发送 IP 数据报文。但是在进行实际通信时,还要知道每个 IP 地址所对应的 MAC 地址。

地址解析协议,简称 ARP 协议。是根据目的设备的 IP 地址来查询对应 MAC地址的协议。

ARP 的工作原理

当主机 A 向同一个网段内的主机 C 发送数据,但是不知道主机 C 的 MAC地址。
在这里插入图片描述

  1. ARP 请求:主机 A 以主机 C 的 IP 地址为目的 IP 地址,以广播 MAC 地址为目的 MAC 地址,在同网段内发送这个广播报文,这个报文就叫 ARP 请求报文

    二层交换机不查看 IP 地址,根据目的 MAC 地址将报文除接收端口外的所有端口发送。 在这里插入图片描述

  2. ARP响应:主机 C 发现目的 IP 地址是自己的 IP 地址,于是主机 C 以自己 MAC 地址和 IP 地址作为源 MAC 地址和源 IP 地址,以主机 A 的MAC 地址和 IP 地址作为目的 MAC 地址和目的 IP 地址,发送响应报文给主机 A ,这个报文就叫== ARP 响应报文==。其它主机收到主机 A 的 ARP 请求报文,因为目的 IP 地址不是自己的 IP 地址,因此不会进行响应。

    当主机 A 在发送 ARP 广播请求报文时,二层交换机已经有主机 A 的 MAC地址表条目。当收到主机 C 发送的单播 ARP 响应报文时,二层交换机将报文从相应端口发送出去。并将主机 C 的 MAC 地址和对应端口记录到 MAC地址表中。
    在这里插入图片描述

  3. 更新 ARP 缓存表:主机 A 收到 ARP 响应报文后,将主机 C 的 IP 地址和 MAC 地址记录到 ARP 缓存表中。下次再向主机 C 发送数据时,直接将缓存的目的 MAC 地址进行封装。 在这里插入图片描述

当主机 A 向不同网段的主机 C 发送数据,但是不知道主机 C 的 MAC 地址。
在这里插入图片描述

  1. 主机 A 使用主机 C 的 IP 地址查询 ARP ,ARP 发现主机 C 不在同一个网段,需要通过默认网关(即默认路由的下一跳地址),但是没有网关 MAC地址;
    在这里插入图片描述

  2. 主机 A 先将发送给主机 C 的数据放入缓存中,然后发送 ARP 请求报文,主机 A 以网关 IP 地址为目的 IP 地址发送== ARP 广播请求报文==;
    在这里插入图片描述

  3. 路由器收到 ARP 广播请求报文后,将主机 A 的 MAC 地址和对应端口添加到自己的 MAC 表中,然后查看目的 IP 地址发现是请求自己的 MAC 地址,于是单播发送== ARP 响应报文==;
    在这里插入图片描述

  4. 主机 A 收到 ARP 响应报文后,将发送给主机 C 的数据封装网关 MAC 地址为目的 MAC 地址进行发送;
    在这里插入图片描述

  5. 路由器收到报文后,查看目的 IP 地址,是发送给主机 C 的,于是查询路由表从相应端口发送数据。由于没有主机 C 的 MAC 地址,路由器发送 ARP请求报文,源 MAC 地址和源 IP 地址替换为发送端口的MAC 地址和 IP 地址;
    在这里插入图片描述

  6. 主机 C 收到 ARP 请求报文后,添加路由器的端口和 MAC 地址到 MAC 地址表,单播发送 ARP 响应报文
    在这里插入图片描述
    7.路由器收到主机 C 的 MAC 地址后,将其添加到 MAC 地址表中。将主机 A发送给主机 C 的报文重新封装,以自己的 MAC 地址为源 MAC 地址,以主机 C 的 MAC 地址为目的 MAC 地址,发送给主机 C ;
    在这里插入图片描述

  7. 主机 C 收到主机 A 发送的数据,发送过程结束。

  8. 当主机 C 向主机 A 发送回复报文时,同主机 A 向主机 C 发送数据的步骤一致。

ARP 代理

如果 ARP 请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理 ARP 功能的设备就可以回答该请求,这个过程称作代理 ARP

代理 ARP 功能屏蔽了分离的物理网络,让用户使用起来,跟在同一个物理网络上一样。

免费 ARP

免费 ARP 是一种特殊的 ARP 请求,它并非通过 IP 找到对应的 MAC 地址,而是当主机启动的时候,发送一个免费 ARP 请求,即请求自己的 IP 地址的 MAC 地址。

与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其它主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP地址是自己的 IP 地址
在这里插入图片描述
免费 ARP 的作用:

  • 起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其它主机自己的 IP 地址和 MAC 地址。
  • 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
  • 可用于更新其它主机的 ARP 缓存表。如果该主机更换了网卡,而其它主机的ARP 缓存表仍然保留着原来的 MAC 地址。这时,通过免费的 ARP 数据包,更新其它主机的 ARP 缓存表。

ICMP

IP 提供尽力而为的服务,指为了把数据包发送到目的地址尽最大努力。它并不做对端目的主机是否收到数据包的验证,无法保证服务质量。

==ICMP(互联网控制消息协议)==是提供这类功能的一种协议。ICMP 的主要功能包括,确认 IP 包是否成功送达目的地址,通知发送过程中 IP 包被丢弃的原因。

ICMP 报文像 TCP/UDP 一样通过 IP 进行传输,但是 ICMP 的功能不是传输层的补充,应该把它当做网络层协议。

ICMP 头部封装字段如下图。
ICMP 头部
通过类型字段编码字段的取值判断这个 ICMP 消息的类型。常见的 ICMP消息所对应的类型和编码值如下图。
ICMP类型和编码值
从功能上,ICMP 的消息分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息
ICMP消息类型

ping

我们常用的 ping 工具就是通过 ICMP 消息测试网络层连通性的。源主机发出Echo request 消息,目的主机回应 Echo repl y 消息,则两台主机间的网络层通信正常。也可以通过 ping 命令来判断目标主机是否启用。
ping

IPv4 头部

IP 提供最简单的服务:实现从源到目的的数据转发。不会在传输数据前先与接收方建立连接,也不保证传输的可靠性,它只提供尽力而为的服务。

IP 通信时传输的是== IP 报文==, IP 报文由 IP 头部和数据两部分组成。 IP 头部包含控制报文转发的必要信息。通过 IP 头部的结构,可以对 IP 的功能有一个详细的了解。
在这里插入图片描述

什么是字节?什么是比特?

比特,英文名 bit ,也叫位。二进制中最小单位,一个比特的值要么是 0 要么是 1 。

字节,英文名 By te 。一个字节由八个比特构成。

  • 版本( Ver sion )
    字段长度为 4 比特,表示 IP 的版本号。IPv4 的版本号是 4 ,所以这个字段的值也是 4 。常见的版本号有 IPv4 和 IPv6 。

  • 头部长度( IHL:Internet Header Length )
    字段长度为 4 比特,表示 IP 头部大小,单位是 4 字节( 32 比特)。没有可选项的 IP 包,头部长度为 5 ,即 20 字节( 4 × 5 = 20 )。

  • 区分服务( TOS:Type Of Service )
    字段长度为 8 比特,用来说明数据是要加速传输还是精确传输,以及数据在传输过程中是否遇到了拥塞。

  • 总长度( Total Length )
    字段长度为 16 比特,表示 IP 头部和数据加起来的总字节数。 IP 包的最大长度为 65535 字节。

  • 标识( ID:Identifi cation )
    字段长度为 16 比特,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个 IP 包,它的值也逐渐递增。另外,即使 ID相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。

  • 标志( Flags )
    字段长度为 3 比特,表示分片信息。每比特的具体含义如下表。

    比特位含义
    0未使用。现在必须是0
    1表示是否进行分片 0 - 可以分片 1 - 不能分片
    2被分片时,表示是否为最后一个包 0 - 最后一个分片的包 1 - 分片中断的包
  • 分片偏移( FO:Fragment Off set )
    字段长度为 13 比特,表示分片在整个数据包中的位置。作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包。

  • 生存时间( TTL:Time To Li ve )
    字段长度为 8 比特,表示数据包可以经过的中转路由器数量。每经过一个路由器, TTL 会减少 1 ,直到变成 0 则丢弃改包,避免数据包在网络中无限传递。

  • 协议( Protocol )
    字段长度为 8 比特,表示 IP 上一层所使用的协议。常见的 IP 上层协议有TCP 和 UDP 。
    协议

  • 头部校验和( Header Checksum )
    字段长度为 16 比特,用来校验数据包的头部是否被破坏。设备会丢弃校验失败的数据包。 IPv6 以取消头部校验和字段,通过上层的 TCP 或 UDP 校验协议是否正确。

  • 源地址( Sour ce Address )
    字段长度为 32 比特( 4 字节),表示发送端 IP 地址。

  • 目的地址( Des tination Address )
    字段长度为 32 比特( 4 字节),表示接收端 IP 地址。

  • 可选项( Options )
    这个字段很少使用,在 IPv6 协议中已经取消。

  • 填充( Padding )
    在有可选项的情况下, 头部长度不是 32 比特的整数倍时,通过向字段填充0 ,调整为 32 比特的整数倍。

  • 数据( Data )
    IP 数据字段,用于存放数据。把 IP 上一层协议的头部也作为数据进行处理。

路由协议

路由协议

路由的概念

在 TCP/IP 通信中,网络层的作用是实现终端的点对点通信。IP 协议通过 IP地址将数据包发送给目的主机,能够让互联网上任何两台主机进行通信。IP 地址可以识别主机和路由器,路由器可以把全世界的网络连接起来。
在这里插入图片描述

什么是路由器

路由器可以连接多个网络。它有多个端口,分别连接不同的网络区域。通过识别目的 IP 地址的网络号,再根据路由表进行数据转发。路由器会维护一张路由表,通过路由表的信息,路由器才能正确的转发 IP 报文。
路由器表

什么是路由

路由是网络设备根据 IP 地址对数据进行转发的操作。当路由器收到一个数据包时,它根据数据包的目的 IP 地址查询路由表,如果有匹配的路由条目,就根据查询结果将数据包转发出去,如果没有任何匹配的路由条目,则将数据包丢弃,这个过程就是 IP 路由。除了路由器,三层交换机、防火墙、负载均衡设备甚至主机等设备都可以进行路由操作,只要这个设备支持路由功能
路由

什么是路由表

为了将数据包发给目的节点,所有节点都维护着一张路由表。==路由表是路由器通过各种途径获得的路由条目,每一个条目包含的网段地址 / 子网掩码、路由协议,出接口、下一跳 IP 地址、路由优先级和度量值等信息。==路由表记录 IP 包在下一跳应该发给哪个路由器。 IP 包根据路由表在各个数据链路上传输。
路由表

路由表来源

一个实际的网络中,一台路由器通常包含多条路由条目,这些路由条目从不同的来源获取。路由表的来源可分为三类,分别是直连路由静态路由动态路由

  • 直连路由:路由器直接连接的路由条目,只要路由器接口配置了 IP 地址,接口状态正常,就会自动生成对应的直连路由。
    直连路由
  • 静态路由:通过命令手动添加的路由条目就是静态路由。
    静态路由
  • 动态路由:通过路由协议从相邻路由器动态学习到的路由条目。
    动态路由

路由优先级

不同来源的路由有不同的优先级,优先级的值越小,则路由的优先级就越高。当存在多条目的网段相同,但来源不同的路由时,具有最高优先级的路由成为最优路由,将被加入到路由表中,而其它路由则处于未激活状态,不显示在路由表中。

路由协议的默认优先级如下:
路由优先级

路由环路

路由环路是数据转发形成死循环,不能正确到达目的地。
路由环路
路由环路的主要生成原因是配置错误的路由网络规划错误导致。比如:在两台路由器上配置到相同目的地址的路由表项,下一跳互相指向对方,就会造成路由环路。另外某些动态路由协议配置不当,也有可能产生环路。

黑洞路由

一条路由条目,无论是静态的还是动态的,都需要关联到一个出接口,出接口指的是设备要到达目的网络是的出站接口。路由的出接口可以是这个设备的物理接口,如千兆网口,也可以是逻辑接口,如 VLAN 接口,或者是隧道接口等。其中有一种接口非常特殊,那就是 Null 接口,只有一个编号,那就是 0 。Null0 是一个系统保留的逻辑接口,当网络设备在转发数据包时,如果使用出接口 Null0 的路由,那么数据包将被丢弃,就像被扔进了一个黑洞里,因此出接口为 Null0 的路由条目又被称为黑洞路由
黑洞路由
黑洞路由是一种非常有用的路由条目,适用于如下场景:

  • 在网络使用中,按需将数据包指向黑洞路由,实现流量过滤。
  • 在已经部署路由汇总的网络中,用于防止数据转发出现环路。
  • 在部署了 NAT 的网络中,用于防止数据转发出现环路。
  • 在 BGP 网络中,用于发布特定网段的路由。

动态路由协议

静态路由是手动添加完成的。如果有 100 个网段,一个路由器就需要设置将近100 条路由信息。网络使用过程中,不可避免的出现网段新增、删除、修改等情况,这些更新的路由信息需要在所有路由器上进行设置。还有一个不可忽视的问题,一旦某个路由器出现故障,数据传输无法自动绕过故障节点,只能通过手动设置才能恢复正常。
静态路由
如果是使用动态路由,提前设置好路由协议,路由器之间会定期交换路由信息,路由器会知道网络中其它网段的信息,动态生成路由表。如果网络出现变化,网段需要增删改时,只需要在相应的路由器上配置动态路由即可。不需要像静态路由那样,在所有路由器上进行修改。对于大型网络,路由器个数较多时,主要使用动态路由协议。
动态路由
即使网络上的节点出现故障,只要有一个可绕行的其它路径,那么路由器的路由表会自动重新设置,数据包也会自动选择这个路径。

采用路由协议后,网络拓扑结果变化的响应速度会大大提升。无论网络正常的增删改,还是异常的网络故障,相邻的路由器都会检测到变化,会把拓扑的变化通知网络中其它的路由器,使它们的路由表产生相应的变化。这个过程比手动对路由表的修改要快很多,也准确很多。

对于少于 10 个路由器的小型网络,静态路由或许已经能够满足需求,但是在大中型网络中,通常会使用动态路由协议,或者动态路由与静态路由协议相结合的方式来建设这个网络

动态路由协议基本原理

路由器之间需要运行相同的路由协议,才能相互交换路由信息。每种路由协议都有自己的语言,即相应的路由协议报文。如果两台路由器启动了相同的路由协议,那么就有了相互通信的基础不同的路由协议,有相同的目的,就是计算和维护路由表。通常工作过程包含 4 个阶段:

  • 邻居发现阶段:运行了路由协议后,路由器会主动把自己的网段信息发送给相邻的路由器。既可以使用广播发送路由协议消息,也可以单播将路由协议消息发送给指定的邻居路由器
  • 交换路由信息阶段:发现邻居后,每台路由器都将自己的路由信息发送给相邻的路由器,相邻路由器又发送给下一个相邻的路由器。经过一段时间后,每台路由器都会收到网络中所有的路由信息。
  • 计算路由阶段:每一台路由器都会运行某种算法,计算出最终的路由表来。
  • 维护路由阶段:为了感知突然发送的网络故障,比如:设备故障或线路中断等,路由协议规定相邻两台路由器之间,应该周期性发送协议报文。如果路由器在一段时间内,没收到邻居发来的协议报文,就认为邻居路由器失效。
    动态路由原理

自治系统

随着 IP 网络的发展,网络规模已经很大了,无论哪种路由协议都不能完成全网的路由计算,因此网络分成了很多个自治系统( AS , Autonomous System)路由选择域 ( Routing Domain )。自治系统可以制定自己的路由策略,并管理自治系统内进行具体路由控制的路由器集合。

每个自治系统都有一个唯一的自治系统编号,它的基本思路是希望通过不同的编号来区分不同的自治系统。通过路由协议和自治系统编号,路由器可以确定路由路径和路由信息的交换方式。某个自治系统缺乏足够的安全机制,就可以利用编号改变路径回避它。

自治系统的编号范围是 1 ~ 65535 ,其中 1 ~ 64511 是注册的因特网编号, 64512 ~ 65535 是专用网络编号。

自治系统

EGP 和 IGP

自治系统(路由选择域)内部动态路由使用的协议是域内路由协议,即== IGP== 。而自治系统之间的路由控制使用的是域间路由协议,即 EGP

IGP 和 EGP 的关系,跟 IP 地址网络号和主机号的关系类似。根据 IP 地址的网络号在网络中进行路由选择,根据主机号在网段内部进行主机识别一样。既可以根据 EGP 在区域网络之间进行路由选择,也可以根据 IGP 在区域网络内部进行主机识别

路由协议被分为 EGP 和 IGP 两个层次。没有 EGP 就不可能有世界上各个不同机构网络之间的通信,没有 IGP 机构内部也就不可能进行通信。

IGP 是指在同一个自治系统内交换路由信息的路由协议。RIPRIP2OSPF 属于 IGP 。IGP 的主要目的是发现和计算自治系统内的路由信息。

EGP 与 IGP 不同,EGP 用于连接不同的自治系统,并在不同自治系统间交换路由信息。EGP 的主要目的是使用路由策略和路由过滤等手段,控制路由信息在自治系统间的传播。BGP 属于 EGP

动态路由协议类型

按照路由的算法和路由信息的交换方式,路由协议可以分为距离矢量(Di stance-Vec tor ,D-V )路由协议和链路状态( Link-State )路由协议。其中典型的距离矢量协议是 RIP ,典型的链路状态协议是 OSPF

距离矢量路由协议

距离矢量路由协议指的是基于距离矢量的路由协议,RIP 是最具代表性的距离矢量路由协议。距离矢量这个概念包含两个关键的信息:距离和方向,其中距离是指到达目的网络的度量值(即所要经过路由器的个数),而方向指的是到达目的网络的下一跳设备。
距离矢量路由协议
每一台运行距离矢量路由协议的路由器会周期性的将自己的路由表通告出去,相邻的路由器收到路由信息并更新自己的路由表,再继续向其它直连的路由器通告路由信息,最终网络中的每台路由器都能知道各个网段的路由,这个过程称为路由的泛洪过程。
在这里插入图片描述
路由器之间互换目的网络的方向和距离的信息,并以这些信息更新路由表。这种方法在处理上比较简单,不过由于只有距离和方向的信息,所以当网络构造变得复杂时,在获得稳定的路由信息之前需要消耗一定时间(即路由收敛时间长),也极易发生路由循环等问题。

链路状态路由协议

运行链路状态路由协议的路由器会使用一些特殊的信息描述网络的拓扑结构和IP 网段,这些信息被称为链路状态信息( LSA ),所有路由器都会产生自己直连接口的链路状态信息。
链路状态路由协议
路由器将网络中泛洪的链路状态信息搜集起来,存入一个数据库中,这个数据库就是 LSDB (链路状态数据库),LSDB 是对整个网络的拓扑结构及 IP 网段的描述,路由器拥有相同的 LSDB 。对于任何一台路由器,网络拓扑都完全一样。
LSDB
接下来所有的路由器都基于 LSDB 使用最短路由优先算法进行计算,得到一棵已自己为根的、无环路的最短路径树,并将得到的路由加载到路由表中。
LSDB 算法
链路状态算法使用增量更新机制,只有当链路的状态发生变化时,才发送路由更新信息。

相比距离矢量路由协议,链路状态路由协议具有更大的扩展性和更快的收敛速度,但是它的算法消耗更多的内存和 CPU 处理能力。

路由协议的性能指标

不同的路由协议,有不同的特点。各个路由协议的性能指标体现如下:

  • 协议计算的正确性:是指路由协议的算法会不会产生错误的路由导致网络环路。不同的路由协议使用的算法不同,因此路由正确性也不相同。链路状态路由协议(如 OSPF )在算法上杜绝了产生路由环路的可能性,比距离矢量路由协议更优。
  • 路由收敛速度:路由收敛是指全网路由器的路由表达到一致状态。收敛速度快,意味着网络拓扑结构发生变化时,路由器能够更快的感知,并及时更新相应的路由信息。OSPF 、BGP 等协议的收敛速度快于 RIP 。
  • 协议所占的系统开销::路由器在运行路由协议时,需要消耗的系统资源,比如:CPU 、内存等。工作原理的不同,各个路由协议对系统资源的需求也不同。OSPF 路由技术的系统开销要大于 RIP 协议。
  • 协议自身的安全性:是指协议设计时,有没有考虑防止网络攻击。OSPF 、RIPv2 有相应的防止攻击的认证方法,而 RIPv1 没有。
  • 协议适用网络规模:不同路由协议所适用的网络规模、拓扑结构不同。RIP 协议有 16 跳的限制,所以只能应用在较小规模的网络中;而 OSPF 可以应用在几百台路由器的大规模网络中;BGP 能够管理全世界所有的路由器,其所管理的网络规模大小只受系统资源的限制。

主要路由协议

各种路由协议都需要使用 IP 来进行报文封装,但其细节有所不同。

RIP 协议是最早的路由协议,是为小型网络中提供简单易用的动态路由。RIP协议报文采用 UDP 封装,端口号是 520 。由于 UDP 是不可靠的传输层协议,所以 RIP 协议需要周期性的广播协议报文来确保邻居收到路由信息。

OSPF 是目前应用最广泛的路由协议,可为大中型网络提供分层的、可靠的路由服务。OSFP 直接采用 IP 进行封装,所有协议报文都由 IP 封装后进行传输,协议号是 89 。IP 是尽力而为的网络层协议,本身是不可靠的,所以为了保证传输的可靠性,OSPF 采用了复杂的确认机制来保证传输可靠。

BGP 采用 TCP 来保证协议传输的可靠性,TCP 端口号是 179 。BGP 不需要自己设计可靠传输机制,降低了协议报文的复杂度和开销。

路由协议
几种主要的路由协议表如下:
路由协议表

传输层

初识传输层

传输层的作用是建立应用程序间的端到端连接,为数据传输提供可靠或不可靠的通信服务。传输层有两个重要协议,分别是 TCP 和 UDP。TCP是面向连接的可靠传输协议UDP 是无连接的不可靠传输协议
传输层
一个 IP 地址可以标识一台主机,IP 报文头部有一个字段,用来标识上层协议类型。根据这个字段的协议号,来识别 IP 传输的数据是 TCP 还是 UDP 。IP 用协议号 6 标识 TCP ,用协议号 17 标识 UDP 。但一台主机可能同时有多个程序,传输层的 TCP 和 UDP ,为了识别上一层的应用程序类型,使用端口号来识别具体的程序,从而使这些程序可以复用网络通道。
传输层协议号
二层的帧通信和三层的包通信都是无连接的、不可靠的通信方式,四层的 TCP却是一种可靠的通信方式。如果帧在传输中丢失,通信双方的二层功能模块发现不了;如果包在传输中丢失,通信双方的三层功能模块发现不了。但是,一个TCP 段丢失了,TCP 模块一定能够发现。一个 TCP 段的丢失,意味着一个IP 包的丢失,因为 TCP 段是封装在 IP 包里的;同理,一个 IP 包的丢失,意味着一个帧的丢失。因此,二层和三层通信的不可靠性在 TCP 这里得到补充
TCP传输
应用程序其实就是 TCP/IP 的应用协议,应用协议大多以客户端/服务端的形式运行。客户端( Client ,使用服务的一方。)是请求的发起端。而服务端(Server ,提供服务的程序或主机。)则是请求的处理端。作为服务端的程序有必要提前启动,随时准备接收客户端的请求。否则即使有客户端的请求发过来,也无法进行处理。
客户端/服务端
确认一个请求究竟是发给哪一个服务端,可以通过收到数据包的目的端口号轻松识别。当收到 TCP 的建立连接请求时,如果目的端口号是 22 ,则转给SSH ,如果是 80 则转给 HTTP 。

TCP

TCP 是面向连接的、可靠的流协议。流就是不间断的数据,当应用程序采用TCP 发送消息时,虽然是按顺序发送,但接收端收到是没有间隔的数据流。比如,在发送端应用程序发送了 10 次 100 字节的数据,那么在接收端,应用程序可能会收到一个 1000 字节连续不间断的数据。
TCP
TCP 为提供可靠性传输,实行顺序控制、重发控制机制。此外还有流量控制、拥塞控制、提高网络利用率等众多功能。

UDP

UDP 是不具有可靠性的协议,可靠性功能交给上层的应用去完成。UDP 虽然可以确保发送数据的大小,比如:发送端应用程序发送一个 100 字节的消息,那么接收端应用程序也会以 100 字节为长度接收数据。但不能保证数据一定会到达。因此,应用有时会根据需要进行重发处理。

TCP 和 UDP 的区别

其实不然,TCP是面向连接的,并且具备顺序控制、重发控制等机制,可以为应用提供可靠传输。而 UDP主要用于对高速传输和实时性有较高要求的通信。比如:通过 IP 电话进行通话。如果使用 TCP ,数据如果丢失会重发,这样就无法流畅地传输通话的声音,导致无法进行正常交流。而采用 UDP ,它不会进行重发处理。也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只会影响小部分的通话。因此,TCP 和 UDP 需要根据应用的目的选择使用

端口号

数据链路层和网络层的地址,分别是 MAC 地址和 IP 地址。MAC 地址用来标识同一网段中不同的设备,IP 地址标识网络中的主机或路由器。传输层的地址就是端口号,端口号用来识别同一台主机中不同的应用程序,也被称为程序地址

一台主机可以同时运行多个程序,比如 www 服务的 Web 浏览器、电子邮箱客户端等程序都可同时运行。传输层协议正是利用这些端口号,识别主机正在进行通信的应用程序,并准确的传输数据。
端口号
仅仅通过目的端口来识别某一个通信是不准确的。两台主机访问的目的端口号80 相同,可以根据源端口号区分这两个通信。

目的端口号和源端口号相同,但是两台主机的源 IP地址不同;IP 地址和端口号都一样,只是协议号不同。这些情况,都会认为是两个不同的通信。

因此,网络通信中通常采用 5 个信息来识别一个通信。它们是源 IP 地址目的 IP 地址协议号源端口号目的端口号。只要其中一项不同,就会认为是不同的通信。
通信识别
TCP/UDP 的端口号是一个 16 位二进制数,端口号范围为 0 ~ 65535 。在实际进行通信时,要事先确定端口号。确定端口号的方法分为两种:

  • 标准端口号
    这种方法也叫静态方法。它是指每个应用程序都有指定的端口号。HTTP 、SSH 、FTP 等常用的应用程序所使用的端口号是固定的,这些端口号又称为知名端口号。知名端口号范围是 0 ~ 1023 。
    除了知名端口号外,还有一些端口号也被正式注册,称为注册端口。它们分布在 1024 ~ 49151 之间。

  • 时序分配法
    这种方法也叫动态分配法。服务端有必要确定监听的端口号,但是接受服务的客户端不需要确定端口号

    客户端应用程序不用设置端口号,由操作系统进行分配。操作系统可以为每个应用程序分配不冲突的端口号。比如:每需要一个新的端口号时,就在之前分配号码的基础上加 1 。这样,操作系统就可以动态管理端口号了。

    动态分配的端口号范围是 49152 ~ 65535 之间。

UDP

UDP ,全称 User Datagram Protocol 。UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的、不可靠的通信服务。并且它是将应用程序发来的数据,在收到的那一刻,立即按照原样发送到网络上的一种机制。

即使在网络出现拥堵的情况下,UDP 也无法进行流量控制。传输途中出现丢包,UDP 也不负责重发。当出现包的到达顺序错误时也没有纠正的功能。如果需要这些细节控制,那么需要交由上层的应用程序去处理。也可以说,是损失信息传输的可靠性来提升信息传输的效率

UDP 的特点如下:

  • UDP 是无连接的:UDP 发送数据前不与对方建立连接。
  • UDP 不对数据进行排序:UDP 报文的头部没有数据顺序的信息。
  • UDP 对数据不发送确认,发送端不知道数据是否被正确接收,也不会重发数据。
  • UDP 传送数据比 TCP 快,系统开销也少。
  • UDP 缺乏拥塞控制机制,不能够检测到网络拥塞。

由于 UDP 面向无连接,它可以随时发送数据。再加上 UDP 本身的处理既简单又高效,因此常用于以下几个方面:

  • 包总量较少的通信( DNS 、SNMP 等)
  • 视频、音频等多媒体通信(即时通信)
  • 只在局域网使用的应用通信
  • 广播通信(广播、多播)

TCP

TCP 是对传输、发送、通信进行控制的协议。主要特点如下:

  • 三次握手建立连接:确保连接建立的可靠性。
  • 端口号:通过端口号识别上层协议和服务,实现网络的多路复用。
  • 完整性校验:通过计算校验和,保证接收端能检测出传输过程中可能出现的错误。
  • 确认机制:对于正确收到的数据,接收端通过确认应答告知发送方,超出一定时间后,发送方将重传没有被确认的段,确保传输的可靠性。
  • 序列号:发送的数据都有唯一的序列号,标识了每一个段。接收端可以利用序列号实现丢失检测、乱序重排等功能。
  • 窗口机制:通过可调节的窗口,TCP 接收端可以告知希望的发送速度,控制数据流量。

TCP 实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序错误的分包进行顺序控制。作为一种面向有连接的协议,只有在确定对端存在时,才会发送数据,从而可以控制通信流量的浪费。由于 UDP 没有连接控制,即使对端不存在或中途退出网络,数据包还是能够发送出去。

  • 连接
    连接是指网络中进行通信的两个应用程序,为了相互传递消息而专有的、虚拟的通信线路,也叫做虚拟电路

    一旦建立了连接,进行通信的应用程序只使用这个虚拟线路发送和接收数据,就可以保障信息的传输。应用程序可以不用考虑 IP 网络上可能发生的各种问题,依然可以转发数据。TCP 则负责连接的建立、断开、保持等管理工作。
    连接
    为了在不可靠的 IP 通信实现可靠性传输,需要考虑很多事情,数据的破坏、丢包、重复以及分片顺序混乱等问题。TCP 通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输

序列号和确认应答

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到的消息。这个消息叫做确认应答( ACK )
确认应答
TCP 通过确认应答实现可靠的数据传输。当发送端将数据发出后,会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。否则,数据可能已经丢失。

在一定时间内没有等到确认应答,发送端会认为数据已经丢失,并进行重发。这样,即使有丢包,仍能保证数据到达对端,实现可靠传输。
重发间隔
未收到确认应答,不一定是数据丢失。也可能对端已经收到数据,返回的确认应答在途中丢失,也会导致发送端重发。此外,也可能确认应答延迟到达,发送端重发数据后才收到。
重发间隔
每一次传输数据时,TCP 都会标明段的起始序列号,以便对方确认。在 TCP中并不直接确认收到哪些段,而是通知发送方下一次应该发送哪一个段,表示前面的段已经收到。比如:收到的确认应答序列号是 N + 1 时,表示 N 以及 N之前的数据都收到了。
序列号
由于每一个段都有唯一的编号,这样的话,当接收端收到重复的段时容易发现,数据段丢失后也容易定位,乱序后也可以重新排列。

超时重发

超时重发是指在重发数据之前,等待确认应答到来的那个间隔时间。如果超过RTT(往返时间),仍未收到确认应答,发送端将进行数据重发。
超时重发
数据被重发后,若还收不到确认应答,则再次发送。这时,等待确认应答的时间将会以 2 倍、4 倍的指数函数增长。数据也不会无限地重发,达到一定的重发次数后,还没收到确认应答,就会认为网络或对端主机发送异常,强制关闭连接,并通知应用通信异常强行终止。

RTT 时间是一个非常重要的参数。过大的 RTT 会导致 TCP 重传非常慢,降低传输的速度;过小的 RTT 会导致 TCP 频繁重传,降低资源的使用效率。在实际情况下,通过实时跟踪数据往返的时间间隔来动态调整 RTT 的数值。

连接管理

TCP 提供面向有连接的通信传输,面向有连接是指在数据通信前做好通信两端的准备工作。在数据通信前,发送一个 SYN 包作为建立连接的请求。如果对端发来确认应答,则认为可以开始数据通信。如果对端的确认应答未能到达,就不会进行数据通信。在通信结束时,会使用 FIN 包进行断开连接的处理。

SYN 包和 FIN 包是通过 TCP 头部的控制字段来管理 TCP 连接。一个连接的建立与断开,正常过程至少需要来回发送 7 个包才能完成建立一个 TCP连接需要发送 3 个包,这个过程叫作三次握手断开一个 TCP 连接需要发送4 个包,这个过程也称作四次挥手。创建一个 TCP 连接,会产生一个 32 位随机序列号,因为每一个新的连接使用一个新的随机序列号
三次握手 四次挥手

三次握手

主机 A 想向主机 B 发送数据,TCP 模块通过三次握手建立连接 TCP 会话。

三次握手,是指 TCP 会话建立过程中共交换了 3 个 TCP 控制段,它们分布是 SYN 段、SYN + ACK 段、ACK 段。详细过程如下:
三次握手

  1. 发送端主机 A 向接收端主机 B 发出 SYN 段,表示发起建立连接请求,同时把自己的状态告诉主机 B 。将段的序列号设为 a ,SYN 置位,表示 SYN管理段。
  2. 主机 B 收到连接请求后,回应 SYN + ACK 段,将序列号设为 b ,确认号设为 a + 1 ,同时将 SYN 和 ACK 置位。
  3. 主机 A 收到主机 B 的连接确认后,发送 ACK 段再次进行确认,确认会话的建立,将 ACK 置位。主机 A 收到确认号是 a + 1 、序列号是 b 的段后,发送序列号为 a + 1 、确认号为 b + 1 的段进行确认。
  4. 主机 B 收到确认报文后,连接建立。双方可以开始传输数据。

经过 3 次握手后,A 和 B 之间其实是建立了两个 TCP 会话一个是从 A 指向 B 的 TCP 会话,另一个是从 B 指向 A 的 TCP 会话。A 发送的 SYN段,表示 A 请求建立一个从 A 指向 B 的 TCP 会话,目的是控制数据能够正常、可靠的从 A 传输到 B 。B 在收到 SYN 段后,会发送一个 SYN +ACK 段作为回应。SYN + ACK 的含义是:B 一方面同意了 A 的请求,另一方面也请求建立一个从 B 指向 A 的 TCP 会话,这个会话目的是控制数据能够正确、可靠的从 B 传输到 A 。A 收到 SYN + ACK 段后,回应一个 ACK,表示同意 B 的请求。

四次挥手

当 TCP 数据段的传输结束时,双方都需要发送 FIN 段和 ACK 段来终止TCP 会话。这个方式叫做四次挥手,详细过程如下:
四次挥手

  1. 主机 A 想要终止连接,发送序列号为 p 的段,FIN 置位,表示 FIN 管理段。
  2. 主机 B 收到主机 A 发送的 FIN 段后,发送 ACK 段,确认号为 p + 1 ,同时关闭连接。
  3. 主机 B 发送序列号为 q的段,FIN 置位,通知连接关闭。
  4. 主机 A 收到主机 B 发送的 FIN 段后,发送 ACK 段,确认号为 q + 1 ,同时关闭连接。TCP 连接至此结束。

TCP 会话的终止分为两个部分。首先 A 发送 FIN 控制段,请求终止从 A 到 B 的 TCP 会话。B 回应 ACK 段,表示同意 A 的终止会话请求。A 收到 B的 ACK 段后,才开始终止这个会话。同理,B 也会向 A 发起请求,终止从 B到 A 的 TCP 会话。

单位段

经过传输层协议封装后的数据称为段。在建立 TCP 连接时,可以确定数据段的大小,也就是最大消息长度( MSS )。TCP 在传输大量数据时,是以 MSS的大小将数据进行分割发送,重发也是以 MSS 为单位。
单位段
MSS 是在三次握手时,由两端主机计算出来的。两端主机在发出建立连接的请求时,会在 TCP 头部写入 MSS 值。然后在两者间选择较小的值使用。MSS默认值为 536 字节,理想值是 1460 字节,加上 IP 头部 20 字节和 TCP头部 20字节,刚好在 IP 层不会被分片。
MSS

窗口控制

TCP 是以 1 个段为单位,每发一个段进行一次确认应答。如果包的往返时间越长,通信性能就越低。

为解决这个问题,TCP 引入了窗口的概念。确认应答不再是每个分段,而是以窗口的大小进行确认,转发时间被大幅度的缩短窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值。窗口大小是一个 16 位字段,因此窗口最大是 65535 字节。在 TCP 传输过程中,双方通过交换窗口的大小来表示自己剩余的缓冲区( Buffer )空间,以及下一次能够接受的最大数据量,避免缓冲区的溢出
窗口控制
发送数据中,窗口内的数据即使没有收到确认应答也可以发送出去。如果窗口中的数据在传输中丢失,也需要进行重发。因此,发送端主机在收到确认应答前,必须在缓冲区保留这部分数据。

收到确认应答后,将窗口滑动到确认应答中的序列号位置。这样可以按顺序将多个段同时发送,这种机制也被称为滑动窗口控制

滑动窗口控制

窗口控制和重发控制

在使用窗口控制时,如果出现确认应答未能返回的情况,数据已经到达对端,是不需要再进行重发的。然而,在没有使用窗口控制时,没收到确认应答的数据是会重发的。而使用了窗口控制,某些确认应答即使丢失也无需重发。
窗口控制
如果某个报文段丢失,接收主机收到序号不连续的数据时,会为已经收到的数据返回确认应答。即使接收端收到的包序号不是连续的,也不会将数据丢弃,而是暂时保存至缓冲区。出现报文丢失时,同一个序号的确认应答将会被重复发送。如果发送端收到连续 3 次同一个确认应答,就会将对应的数据进行重发。这种机制比超时管理更高效,也被称为高速重发机制
高速重发

流控制

接收端处于高负荷状态时,可能无法处理接收的数据,并丢弃数据,就会触发重发机制,导致网络流量无端浪费。

为了防止这种情况,TCP 提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量,这就是流控制。它的具体操作是,接收端主机通知发送端主机自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。这个限度的大小就是窗口大小。

TCP 头部中有一个字段用来通知窗口大小。接收主机将缓冲区大小放入这个字段发送给接收端。当接收端的缓存不足或处理能力有限时,窗口大小的值会降低一半,从而控制数据发送量。也就是说,发送端主机会根据接收端主机的指示,对发送数据的量进行控制,也就形成了一个完整的 TCP 流控制。

若接收端要求窗口大小为 0 ,表示接收端已经接收全部数据,或者接收端应用程序没有时间读取数据,要求暂停发送。
流控制
如果窗口更新的报文丢失,可能会导致无法继续通信。为避免这个问题,发送端主机会时不时的发送一个叫窗口探测的数据段,此数据段仅含一个字节以获取最新的窗口大小信息。

拥塞控制

有了 TCP 的窗口控制,收发主机之间不再以一个数据段为单位发送确认应答,也能够连续发送大量数据包。在网络出现拥堵时,如果突然发送一个较大量的数据,有可能会导致整个网络瘫痪。

为了防止这个问题出现,在通信开始时,就会通过一个叫慢启动的算法得出的数值,对发送数据量进行控制。
拥塞控制
为了在发送端调节发送数据的量,需要使用拥塞窗口。在慢启动时,将拥塞窗口的大小设置为 1 MSS 发送数据,之后每收到一次确认应答( ACK ),拥塞窗口的值就加 1 。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小做比较,选择它们当中较小的值发送数据。这样可以有效减少通信开始时连续发包导致网络拥堵,还可以避免网络拥塞的发生。

对比 TCP 和 UDP

TCP和UDP 的差异

UDP 格式

UDP 段由 UDP 头部和 UDP 数据组成。UDP 头部有源端口号、目的端口号、长度、校验和组成,UDP 头部长度为固定的 8 字节。
UDP格式

  • 源端口号:字段长 16 位,表示发送端 UDP 端口号。
  • 目的端口号:字段长 16 位,表示接收端 UDP 端口号。
  • 长度:字段长 16 位,表示 UDP 头部和 UDP 数据的总长度。
  • 校验和:字段长 16 位,是错误检查的字段,包括 UDP 头和 UDP 数据的内容计算得出,用于检查传输过程中出现的错误。

TCP 格式

TCP 头部比 UDP 头部复杂得多,由一个 20 字节的固定长度加上可变长的选项字段组成。
TCP格式

  • 源端口号:字段长 16 位,表示发送端 TCP 端口号。

  • 目的端口号:字段长 16 位,表示接收端 TCP 端口号。

  • 序列号:字段长 32 位,是指 TCP 段数据的位置序号。根据序列号来判断是否存在重收、漏收、乱序等情况。

  • 确认号:字段长 32 位,是指下一次应该收到的数据的序列号。收到这个确认号,表示这个确认号之前的数据都已经正常收到。

  • 数据偏移:字段长 4 位,表示 TCP 数据从哪一位开始计算,也可以看作TCP 头部的长度。

  • 保留:字段长 6 位,保留给以后扩展使用。

  • 控制位:字段长 6 位,每 1 位标志位可以打开一个控制功能,也叫做控制位。从左到右分别是 URG 、ACK 、PSH 、RST 、SYN 、FIN。

    • URG:标志位为 1 时,表示有需要紧急处理的数据。
    • ACK:标志位为 1 时,表示确认应答有效。
    • PSH:标志位为 1 时,表示将数据立即上传给应用程序,而不是在缓冲区排队。
    • RST:标志位为 1 时,表示 TCP 连接出现异常,必须强制断开连接。
    • SYN:标志位为 1 时,表示请求建立连接,并设置序列号的初始值。
    • FIN:标志位为 1 时,表示数据发送结束,请求断开 TCP 连接。
  • 窗口:字段长 16 位,标明滑动窗口的大小,表示自己还能接收多少字节的数据。

  • 校验和:字段长 16 位,是错误检查的字段,包括 TCP 头和 TCP 数据的内容计算得出,用于检查传输过程中出现的错误。

  • 紧急指针:字段长 16 位,表示紧急数据的长度。当 URG 位为 1 时,这个字段才有效。

  • 选项:字段的长度是可变的。通过添加不同的选项,实现 TCP 的一些扩展功能。

  • 填充:如果 TCP 段的头部不是 4 字节的整数倍,就填充一些 0 ,来保证头部长度是 4 字节的整数倍。

  • 数据:TCP 段的数据部分,不是 TCP 头部内容,字段最大是 MSS 。

应用层

TCP/IP 模型的下三层,分别是网络接入层、网络层和传输层。它们都是为应用层服务的,传输应用层的各种数据,现在就来看看最高层的应用层。
应用层
在 TCP/IP 模型中,应用层提供的服务相当于 OSI 模型的应用层、表示层和会话层的服务总和。不仅包含了管理通信连接的会话层功能、数据格式转换的表示层功能,还包括主机间交互的应用层功能。
TCP/IP
==应用层的目的是向应用程序提供网络接口,直接向用户提供服务。==相比于下层的网络协议,应用协议要常见得多,常用的协议有 HTTP 、HTTPS 、SSH、FTP等应用层协议。

TCP/IP 模型中应用层位于传输层之上,传输层的端口号用于标识数据所对应的应用层协议。也就是说,有端口号的协议都是应用层协议。应用协议是终端设备之间的应用通信规则。应用之间交互的信息叫消息,应用协议定义这些消息的格式以及消息的控制或操作的规则。
应用层协议
应用协议的通信方式可分为两类:

  • 服务器和客户端模型
    服务器和客户端模型中,始终公开固定 IP 地址的主机为其它主机的应用程序提供服务,请求服务的主机之间不会互相通信。这些为其它主机提供服务的终端设备称为服务器,那些请求服务的主机则称为客户端。大多数应用层协议,都是这种模型。
    服务器和客户端模型
  • P2P 模型
    在 P2P 模型中,没有特定的服务器或客户端,这些设备上安装的应用程序,可以在主机间建立对等连接,既可以提供服务,也可以接受服务。通常是大流量的应用程序采用 P2P 模型,比如:下载器等。
    P2P 模型

NAT

初始 NAT

IP 地址分为公网地址私有地址。公网地址有 IANA 统一分配,用于连接互联网;私有地址可以自由分配,用于私有网络内部通信。
公网IP 和 私网IP
NAT 技术是将私有地址转换成公网地址,使私有网络中的主机可以通过少量公网地址访问互联网。

NAT 技术

IP 地址中预留了 3 个私有地址网段,在私有网络内,可以任意使用。
3个私有地址
其余的 IP 地址可以在互联网上使用,由 IANA 统一管理,称为公网地址
公网地址
NAT 解决了 IPv4 地址不够用的问题,另外 NAT 屏蔽了私网用户真实地址,提高了私网用户的安全性。

典型的 NAT 组网 模型,网络通常是被划分为私网和公网两部分,各自使用独立的地址空间。私网使用私有地址 10.0.0.0/24 ,而公网使用公网地址。为了让主机 A 和 B 访问互联网上的服务器 Server ,需要在网络边界部署一台 NAT设备用于执行地址转换。NAT 设备通常是路由器防火墙
NAT 组网

基本 NAT

基本 NAT 是最简单的一种地址转换方式,它只对数据包的 IP 层参数进行转换,它可分为静态 NAT动态 NAT

静态 NAT 是公网 IP 地址和私有 IP 地址有一对一的关系,一个公网 IP 地址对应一个私有 IP 地址,建立和维护一张静态地址映射表。

动态 NAT 是公网 IP 地址和私有 IP 地址有一对多的关系,同一个公网 IP 地址分配给不同的私网用户使用,使用时间必须错开。它包含一个公有 IP 地址池和一张动态地址映射表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

F280049C General-Purpose Input/Out(GPIO)

​ 文章目录GPIO8.1 简介8.2 配置概述8.3 ADC引脚上的数字输入(AIO)8.4 数字通用I/O控制8.5 输入限定8.5.1 异步输入8.5.2 仅与SYSCLKOUT同步8.5.3 使用采样窗口进行鉴定8.6 SPI信号8.7GPIO和外设引脚复用8.7.1GPIO复用8.7.2 外设复用8.8 内部上拉配置要…

基础架构:一条SQL查询语句是如何执行的?

这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表…

DML语句

DML语句目录概述需求:设计思路实现思路分析1.SQL 实例2.UPDATE3.DELETE4.SELECT5.是TRUNCATE参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wai…

数字DNA盗窃可能会在2023年到来

攻击者总是在不断发展并寻找访问数字系统的方法。随着人工智能的使用越来越多,量子计算有望很快成为现实,网络威胁格局的变化比以往任何时候都快。 当谈到网络安全时,我们应该始终尝试着眼于即将发生的事情以及它将产生的影响。我们不能只是…

操作系统实验7:终端设备字符显示的控制

实验目的 加深对操作系统设备管理基本原理的认识,实践键盘中断、扫描码等概念;通过实践掌握Linux 0.11对键盘终端和显示器终端的处理过程。 实验内容 本实验的基本内容是修改Linux 0.11的终端设备处理代码,对键盘输入和字符显示进行非常规…

2022-我的年终总结

去年年末,我也写了一篇年终总结。去年这一年是极度繁忙的一年,因各种原因,过年没回家,一个人在宿舍度过了凄凉的春节。而今年是丰收的一年,去年所付出的一切都在今年获得了回报,我也迎来新的生活。 新的生活…

过年春联不可少,python带你制作春联,体验不一样的过年氛围

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 每逢春节,无论城市还是农村, 家家户户都要挑漂亮的红春联贴于门上,辞旧迎新,增加喜庆的节日气氛。 据说这一习俗起于宋代,在明代开始盛…

我是阿豪我的2022年年终总结.

时光如白驹过隙般,飞逝而过,来不及细品岁月的美好。一晃,2022年就过去了! 明天新的一年就来了。回忆一下2022一年都干了什么。 3月份背了大概200多道的前端面试题,疯狂的刷面试题,一天不刷几道面试题心里…

ffmpeg从某站提取视频、音频、详解

ffmpeg从某站提取视频、音频、详解 事件背景 准备链接 第一步安装下载 ffmpeg是开源软件,安装网址http://ffmpeg.org/download.html#build-windows 本人用的windows10系统 打开网址后随便你怎么下载都行,Git、或者直接下等等 按图片输入上述网址也…

【攻防世界】Web very_easy_sql

做了web才发现,原来自己是真的什么都不懂啊,不过也好,说明我有很大的进步空间呢 不闲聊了,来看题目 打开是一个登录界面,我们抓包看看返回些什么 返回包有三个需要注意的地方,我都用框框圈起来了 有一个S…

【C++】map 与 set 的介绍与使用、力扣:692. 前K个高频单词

目录 一、关联式容器 二、键值对 三、set 3.1 set 的介绍 3.2 set 的使用 3.3. set 的使用举例 四、map 4.1 map的介绍 3.2 map 的使用 4.3 map的使用举例 五、经典练习题 1.set的使用 2.map的使用 思路一(稳定排序): 思路二(priority_queue)&#x…

jvm参数说明

-Xmx3550m:设置JVM最大堆内存为3550M。 -Xms3550m:设置JVM初始堆内存为3550M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之…

新式 AIMD 拥塞控制

周三晚上发了一则朋友圈,今天整理一下: ​ AIMD 过程可推导出 TCP 吞吐公式: TaRTTbpT\dfrac{a}{RTT}\dfrac{b}{\sqrt{p}}TRTTa​p​b​ a,b 分别为与 AIMD 参数和过程有关,该公式结论内置公平性。设 MSS 1460&…

【MySQL】九,MySQL逻辑架构剖析

服务器处理客户端请求 Connectors 外部的各种类型的连接客户端。 第一层:连接层 客户端访问 MySQL 服务器前,首先要建立 TCP 连接。 经过三次握手成功建立连接后,MySQL对传输过来的账号密码做身份认证、权限获取。 如果用户名密码错误&am…

【Iava】抽象类和接口

祝早日驱散阴霾 文章目录1. 抽象类1.1 抽象类的概念1.2 抽象类的使用注意事项1.3 抽象类的作用2. 接口2.1 接口的定义2.2 接口的使用规则2.3 创建对象拷贝,实现Cloneable3. 抽象类和接口的区别1. 抽象类 1.1 抽象类的概念 抽象类,顾名思义,这是不是一个具体的类,没有实际的功…

四旋翼无人机学习第17节--封装上传github与gitee

0 前言 经过一段时间的绘制,终于绘制完项目所需的封装。为了更好的管理封装,我准备把封装与焊盘上传到github与gitee,方便之后的管理工作。 1 文件上传gitee 注册这里就不作介绍咯。 1、首先点击新建仓库。 2、设置仓库的名称与项目介绍&…

GO语言初始化数据结构的方法你知道吗?

xdm 我是阿兵云原生 使用 golang 进行编码过程中,你们都是如何初始化数据结构的呢 GO 里面提供了 2 个关键字来进行初始化数据结构 newmake 不过有时候我也会直接使用花括号的方式直接就初始化,例如这样: name : []string{"xiaomot…

电源PCB布局要点

本次已常用的集成电源IC芯片TPS 5430.讲解一下布局要求。 在手册中可以看到官方已给出的详细布局。 这是我们原理图设计的TPS 5430。 通过以上了解到了连接关系以及布局要求。那么我们再看看官方要求是如何硬性要求布局的。 总结: 1.输入电容要靠近Vin 管脚 2.电…

图像简单运算

图像运算是以图像为单位对图像进行数学操作,运算对象以像素点为基本单位,运算结果为一幅灰度分布与原图像不同的新图像。 算术运算与逻辑运算 算术运算与逻辑运算中每次只涉及一个空间像素的位置,所以可以”原地操作“(在&#xf…

【微服务笔记02】微服务组件之Eureka常见的几个配置属性及其常见的几个概念

这篇文章,主要介绍微服务组件中Eureka常见的几个配置属性及其常见的几个概念【源代码地址】。 目录 一、Eureka常见配置属性 1.1、instance配置项 1.2、client配置项 1.3、server配置项 二、eureka常见概念 2.1、服务注册 2.2、服务发现 2.3、服务续约 2.4…