4 网际控制报文协议ICMP

为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 不是高层协议,而是 IP 层的协议。
ICMP协议允许主机或路由器 报告差错情况 和 提供有关异常情况 的报告。
ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
4.1 ICMP报文种类

**
- ICMP报文前四个字节是统一的格式,共三个字段:类型、代码和检验和。
- ICMP报文的类型:ICMP差错报告报文和ICMP询问报文
- 差错报告报文有五种:终点不可达、源点抑制(source quench)、时间超过、参数问题、改变路由(重定向)(redirect)
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 源点抑制:现已弃用
- 时间超过:当路由器收到生存时间为0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片全都丢弃,并向源点发送时间超过报文。
- 参数问题:当路由器或目的主机收到的数据包的首部中有的字段值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次将数据报发送给另外的路由器(可通过更好的路由)
- 询问报文有两种:**回送请求和回答报文、 时间戳请求和回答报文**
- 差错报告报文有五种:终点不可达、源点抑制(source quench)、时间超过、参数问题、改变路由(重定向)(redirect)
- 代码 字段:为了进一步去扥某种类型中的几种不同情况。
- 检验和 字段:用于检验整个ICMP报文。【IP数据报首部的 检验和 并不检验IP数据包的内容,因此,不能保证经过传输的ICMP报文不产生差错。】
- ICMP报文的类型:ICMP差错报告报文和ICMP询问报文
- 接着的4个字节的内容与ICMP类型有关。
- 最后面的是数据字段:其长度取决于ICMP的类型。

4.2 ICMP 差错报告报文的数据报的内容

