计网第四章.网络层—ICMP协议和ping命令

以下来自湖科大计算机网络公开课笔记

本篇笔记主要记录网络层的两块内容:
(1)网际控制报文协议ICMP及其上面的两个应用:ping命令和跟踪路由;
(2)虚拟专用网与网络地址转换NAT;

一、网际控制报文协议ICMP——ping命令和跟踪路由

ICMP 全称是 Internet Control Message Protocol,互联网控制报文协议

ICMP报文被封装在IP数据报中发送——ICMP报文被封装在IP数据包的数据部分

看举例感觉就是当IP数据报出现各种发送错误时,路由器就发送ICMP

(其实看后面就能猜到,应该是以IP报文的形式在路由器或主机间传输,只是该IP数据报的数据部分是ICMP报文,这个报文也分5种类型,应该也有相应的格式或字段会指明)

ICMP报文的作用:
ICMP能更有效的转发IP数据报和提高交付成功的机会;主机或路由器使用ICMP协议来发送差错报告报文和询问报文

1.1 差错报文

ICMP差错报告报文共有5种,它们分别是 终点不可达,源点抑制,时间超过,参数问题,改变路由(重定向)

(1)终点不可达
如下图R1给H1发送
在这里插入图片描述
(2)源点抑制
如下图主机H2给主机H1发送:
在这里插入图片描述
(3)时间超过
之前说生存时间减为0直接丢弃,实际上还会发送 “时间超过报文” 给源点
在这里插入图片描述
另外,当终点在预先规定的时间内没有收到一个数据报的全部报文时,会把已收到的数据报片都丢弃,也会向源点发送时间超过报文。

扫描二维码关注公众号,回复: 15743031 查看本文章

(4)参数问题
在这里插入图片描述
(5)改变路由(重定向)
如下:

一开始,H1要发往网络N2的IP数据报,先传输给R1,由其帮忙转发,当路由器R1发现H1发往N2的数据报的最佳路由不应当经过R1,而是应当经过R4时,就用改变路由报文,把这个情况告诉主机,于是H1就在自己的路由表中添加一个项目:到达N2应经过路由器R4,而不是默认网关R1
在这里插入图片描述
红色细线是一开始主机H1发给R1,然后沿着上面线路传输了。

路由器把改变路由报文发送给主机,让主机知道下次(即应为上图中的绿色线)应将数据报发送给另外的路由器,这样可以通过更好的路由

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

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

1.2 询问报文

在这里插入图片描述

1.3 ping命令和跟踪路由

ICMP的应用除了上面说的搭载在IP报文里,以优化IP数据报的转发过程,还有两个典型应用:一个是分组网间探测PING(Packet Internet Groper),另一个是跟踪路由(traceroute)。

(1)PING分组网间探测
用来测试主机或路由器之间的连通性——ping命令。

ping的应用层直接使用网际层的ICMP,没有通过运输层的TCP或UDP
在这里插入图片描述
(2)跟踪路由

用来测试IP数据报从源主机到达目的主机要经过哪些路由器
在这里插入图片描述
如下图是tracert命令使用示例:

测试下这台主机到百度www.baidu.com的服务器之间要经过哪些路由器,tracert www.baidu.com
在这里插入图片描述
上图最右侧就是经过的路由器ip地址

tracert命令的实现原理

该命令是windows下的,在linux下为traceroute,原理应该一样。

以主机H1发送给主机H2为例。

一开始,主机H1就给H2发送ICMP回送请求报文,主机H1设置IP数据报首部生存时间TTL字段为1****,这样到达第一个路由器R1时,TTL被减为0,然后该路由器R1给主机H1发送ICMP**的时间超过报文,这样就得到了R1的IP地址

然后H1又给R1发送IP报文,这个时候,设置生存时间TTL为2

注意到达H2时,TTL不能是0。

