计算机网络 4-2-2 网络层(IPv4)
-
2.7 网络地址转换NAT
引入端口号:IP地址+端口号→一个特定的进程,(不同主机可能存在相同端口号)
网络层实现了“主机到主机”的通信。网络层在IP数据报的首部,指明源IP地址、目的IP地址
传输层实现了“端到端” (进程到进程)的通信。传输层在TCP(或UDP)报文段的首部,指明源端口、目的端口
-
-
私有IP地址(内网IP)
-
只允许分配给局域网内部的节点, 不允许分配给互联网上的节点
-
-
10.0.0.0~10.255.255.255
-
172.16.0.0~172.31.255.255
-
192.168.0.0~192.168.255.255
-
每个局域网内部都可以自行分配这些私有IP地址
-
私有IP地址是可复用的,只要求局域网内唯一,不要求全球唯一
-
-
全球IP地址(外网IP)
-
通常由ISP提供,全球唯一
-
外网IP 是一个局域网与外界通信时所需使用的IP地址
-
-
-
-
NAT路由器
-
作用:转发IP数据报时,进行内网IP、外网IP的相互转换
-
NAT表,记录地址转换关系
-
<内网IP:端口号 外网IP:端口号>
-
-
一个IP数据报
-
从内网转发到外网,会更改源IP地址、源端口号
-
从外网转发到内网,会更改目的IP地址、目的端口号
-
-
NAT路由器包含传输层的功能 (因为端口号是传输层的概念)
-
NAT路由器与普通路由器的区别
- 普通路由器转发IP数据报时,不会改变源IP、 目的IP地址
- 普通路由器仅包含网络层及以下的功能
其他:
NAT基本思想:局域网内部的多台主机共享一个全球唯一的公网IP地址。
端口号的复用:不同主机上的端口号可能重复,但端口号与IP地址的组合是唯一的。
NAT表的作用:记录内网IP地址和端口号与外网IP地址和端口号之间的映射关系
训练一:手机1→手机2微信发文字
1) 手机1先封装数据包:
IP首部:源IP :192.168.3.48 目的 IP:66.211.88.55
TCP首部源端口:9855 目的端口:4096
应用层数据:在吗?
2) 转发到手机1对应默认网关NAT路由器(完成内网IP、端口号和外网IP、端口号转换)内网映射成外网信息 为:
IP首部:源IP :59.175.49.153 目的IP:66.211.88.55
TCP首部源端口:7788. 目的端口:4096
应用层数据:在吗?
3) 转发到接收方NAT路由器(完成外网IP、端口号和内网IP、端口号转换)外网映射成内网信息为:
IP首部:源IP :59.175.49.153 目的IP:192.168.3.74
TCP首部源端口:7788. 目的端口:6666
应用层数据:在吗?
4)手机2接收数据进行拆包,得到端口号6666,确定是微信进程的数据
训练二:手机2→手机1微信发图片
训练三:电脑1→服务器 请求网页数据
训练四:服务器→电脑1返回网页数据
-
2.8 地址解析协议ARP
-
回顾
-
MAC地址 (48bit),是网络适配器出厂时分配好的,全球唯一
-
一台主机至少有一个网络适配器 (网线插口背后的芯片),因此主机至少有一个MAC地址
-
一台路由器有多个转发接口,每个接口背后都是一个网络适配器,因此路由器有多个MAC地址
-
-
2.8.1 ARP(ARP 协议只在同一段链路间使用)
-
-
作用
-
在一个局域网内部,可以通过ARP协议查询到一个IP地址对应的MAC地址
-
-
ARP表 (ARP缓存)
-
记录 (IP地址+MAC地址)之间的映射关系
-
一个数据结构 (每台主机、每台路由器都有自己的ARP表)
-
需要定期更新ARP表项
-
-
过程
-
①ARP请求分组(广播帧)
-
内容
-
我是谁?
-
我的IP地址是X,我的MAC地址是Y
-
-
我想找谁?
-
我想找的这个家伙,IP地址是Z
-
-
-
ARP请求分组封装进MAC帧 (帧目的地址=全1,源地址=Y
-
-
②ARP响应分组(单播帧)
-
内容
-
你好,我就是你要找的那个靓仔,我的IP地址是Z, 我的MAC地址是V
-
-
ARP响应分组封装进MAC帧 (帧目的地址=Y,源地址=V
-
-
-
-
-
训练一:假设 H3 想给internet 发送IP数据报,分析ARP工作过程
H3只知道指向的默认网关,并不知道其对应的mac帧,需要发送ARP 请求分组,为广播帧,分组会被传送至该网络的所有主机
,
被寻找的节点,返回ARP响应分组,是单播帧,并且顺手将H3的IP地址和Mac地址的映射关系记录到ARP表中
H3接收到ARP请求分组后将映射关系记录到ARP转发表中
训练二:基于上一个训练,假设有一个IP数据报从Internet->H3,分析ARP工作过程
训练三:假设H3想给166.1.150.1发送IP数据报,分析ARP工作过程
注意:H6发送ARP响应帧时,需要注意H6与H5连接为集线器,所以ARP响应帧会被集线器无脑转发给H5
ARP分组总长度为28字节,封装到以太网的MAC帧里,需要填充至46字节才能发送
-
2.9 动态主机配置协议DHCP
-
2.9.1 基本概念
-
DHCP协议的作用:给刚接入网络的主机动态分配IP地址、配置默认网关、子网掩码
-
DHCP使用客户/服务器模型 (C/S)
-
DHCP客户:就是新接入网络的主机(希望获得IP地址等配置)
-
DHCP服务器
-
就是负责分配IP地址的那台主机,管理一系列IP地址池
-
注:在家庭网络中,通常由家庭路由器兼职“DHCP服务器”
-
在一个大型网络内可以有多台DHCP服务器
-
-
-
DHCP是应用层协议,基于UDP
-
客户UDP端口号=68、服务器UDP端口号=67
-
-
-
2.9.2 获取IP地址相关信息
-
-
-
①客户→服务器:DHCP发现报文
-
携带信息:客户主机的MAC地址 (还可以提出对IP地址租用期的要求)
-
网络层: 源IP地址=0.0.0.0, 目的IP地址=255.255.255.255 (广播IP数据报)
-
链路层: 源MAC=客户的MAC地址,目的MAC=全1 (广播帧)
-
-
②服务器→客户:DHCP提供报文
-
携带信息:给客户分配的IP 地址、租用期、子网掩码、默认网关
-
网络层: 源IP=DHCP服务器的IP地址,目的IP=255.255.255.255 (广播IP数据报)
-
链路层:源MAC=服务器的MAC地址, 目的MAC=客户的MAC地址 (单播帧)
-
-
③客户→服务器:DHCP请求报文
-
携带信息:客户机确认要使用的IP地址
-
网络层: 源IP=0.0.0.0, 目的IP=255.255.255.255 (广播IP数据报)
-
链路层: 源MAC=客户的MAC地址, 目的MAC=全1 (广播帧)
-
-
④服务器→客户:DHCP确认报文
-
携带信息:与报文②类似
-
网络层: 源IP=DHCP服务器的IP地址, 目的IP=255.255.255.255 (广播IP数据报)
-
链路层:源MAC=服务器的MAC地址, 目的MAC=客户的MAC地址 (单播帧)
-
-
-
最常见的情况:每个网络配置一台DHCP服务器,H3是刚接入网络的主机
1)客户→服务器:DHCP发现报文
H3刚接入网络不知道DHCP的地址,因此目的IP为广播地址,又因为刚接入,源地址为0.0.0.0
解释说明:H6主机接收到该帧怎么处理:
H6链路层收到MAC帧,解析发现目的MAc全1,链路层掐头去尾得到IP数据报,发现目的IP全1,网络层吧这个IP数据报接收下来,继续拆解,得到UDP数据报,到达传输层,目的端口号为67,H6并没有对应的进程,丢弃
②服务器→客户:DHCP提供报文
③客户→服务器:DHCP请求报文
H3在4补完成之前的IP地址仍为0.0.0.0
为什么目的IP、MAC帧仍为全1? ANS:在一个大型网络内可以有多台DHCP服务器,第一步DH CP发送报文,该报文可能被多个DHCP服务器接收,DHCP以为都找他申请新IP,都同时发挥给H3 DHCP提供报文,所以H3要广而告之下我拿了哪个IP
④服务器→客户:DHCP确认报文
2.10 ICMP
2.10.1 基本概念
-
为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议(
Internet Control Message Protocol,ICMP
) -
主机或路由器使用ICMP来发送差错报告报文和询问报文
-
ICMP报文被封装在IP数据报中作为数据载荷发送
2.10.2 ICMP报文数据类型
-
差错报告报文:用来向主机或路由器报告差错情况
-
终点不可达:当路由器或主机不能交付IP数据报时,就向源点发送终点不可达报文,具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种
-
源点抑制:当路由器或主机由于拥塞而丢弃IP数据报时,就向发送该IP数据报的源点发送源点抑制报文,使源点知道应当把IP数据报的发送速率放慢
-
超时:
-
当路由器收到一个目的IP地址不是自己的IP数据报时,会将其首部中生存时间TTL字段的值减1。若结果不为0,则路由器将该数据报转发出去;若结果为0,路由器不但要丢弃该数据报,还要向发送该IP数据报的源点发送时间超过(超时)报文
-
另外,当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文
-
-
参数问题:当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文
-
改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机
-
-
以下情况不应发送ICMP差错报告报文:
-
对ICMP差错报告报文不再发送ICMP差错报告报文
-
对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文
-
对具有多播地址的IP数据报都不发送ICMP差错报告报文
-
对具有特殊地址(例如
127.0.0.0
或0.0.0.0
)的IP数据报不发送ICMP差错报告报文。 -
询问报文:用来向主机或路由器询问情况
-
回送请求和回答:
由主机或路由器向一个特定的目的主机或路由器发出。收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态
-
时间戳请求和回答:
用来请求某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。这种询问报文用来进行时钟同步和测量时间
-
-
2.10.3. ICMP的典型应用
1. PING
分组网间探测(Packet InterNet Groper,
PING
)在命令行中使用ping命令用来测试主机或路由器之间的连通性
PING是TCP/IP体系结构的应用层直接使用网际层ICMP的一个例子,它并不使用运输层的TCP或UDP
PING应用所使用的ICMP报文类型为回送请求和回答
2. traceroute
跟踪路由应用traceroute,用于探测IP数据报从源主机到达目的主机要经过哪些路由器
在不同操作系统中,traceroute应用的命令和实现机制有所不同:
在UNIX版本中,具体命令为
traceroute
,其在运输层使用UDP协议,在网络层使用ICMP报文类型只有差错报告报文在Windows版本中,具体命令为
tracert
,其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文原理:设置IP数据报TTL为1,经过第一个路由器时,TTL减为0,IP数据报被丢弃,路由器向源主机发送超时差错报告报文,这样就知道了经过的第一个路由器的IP地址,以此类推依次设置TTL为2,3,4,……,直到接收到目的主机的回送请求回答报文
参考:计算机网络