将IP数据报首部和数据字段前8个字节提取出来(这8个字节是为了对应得到上层协议端口与发送序号),作为ICMP的数据字段在加上ICMP差错报告报文前8个字节,就构成了ICMP差错报告报文。
4.2.1 应用举例:通过ICMP可以探测网络故障
4.2.1.1 Ping命令
PING 用来测试两个主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
特点:
PING(packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地 并报告是否收到所希望的ICMP回声应答。
ping是指 端对端连通,通常用来作为 可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致你的系统变慢,网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。
如果你打开IE浏览器访问网站失败,你可以通过Ping命令测试到Ineternet的网络连通,可以为你排除网络故障提供线索。
eg:

在局域网中,ping的时间一般不会大于10ms
4.2.1.2 pathping命令
可以跟踪数据报的路径。在网络排措时,很有用。pathping还能看到路径上某个结点的丢包率,在这里*表示该结点路由器被设置为不可访问。


4.2.1.3 tracert命令
Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP数据包访问目标所采取的路径。Tracert 命令使用用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由.其命令格式如下。tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
例如:
在命令行中输入“tracert ”并在后面加入一个IP地址,可以查询从本机到该IP地址所在的电脑要经过的路由器及其IP地址。下图中后面的IP地址为同一个路由器下的局域网中的另一个电脑的IP地址。

从左到右的5条信息分别代表了:
- “生存时间”(每途经一个路由器结点自增1)、
- “三次发送的ICMP包返回时间”(共计3个,单位为毫秒ms)
- 和“途经路由器的IP地址”(如果有主机名,还会包含主机名)。
也可以输入“tracert ”后面接一个网址,DNS解析会自动将其转换为IP地址并探查出途经的路由器信息。如这回在后面输入了百度经验的URL地址,可以发现共查询到10条信息,其中带有星号(*)的信息表示该次ICMP包返回时间超时。

5 互联网路由的选择新协议
5.1关于选择协议的几个基本概念
5.1.1理想的路由选择
- 完整与正确
- 计算简单
- 能适应通信量与网络拓扑的变化,有自适应性(稳健性)
- 具有稳定性
- 应是最佳的,相对于某种特定需求下较为合理的选择
从路由算法的自适应性考虑分两大类:
- 静态路由选择策略(非自适应路由选择):简单,开销小,但不能适应网络状态的变化
- 动态路由选择策略(自适应路由选择):能较好适应网络状态的变化,但实现较为复杂,开销大
5.1.2 动态路由、静态路由的区别
5.1.3 分层次的路由选择协议
将互联网划分为许多小的自治系统,记为AS(autonomous system),一个AS对其他AS表现出单一的和一致的路由选择策略。
自治系统AS 是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。
互联网把路由选择协议划分为两大类:
- 内部网关协议IGP:自治系统内部使用的路由选择协议,如RIP和OSPF
- 外部网关协议EGP:当源主机与目的主机处在不同的自治系统中所使用的路由选择协议,目前使用最多的是BGP-4
注意,这里使用“网关”或“路由器”都是可以的。即:
内部网关协议IGP与内部路由协议IRP是一个意思;外部网关协议EGP与外部路由协议ERP是一个意思。
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),
在自治系统内部的路由选择叫做域内路由选择**(intradomain routing)。
5.2 内部网关协议RIP
互联网上最早的动态路由协议
RIP (Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议,它的中文名称叫做路由信息协议,但很少被使用。
RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单。
RIP协议要求网络中的每一个路由都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。RIP协议将“距离”定义如下:
- 从一路由器到直接连接的网络的距离定义为 1。从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
- RIP 协 议 中 的 “ 距 离 ” 也 称 为 “ 跳数”(hop count),因为每经过一个路由器,跳数就加 1。
- RIP 允许一条路径最多只能包含 15 个路由器。“距离”的最大值为16 时即相当于不可达。可见 RIP 只适用于小型互联网。
RIP协议特点:
RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP 协议的三个要点:
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔 30 秒。
路由选择算法:
分析:路由选择算法:已知地址为X的相邻路由器发来RIP报文,先将收到的报文下一跳该为X,所有距离加1,再对该表与自身路由表逐条进行比较。if(原路由表无目的网络N){将该项目添加到路由表中}if else(本机路由表下一跳为X){将该条更新原本的项目}if else(距离<原来){更新该条到路由表}else{不做更新操作}if(三分钟收不到更新路由表){将此相邻路由表距离设置为16(不可达)}
本路由器与相邻路由器相距为1,通过相邻路由表可知,本路由器经过相邻路由器到达目的地址的距离会加1,所以d+1,下一跳设置为X。然后对路由表进行比较,目的地址未知则直接添加,目的地址已知,看本路由表下一跳是否为X,如果是,则更新,因为这是最新消息。如果不是,比较距离,距离比原来小可添加。如果长时间收不到更新路由表,则自动标记为不可达。
5.2.3 RIP协议的报文格式

RIP 协议的优缺点
- RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
- RIP 协议最大的优点就是实现简单,开销较小。
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
5.2.2 练习:配置动态路由RIP协议
点击查看【bilibili】
或者,参考:
https://blog.csdn.net/weixin_44751294/article/details/105002965#t26
5.3 内部网关协议OSPF
也属于 动态路由协议
开放的最短路径优先OSPF(open shortest path first),主要特征是使用分布式的链路状态协议**。
“开放”:表明OSPF协议不是受一家厂商控制,而是公开发表的。 “最短路径优先”:是因为使用了Dijkstra提出的最短路径算法SPF。 OSPF 只是一个协议名字,他并不表示其他的路由选择协议不是“最短路径优先”。
OSPF协议的要点:
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是 路由器所知道的部分信息。(“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。)
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
OSPF协议的特点:
- OSPF不用UDP而是直接用IP数据报传送;
- OSPF 对不同的链路可根据IP分组的不同服务类型而设置成不不同的代价。因此,OSPF对于不同类型的业务可计算出不同的路由。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给几条路径。这叫做 路径间的负载平衡。
- 所有在OSPF路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分 和 无分类编址CIDR。
- 每一个链路状态都带上一个32位的序号,序号越大,状态就越新。
5.3.1 OSPF协议 与 RIP协议 的异同点
| OSPF协议 | RIP协议 | |
|---|---|---|
| 属于动态路由协议 | 是 | 是 |
| 度量值 | 宽带(哪个路线的带宽高,就走这条路线。) | “ 距 离 ” 也 称 为 “ 跳数” |
| 更新路由信息 | 触发式更新(当路由器出现问题:宕机…) 它有三个表: - 邻居表:使用hello包维持邻居关系 - 在局域网中每隔2秒,给邻居发一个hello包,看看彼此是否能够接受成功 - 链路状态表:将所有的邻居表相互交换,就形成链路状态表。 - 路由表:是通过 链路状态,计算出来的 |
每隔30s |
| 支持多区域 | 支持 | 不支持 |
OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。区域也不能太大,在一个区域内的路由器最好不超过 200 个。

OSPF 使用层次结构的区域划分(仅有两层)。在上层的区域叫作主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。
主干区域的作用是用来连通其他在下层的区域将自治系统划分为多个区域,这样做可使泛洪法交换链路信息时只局限于一个区域,而不用扩大到整个自治系统,而一个区域的路由器只知道本区域的拓扑结构。
OSPF建立网络拓扑结构图的方式:
- 首先每个路由器会每10s对相邻的路由器发送问候(Hello)分组,来维持相邻路由器的可达性。
- 通过交换得到的链路状态信息,建立链路状态数据库,构造全网的拓扑结构图。
- 当链路状态发生改变时,每个路由器都能及时更新同步数据库。
OSPF协议的多区域
5.3.2 练习:配置OSPF协议
5.4 外部网关协议BGP协议
之前讲的RIP、OSPF协议是自治系统内部可选择的协议,BGP 是不同自治系统的路由器之间交换路由信息的协议。
边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” ,一般为BGP边界路由器。
一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。
通过BGP协议可将上图的网络看做是如下形式:

BGP发言人交换路径向量:

自治系统 AS2 的 BGP 发言人通知主干网的 BGP 发言人:“要到达网络 N1, N2, N3 和 N4 可经过 AS2。同理,主干网还可发出通知:“要到达网络 N5, N6 和 N7 可沿路径(AS1, AS3)。
5.4.1 BGP协议的特点
- BGP协议交换路由信息数量不是很多。
- BGP协议发言人数目不多,路由选择相对简单。
- BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 在BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
5.5 路由器的构成
5.4.1 路由器的结构
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
- 从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
路由器的转发分组正是网络层的主要工作。图4-42给出了一种典型的路由器的构成框图。
由上图可知,整个理由七结构可划分为两大部分:路由选择部分和分组转发部分。
- 路由选择部分:也称为 控制部分,其核心构建是路由选择处理机。
- 路由选择处理机:主要任务是根据所选择的路由选择协议构造出路由表,同时经常或定期的与相邻路由器交换路由西安西而不断地更新和维护路由表。
- 分组转发部分,可分成:
- 交换结构:又称 交换组织,作用为 根据转发表(forwarding table)对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。【交换结构本身就是一种网络,但这种网络完全包含在路由器之中,因此交换结构可看成“在路由器中的网络”】
- 一组输入端口
- 一组输出端口
注意:“转发”与“路由选择”的区别:
- 转发:路由器根据转发表把收到的IP数据报从路由器何时的端口转发出去。这里仅仅只涉及的一个路由器。
- 路由选择:涉及到多个路由器。路由表是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,得出整个网络拓扑的变化情况,因而能够动态的改变所选择的路由,并由此构造出整个路由表。
5.4.1.1 交换结构
交换结构是路由器的关键构件。它把分组从一个输入端口转移到某个合适的输出端口。
6 IPv6
IP是互联网的核心协议。现在使用的IP(即IPv4)是在20世纪70年代末期设计的。互联网经过几十年的飞速发展,到2011年2月,IPv4的地址已经耗尽,ISP已经不能再申请到新的IP地址块了。我国在2014年至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开始商用部署IPv6。
6.1 IPv6的基本首部
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组,而不是IPv4的数据报。
IPv6所引进的主要变化有:
- 更大的地址空间。IPv6把地址从IPv4的32位增大到4倍,即增大到128位,使地址空间增大了2倍。这样大的地址空间在可预见的将来是不会用完的。
- 扩展的地址层次结构。IPv6由于地址空间很大,因此可以划分为更多的层次。
- 灵活的首部格式。IPv6数据报的首部和IPv4的并不兼容。IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,而且还可提高路由器的处理效率,这是因为路由器对扩展首部不进行处理(除逐跳扩展首部外)。
- 改进的选项。IPv6允许数据报包含有选项的控制信息,因而可以包含一些新的选项。但IPv6的首部长度是固定的,其选项放在有效载荷中。我们知道,IPv4所规定的选项是固定不变的,其选项放在首部的可变部分。
- 允许协议继续扩充。这一点很重要,因为技术总是在不断地发展(如网络硬件的更新)而新的应用也还会出现。但我们知道,IPv4的功能是固定不变的。
- 支持即插即用(即自动配置)。因此IPv6不需要使用DHCP。
- 支持资源的预分配。IPv6支持实时视像等要求保证一定的带宽和时延的应用。
- IPv6首部改为8字节对齐(即首部长度必须是8字节的整数倍)。原来的IPv4首部是4字节对齐。
IPv6数据报由两大部分组成,即基本首部(base header)和后面的有效载荷(payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分(如下图所示)。
- 但请注意,所有的扩展首部并不属于IPv6数据报的首部。


IPv6数据报格式:

- 版本:占4位,指明了版本协议,对于IPv6,该字段总是6;
- 优先级:占8位,区分数据报的类别和优先级;
- 流标签:占20位,“流”是从特定源点到特定终点的一系列数据报,所有属于同一个流的数据报有同样的流标签;
- 有效载荷长度:占16位,它指明IPv6数据报除基本首部以外的字节数,这个字段最大64KB;
- 下一个首部:占8位(相当于IPv4的协议字段或可选字段)
- 当IPv6没有扩展首部时,它的作用相当于协议字段,指明数据报一个交付上层那个协议;
- 当出现扩展首部,它就用来标识后面一个扩展首部的类型;
- 跳数限制:占8位,相当于IPv4的TTL(生存时间);
- 源地址:占128位,是数据报发送端IP地址;
- 目的地址:占128位,是数据报接收端IP地址;
6.2 IPv6地址
IPv6数据报的目的地址可以是以下三种基本类型之一:
- 单播:一对一通信,可做源地址或目的地址
- 多播:一对多通信,只能用于目的地址
- 任播:IPv6新增类型。任播的终点是一组计算机,但数据报只交付给其中的一个,通常是距离最近的一个发送数据报。
6.2.1 IPv6地址的表示法:
- 冒号十六进制记法
IPv6中,每个地址占128位。巨大的地址范围如果使用和 IPv4一样的点分十进制记法,太不方便了。
- 如一个用点分十进制记法的128位地址为:

所以,IPv6使用的“冒号十六进制记法”(colon hexadeimal notation),简写为colon hex。
- 它把每个16位的值用十六进制值表示,各值之间用冒号分割。
如将上面的改写为冒号十六进制记法:
注意:在十六进制记法中,允许吧数字前面的0省略。上面就把0000中前三个0省略。
冒号十六进制记法还包含两个技术:
- 零压缩: 一连串连续的0可以为一对冒号所取代。如:

注意:在任一地址中只能使用一次零压缩技术。
- 冒号十六进制记法可结合使用点分十进制记法的后缀。

- CIDR的斜线表示法
CIDR的斜线表示法仍然可用。例如,60位的前缀12AB00000000cD3(十六进制表示的15个字符,每个字符代表4位二进制数字)可记为:
6.2.2 IPv6地址分类


6.3 从IPv4向Ipv6过渡
向IPv6过渡只能采用逐步演进的办法。同时,新安装的IPv6系统需要能够向后兼容。这就是说,IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。
下面介绍两种向IPv6过渡的策略:
- 双协议栈
- 隧道技术
6.3.1 双协议栈
双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈。这样的话,这台设备既能和IPv4网络通信,又能和IPv6网络通信。
- 如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了lPv4地址和IPv6地址,并很可能分别连接了IPv4网络和IPv6网络。
- 如果这台设备是一个计算机,那么它将同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。
双协议栈主机在和IPv6主机通信时采用IPv6地址,而和IPv4主机通信时则采用IPv4地址。但双协议栈主机怎样知道目的主机是采用哪一种地址呢?它是使用域名系统DNS来查询的。若DNS返回的是IPv4地址,双协议栈的源主机就使用IPv4地址。但当DNS返回的是IPv6地址,源主机就使用IPv6地址。
6.3.2 隧道技术
通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。
隧道技术工作原理
6.3.3 ICMPv6
和IPv4一样,IPv6也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。因此IPv6也需要使用ICMP来反馈一些差错信息。新的版本称为ICMPv6,它比ICMPv4要复杂得多。地址解析协议ARP和网际组管理协议IGMP的功能都已被合并到ICMPv6中(图4-51)。
7 VPN技术和网络地址转换
7.1 VPN技术
虚拟专用网络(VPN)
- 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向因特网的管理机构申请。
- 全球地址——全球唯一的IP地址,必须向因特网的管理机构申请。
- 专用地址:这些地址只能用于一个机构内部的通信,而不能用于互联网上的主机通信。即“专用地址”只能用作“本机地址”,而不能用作“全球地址”。
- 在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
2013年4月,RFC 6890全面地给出了所有特殊用途的IPv4地址,但三个专用地址块的指派并无变化,即:
(1)10.0.0.0~10.255.255.255(或记为10.0.0.0/8,它又称为24位块)
(2)172.16.0.0~172.31.255.255(或记为172.16.0.0/12,它又称为20位块)
(3)192.168.0.0~192.168.255.255(或记为192.168.0.0/16,它又称为16位块)
上面的三个地址块分别相当于1个A类网络、16个连续的B类网络和256个连续的C类网络。A类地址本来早已用完了,而上面的地址10.0.0.0本来是分配给ARPANET的。由于ARPANET已经关闭停止运行了,因此这个地址就用作专用地址。
采用这样的专用IP地址的互联网络称为“专用互联网”或“本地互联网”。简称“专用网”。专用IP地址也叫做“可重用地址”。

A与B内部的通信本来不经过互联网,如果两者之间想要通信,可使用VPN技术,A将数据报作为内部数据发给路由器R1,路由器R1收到数据报后,对内部数据报加密(保证数据安全),然后重新加上数据报的首部,封装成互联网的外部数据报,到达R2,然后在进行解密,从而实现两者间的通信。
数据报从R1传送到R2可能要经过互联网中很多个网络和路由器。但从逻辑上看,在R1到R2之间好像是一条直通的点对点链路,图中(a)“隧道”就是这个意思。
图(b)所示,由场所A和B的北部网络所构成的虚拟专用网VPN又称为“内联网(即内联网VPN)”,表示场所A、B都属于同一个机构。 有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网(extranet或extranet VPN,即外联网VPN)。
注:内联网、外联网 都采用了互联网技术,即基于TCP/IP协议。
还有一种类型的VPN,就是远程接入VPN (remote access VPN)。
- 有的公司可能并没有分布在不同场所的部门,但却有很多流动员工在外地工作。公司需要和他们保持联系,有时还可能一起开电话会议或视频会议。远程接入VPN可以满足这种需求。
- 在外地工作的员工通过拨号接入互联网,而驻留在员工个人电脑中的 VPN 软件可以在员工的个人电脑和公司的主机之间建立VPN隧道,因而外地员工与公司通信的内容也是保密的,员工们感到好像就是使用公司内部的本地网络。
7.2 网络地址转换(NAT)
网络地址转换(NAT):network address translation
讨论另一种情况:如何才能在分配到本地IP地址后,还能和互联网上的主机通信?
- 答:使用“网络地址转换”技术。
网络地址转换NAT(Network Address Translation)方法需要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接。
工作原理:
图4-60给出了NAT路由器的工作原理。在图中,专用网192.168.0.0内所有主机的IP地址都是本地I地址192.168.x.x。NAT路由器至少要有一个全球IP地址,才能和互联网相连。图4-60表示出NAT路由器有一个全球I地址172.38.1.5(当然,NAT路由器可以有多个全球IP地址)。
NAT路由器收到从专用网内部的主机A发往互联网上主机B的IP数据报,源IP地址是192.168.0.3,而目的IP地址是213.18.2.4。
- NAT路由器把IP数据报的源IP地址192.168.0.3,转换为新的源IP地址(即NAT路由器的全球地址)172.38.1.5,然后转发出去。因此,主机B收到这个IP数据报时,以为A的IP地址是172.38.1.5。
- 当B给A发送应答时,数据报的目的IP地址是NAT路由器的IP地址172.38.1.5。B并不知道A的专用地址192.168.0.3。当NAT路由器收到互联网上的主机B发来的IP数据报时,还要进行一次P地址的转换。通过NAT地址转换表,就可把IP数据报上的旧的目的P地址172.38.1.5,转换为新的目的IP地址192.168,0.3(主机A真正的本地IP地址)。
- 实际上,即使知道了,也不能使用,因为互联网上的路由器都不转发目的地址是专用网本地l地址的数据报。
表4-11给出了NAT地址转换表的举例。表中的前两行数据对应于图4-60中所举的例子。第一列“方向”中的“出”表示离开专用网,而“入”表示进入专用网。表中后两行数据(图4-60中没有画出对应的IP数据报)表示专用网内的另一主机192.168.0.7向互联网发送了IP数据报,而NAT 路由器还有另外一个全球IP地址172.38.1.6。
显然,通过NAT路由器的通信必须由专用网内的主机发起。设想互联网上的主机要发起通信,当IP数据报到达NAT路由器时,NAT路由器就不知道应当把目的IP地址转换成专用网内的哪一个本地IP地址。
这就表明,这种专用网内部的主机不能充当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务。
使用**netstat -n**可查看建立会话的目标端口和**源端口:
7.2.1 NAT的端口映射
使用端口号的NAT也叫做网络地址与端口号转换NAPT(Network Address and Port Translation),而不使用端口号的NAT就叫做传统的NAT(traditional NAT)。
但在许多文献中并没有这样区分,而是不加区分地都使用NAT这个更加简洁的缩写词。表4-12说明了NAPT的地址转换机制。
端口映射讲解
在windows上实现端口映射:https://www.bilibili.com/video/BV17p411f7ZZ?p=95
8 IP多播(组播)
由一个源点发送到许多个终点,即一对多的通信。
如:新闻、交互式会议。

上图中:
- 单播方式:需要发送90个单播,即同一个视频分组要发送90个副本。
- 多播方式:向属于同一个多播组的90个成员传送节目。视频服务器只需把视频分组当作多播数据报来发送,并且只需发送一次。
- 路由器R在转发分组时,需要把收到的分组复制成3个副本,分别向Rz、R;和Rq各转发1个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频分组。
能够运行多播协议的路由器称为 多播路由器(multicast router)。
在互联网进行多播就叫做 IP多播。IP多播传送的分组需要使用多播IP。
为了适应交互式音频和视频信息的多播,在互联网上开始试验虚拟的多播主干网MBONE(Multicast Backbone On the InterNEt**),**MBONE可把分组传播给地点分散但属于一个组的许多台主机。
如何能使多播数据报传送到这台主机?
- 在互联网中每一台主机必须有一个全球唯一的IP地址。显然,这个多播数据报的目的地址一定不能写入这台主机的IP地址。这是因为在同一时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这样多的主机的IP地址。在多播数据报的目的地址写入的是多播组的标识符,然后设法让加入到这个多播组的主机的P地址与多播组的标识符关联起来。
其实多播组的标识符就是IP地址中的D类地址。D类IP地址的前四位是1110,因此D类地址范围是224.0.0.0到239.255.255.255。我们就用每一个D类地址标志一个多播组。这样,D类地址共可标志22个多播组,也就是说,在同一时间可以允许有超过2.6亿的多播组在互联网上运行。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的IP数据报的区别就是它使用D类地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP**。
显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP差错报文。因此,若在PING命令后面键入多播地址,将永远不会收到响应。
IP多播可以分为两种。
- 一种是只在本局域网上进行硬件多播。
- 另一种则是在互联网的范围进行多播。
现在大部分主机都是通过局域网接入到互联网的。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员。
8.1 网际组管理协议IGMP和多播路由器的选择
8.1.1 IP多播需要两种协议
图4-55是在互联网上传送多播数据报的例子。图中标有I地址的四台主机都参加了一个多播组,其组地址是226.15.37.123。显然,多播数据报应当传送到路由器R,R和R,而不应当传送到路由器R4,因为与R4连接的局域网上现在没有这个多播组的成员。
但这些路由器又怎样知道多播组的成员信息呢?这就要利用一个协议,叫做**网际组管理协议IGMP(Internet Group Management Protocol)。
图4-55强调了IGMP的本地使用范围。请注意,IGMP并非在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道P多播组包含的成员数,也不知道这些成员都分布在哪些网络上,等等。IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机**(严格讲,是主机上的某个进程)参加或退出了某个多播组。
仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用**多播路由选择协议**。