那么H2收到IP数据报后,发现内部封装的是ICMP回送请求报文(上面说过的询问报文的一种)。于是就给H1发送封装有ICMP回送请求回答报文的IP数据报——这样H1就知道已经跟踪到目的主机了
在这里插入图片描述
像路由器发回给主机H1的ICMP差错报文的TTL为多少就不用算了,只要足够大,使得该报文能被H1收到就行

二、虚拟专用网与网络地址转换NAT

2.1 虚拟专用网(Virtual Private Network)

这个技术也被称为IP隧道技术。

该技术有几个要点需要注意:

  1. 各主机的IP地址是本机构自由分配的专用(私有)地址,只能用于一个机构的内部通信,不能用于和因特网上的主机通信。路由器不会对目的地址为私有ip的数据包进行转发。

  2. 通信时,IP数据报为内部数据报,源地址和目的地址就是私有地址,但是经过接入因特网的路由器时,会对其加密——为了数据报安全,然后路由器为其==重新添加一个首部==,上面的源地址和目的地址就是因特网上可用的,是路由器的地址。等目的路由器收到后就解密,里面加密的IP数据报里就有目的主机的私有IP,就能送到目的主机上了。

  3. 数据报在因特网中需要经过多个路由器和网络,但从逻辑上看,两个路由器R1—R2之间就像直连一样,所以叫IP隧道技术

下图就是同一公司,不同异地部门间的主机间通信:
在这里插入图片描述
虚拟专用网技术分为内联网络xxx、外联网xxx、远程接入xxx;我们常用的校园网VPN就是远程接入xxx。(因为不能出现虚拟专用网的那三个缩写,所以用xxx代替)

本地属于同一机构内不同部门的内部网络所构成的虚拟专用网,这就称为内联网xxx

有时一个机构的虚拟专用网需要某些外部机构参加进来,这样的虚拟专用网又称为外联网xxx

在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的xxx软件,在员工的PC和公司的主机之间建立xxx隧道,即可访问专用网络中的资源,这种虚拟专用网又称为远程接入xxx

2.2 网络地址转换NAT

上面VPN里也说机构里面的主机用的是私有IP地址。因为一个机构能申请到的IP地址数量远小于主机的主机数量,何况还要新增主机。这个根源就是IPv4不够用!

NAT也是通过使用私有IP地址的方法,来缓解IPv4即将耗尽的问题

这需要路由器上安装NAT软件,而且路由器必须至少有一个公网IP,即能连接因特网的IP。这样利用NAT软件能将主机的私有IP经过路由器转换为公网IP。
在这里插入图片描述
上图由私有地址192.168.0.2,被路由器修改为172.38.1.5(这个地址是路由器上的一个)

所以家里用的路由器,也是这样,它有一个路由器地址,是中国移动申请的,我连上后,我的笔记本的IP是路由器分配给笔记本的,实际上网时,用的是路由器的IP。

连接路由器的设备有多台,路由器能区分开,它给我们的设备分配私有IP。

这就是内网地址和外网地址(使用私有地址的主机不能直接充当因特网服务器)

之前就想远程连机房的服务器来着,结果机房的是路由器分配的IP(那个网线接到路由器上了),那边是内网,我这边实验室主机连的校园网,两边不互通,除非做内网穿透

内网主机与外网主机间的通信是否能由外网主机首先发起?答案是否定的,如果由外网主机首先发起,那么当NAPT路由器收到来自外网的IP数据报后,在NAPT转换表中找不到相应的记录,也就无法把数据报转发给内网中的主机,因此使用私有地址的主机不能直接充当因特网服务器

但有个问题,上面这种仅转换IP地址,那岂不是不能多个主机同时上网了???

解决,如下:
在这里插入图片描述
因为大多数上网应用都是用TCP或UDP,所以还有端口号的区分呀。上面表中,出,指的是内网主机发消息出去;

入,是指互联网的消息传入内网主机。

可以看到发消息去互联网时,不同内网主机的私有的IP不一样,端口号一样;被路由器进行NAPT转换后,IP一样,端口号不一样。

猜你喜欢

转载自blog.csdn.net/mrqiuwen/article/details/129985348