以下来自湖科大
计算机网络
公开课笔记
本篇笔记主要记录网络层的两块内容:
(1)网际控制报文协议ICMP及其上面的两个应用:ping命令和跟踪路由;
(2)虚拟专用网与网络地址转换NAT;
ICMP 全称是 Internet Control Message Protocol,互联网控制报文协议
ICMP报文被封装在IP数据报中发送——ICMP报文被封装在IP数据包的数据部分
看举例感觉就是当IP数据报出现各种发送错误时,路由器就发送ICMP
(其实看后面就能猜到,应该是以IP报文的形式在路由器或主机间传输,只是该IP数据报的数据部分是ICMP报文,这个报文也分5种类型,应该也有相应的格式或字段会指明)
ICMP报文的作用:
ICMP能更有效的转发IP数据报和提高交付成功的机会;主机或路由器使用ICMP协议来发送差错报告报文和询问报文
ICMP差错报告报文共有5种,它们分别是 终点不可达,源点抑制,时间超过,参数问题,改变路由(重定向)
(1)终点不可达
如下图R1给H1发送
(2)源点抑制
如下图主机H2给主机H1发送:
(3)时间超过
之前说生存时间减为0直接丢弃,实际上还会发送 “时间超过报文” 给源点
另外,当终点在预先规定的时间内没有收到一个数据报的全部报文时,会把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
一开始,H1要发往网络N2的IP数据报,先传输给R1,由其帮忙转发,当路由器R1发现H1发往N2的数据报的最佳路由不应当经过R1,而是应当经过R4时,就用改变路由报文,把这个情况告诉主机,于是H1就在自己的路由表中添加一个项目:到达N2应经过路由器R4,而不是默认网关R1
红色细线是一开始主机H1发给R1,然后沿着上面线路传输了。
路由器把改变路由报文发送给主机,让主机知道下次(即应为上图中的绿色线
)应将数据报发送给另外的路由器,这样可以通过更好的路由
有以下情况不发送ICMP差错报告报文:
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地址
该命令是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收到就行
这个技术也被称为IP隧道技术。
该技术有几个要点需要注意:
各主机的IP地址是本机构自由分配的专用(私有)地址,只能用于一个机构的内部通信,不能用于和因特网上的主机通信。路由器不会对目的地址为私有ip的数据包进行转发。
通信时,IP数据报为内部数据报,源地址和目的地址就是私有地址,但是经过接入因特网的路由器时,会对其加密——为了数据报安全,然后路由器为其==重新添加一个首部==,上面的源地址和目的地址就是因特网上可用的,是路由器的地址。等目的路由器收到后就解密,里面加密的IP数据报里就有目的主机的私有IP,就能送到目的主机上了。
数据报在因特网中需要经过多个路由器和网络,但从逻辑上看,两个路由器R1—R2之间就像直连一样,所以叫IP隧道技术
下图就是同一公司,不同异地部门间的主机间通信:
虚拟专用网技术分为内联网络xxx、外联网xxx、远程接入xxx;我们常用的校园网VPN就是远程接入xxx。(因为不能出现虚拟专用网的那三个缩写,所以用xxx代替)
本地属于同一机构内不同部门的内部网络所构成的虚拟专用网,这就称为内联网xxx。
有时一个机构的虚拟专用网需要某些外部机构参加进来,这样的虚拟专用网又称为外联网xxx。
在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的xxx软件,在员工的PC和公司的主机之间建立xxx隧道,即可访问专用网络中的资源,这种虚拟专用网又称为远程接入xxx。
上面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一样,端口号不一样。