# 概述
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错控制、流量控制等)。那么网络层是如何传送 IP 数据报的?
# 网际协议 IP
与 IP 协议配套使用的还有三个协议
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
IP 要使用ARP协议,而ICMP和IGMP要使用IP协议。
IP 地址与硬件地址的区别,每个网卡都有一个唯一的硬件地址,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,IP是一种逻辑地址,是由软件实现的。
在分组转发的过程中,源IP和目的IP地址是不变的,而MAC是改变的。
- 在IP层抽象的互联网上只能看到IP数据报
- 路由器只根据目的站的IP地址的网络号进行路由选择
- 在局域网的链路层,只能看到MAC帧
两个关键的问题
主机或者路由器怎么知道在MAC帧首部填入的硬件地址?
路由器中的路由表是怎么得出来的?
# 地址解析协议ARP
ARP协议能够通过机器(主机或路由器)的IP地址找到它的硬件地址。ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果不在同一个局域网,就把路由器的地址给写上,由路由器转发到下一个局域网。
每台主机都设有一个ARP高速缓存(ARP cache),里边有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。那么这个映射表是如何维护的呢?
当主机A要向本局域网上的某台主机B发送IP数据报时,在ARP高速缓存中查看有没有主机B的IP地址。如果有,就拿到对应的硬件地址。如果没有,则通过以下步骤找出主机B的硬件地址:
- ARP进程在本局域网上广播发送一个ARP请求分组,该分组包含A的IP和MAC地址和B主机的IP地址
- 在本局域网上的所有主机上运行的ARP进程都受到此ARP请求分组
- 如果主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下,并向主机A发送ARP响应分组,该分组包含自身的MAC地址,如果不一致,不理睬这个请求分组
- 主机A收到主机B的ARP响应分组后,在ARP高速缓存中写入主机B的IP地址到硬件地址的映射
# IP数据报格式
- 版本:IP协议版本
路由表,保存了(目的网络地址(网络号),下一跳地址)
# ICMP协议
网际控制报文协议 ICMP (Internet Control Message Protocol) ,用于传输出错报告控制信息。ICMP协议主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的如跟踪路由的Tracert命令也是基于ICMP协议的。
# 虚拟专用网VPN和网络地址转换(NAT)
假如一个机构内部的计算机通信采用的是TCP/IP协议,这些计算机可以由机构内部自行分配IP,这些IP地址称为本地地址,不需要向互联网管理机构申请全球唯一的IP地址(全球地址),这样能够节约IP地址资源。
但是如果机构内部的某台主机需要和互联网连接,那么本地地址就可能和全球地址重合。所以为了解决这个问题,RFC 1918 指明了一些专用地址,这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信,就是说,这些专用只能用作本地地址而不能用作全球地址。同时,在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发,以下是三个专用地址块
- 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隧道技术实现虚拟专用网
场所A上的主机要和场所B上的主机通信,需要R1,R2路由器一段连接本地互联网,另一端连接互联网,连接互联网的一端需要具有合法的全球IP地址。主机X和主机Y的通信需要通过R1和R2,X发送IP数据报,路由器把IP数据包加密后,然后重新加上数据报的首部,源IP和目的IP是R1和R2连接互联网的IP,R2受到数据报之后,解密,拿到真实的目的IP,向主机交付
网络地址转换
如果专用网需要使用互联网?
专用网内的IP数据报发送到互联网的时候,它的IP报是不能够被转发的(前面提到),但是路由器可以将IP数据包的源IP换成路由器的全球IP地址,然后发送出去,数据报回来的时候通过地址转换表找到真实的源IP地址。