第4章 网际层
第4章 网际层
寻址与发送
计算机通过网络接口设备比如网络适配器与网络进行通信,网络接口设备具有唯一的物理地址,用于接收发向该地址的数据。像以太网网卡这样的设备对于上层协议层的细节是一点也不了解的,它不知道IP地址,它只是监听是否收到了数据帧,发现其中目标地址与自己物理地址相符的帧,并把这个帧传递给上层协议栈。
这种物理寻址方式适合单个局域网网段。由不间断介质连接在一起的若干台计算机利用物理地址就可以实现所需的功能。
但是,在路由式网络中,不能利用物理地址实现数据传输,因为根据物理地址进行传输所需的过程不能跨越路由接口来运行。即使这样是可行的,根据物理地址传输数据也是非常麻烦的,因为内置在网卡里的固定物理地址不能在地址空间上引入逻辑结构
因此,TCP/IP隐藏了物理地址,以一种逻辑化的寻址方式对网络进行组织。这个逻辑寻址方案由网际层的IP协议维护。ARP是另一种网际层协议,它维护一个表格,用于把IP地址映射到物理地址。这个ARP表连接了IP地址与网卡物理地址。
发送数据的过程:
- 如果目的地址与源地址是同一个网段,源计算机就把数据包直接发送给目的计算机。IP地址被ARP解析为物理地址,数据被直接发送到目的网络适配器
- 如果目的地址与源地址不在一个网段上,就执行如下过程。
- 直接将数据报发送到网关。网关是位于局域网网段的一个设备,能够把数据报转发到其他网段。网关地址被ARP解析为物理地址,数据被发送到网关的适配器
- 数据报通过网关被路由到较高级别,再次重复上述过程。如果目的地址在这个新网段,数据就被发送到目的,否则数据报就会被发送到另一个网关。
网络协议(IP)
IP协议提供了一种分层的、与硬件无关的寻址系统,具有在复杂的路由式网络中传递数据所需的服务。每个网络适配器都有一个唯一的IP地址
IP地址分为两个部分:
-
网络ID
-
主机ID
-
A类地址使用地址前8位作为网络ID
-
B类地址使用前16位作为网络ID
-
C类地址使用前24位作为网络ID
IP报头字段
每个IP数据报都以一个IP报头开始。源计算机构造这个报头的目的是TCP软件利用IP报头中封装的信息处理数据。IP报头的最小长度是20字节。报头字段如下:
- 版本:这个4位的字段表示所使用的IP版本。目的IP版本是4,相应的二进制是0100
- 网际报头长度(IHL):这个4位字段表示IP报头以32字为单位的长度。
- 服务类型:源IP能够指定特殊的路由信息。这个8位字段的主要用途是对等待通过路由器的数据报区分优先级
- 总长度:这个16位的字段表示IP数据报的长度,单位为字节。
- 标识:这个16位的字段是一个依序变大的数值,分配给源IP发出的信息。当传递到IP层的消息太大而不能放到一个数据报里时,IP会把消息拆分到多个数据报,并对这些数据报排序分配相同的标识号。
- 标记:这个字段表示字段分段可能性。
- 分段位移:这个13位的字段是一个数值,被赋予每个连续的字段。目的设备的IP利用这个值重组分组。
- 生存时间(TTL):这个字段表示数据报在被抛弃之前能够保留的时间或路由器跳数。每个路由器都会检查这个字段,并且至少把它减去1,或数据报在路由器延迟的秒数。当这个字段的值为0时,数据报会被抛弃。
IP寻址
IP地址是一个32位的地址,被分为4个8位段(八位组)。人们不习惯使用32位的二进制地址或8位的二进制八位组,所以IP地址最常用的表达形式是“点分十进制形式”。在这种形式里,每个八位组都以相应的十进制数值表示,4个十进制数值以句号分割。
IP地址一部分是网络ID,另一部分是主机ID。划分网络ID和主机ID最初方案是使用地址分类。最近出现的CIDR无类别寻址降低了地址分类的重要性,但作为理解TCP/IP寻址的一个出发点,地址分类还是值得讨论的。
地址分类系统把IP地址划分到不同的地址类。绝大多数IP地址属于以下几类
- A类地址前8位表示网络ID,后24位表示主机ID
- B类地址前16位表示网络ID,后16位表示主机ID
- C类地址前24位表示网络ID,后8位表示主机ID
关于D类和E类地址:
- D类地址用于多播。多播是把一个消息发送到网络的子网。D类地址最前面的4位是1110
- E类网络是实验性质的,一般不用于生产环境。最前面5位是11110。
怎么判断二进制地址的前几个位说明了地址属于哪一类?
- 如果32位的地址以0开头,它就是A类地址
- 如果32位的地址以10开头,它就是B类地址
- 如果32位的地址以110开头,它就是C类地址
特殊的IP地址
全0的主机ID表示网络本身。比如IP地址129.152.0.0是指网络ID为129.152的B类网络。
全1的主机ID表示广播。广播是向网络中全部主机发送的消息。IP地址129.152.255.255就是网络ID为129.152的B类网络的广播地址
以十进制127开头的地址是环回地址。目的地址为环回地址的消息是由本地软件发送的,其目的在于测试TCP软件是否工作正常
RFC1597保留了一些IP地址范围用于私有网络,其设想是,这些私有网络不会连接到internet,所以不必要求是唯一的。目前,这些私有地址范围经常用于“网络地址转换”设备背后的受保护网络。
- 10.0.0.0~10.255.255.255
- 172.16.0.0~172.31.255.255
- 192.168.0.0~192.168.255.255
由于私有地址范围不必与其余地址同步,所以整个地址范围对于任何网络都是可用的,网络管理员利用这些私有地址可以获得更大的子网空间和可用地址范围。
地址解析协议(ARP)
网段上每台主机在内存中都保存着一个被称为ARP表或ARP缓存的表格,其中包含网段上其他主机IP与其物理地址对应关系。当主机需要向网段上的其他主机发送数据时,它会查看ARP缓存来获得目的的物理地址。如果要接收数据的地址当前并不存在于ARP缓存,主机就会发送一个名为ARP请求帧的广播。
ARP请求帧包含未解析的IP地址,还包含发送这个请求的主机IP和物理地址。网段上的其他主机接收到这个ARP请求,未解析IP地址的主机会向发出请求的主机发送主机的物理地址。这个新的IP地址与物理地址的对应关系就会添加到请求主机的ARP缓存里。
一般来说,ARP缓存里的条目在一定时间之后会过期,条目就会被从表里删除。当主机需要向这个条目所包含的IP地址发送数据时,解析过程会再次重复
逆向ARP(RARP)
RARP的含义是逆向ARP,也就是ARP的逆过程。当我们知道IP地址而不是物理地址时,可以使用ARP;而在知道物理地址而不知道IP地址时,则应使用RARP。
Internet控制消息协议(ICMP)
发送到远程计算机的数据通常会经过一个或多个路由器,这些路由器在把数据传输到最终目的地的过程中可能发生多种问题。路由器利用Internet控制消息协议(ICMP)消息把问题通知给源IP。ICMP还有用于其他调试和排错的功能。
下面列出了最常见的ICMP消息:
- Echo Request(回显请求)和Echo Reply(回显应答):ICMP经常被用于测试,比如测试连接的ping命令实际上就是在使用ICMP。ping向某个IP地址发送一个数据报,并且要求目的计算机在响应中返回所发送的数据
- Source Quench(源抑制):如果一台高速计算机向远程计算机发送大量数据,可能使路由器产生过载。这时路由器可以利用ICMP向源IP发送Source Quench消息,让它降低发送发送数据的速度。
- Destination Unreachable(目的不可到达):如果路由器收到一个不能传递的数据报,源IP就会返回一个Destination Unreachable消息
- Time Exceeded(超时):当数据报由于TTL为0而被抛弃时,ICMP就会向源IP发送这个消息
- Fragmentation Needed(需要分段):如果一个数据报的“Don't Fragment”位被设置为1。