计算机网络第四章——网络层2
IP地址与物理地址(硬件地址)
计算机网络通信过程
结合协议栈看数据流动
从虚拟的IP层上看IP数据报的流动
在链路上看MAC帧的流动
在IP层抽象的互联网上只能看到IP数据报
图中的IP1 一> IP2,表示从源地址IP1到目的地址IP2
两个路由器的IP地址并不出现在IP数据报的首部中
路由器只根据目的站的IP地址的网络号进行路由选择
在具体的物理网络的链路层中只能看到mac帧而看不见IP数据报
IP层抽象的互联网屏蔽了下层很复杂的细节在抽象的网络层上讨论问题,就能够使用统一的、抽象的P地址研究主机和主机或主机和路由器之间的通信
地址解析协议ARP
IP地址通过ARP转化为物理地址,而物理地址通过RARP转化为IP地址
概述
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的P地址到硬件地址的映射表。
当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。
工作原理
ARP高速缓存的作用
为了减少网络上的通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到硬件地址的映射写入ARP请求分组。
当主机B收到A的ARP请求分组时,就将主机A的这一地址映射写入主机B自己的ARP高速缓存中。这对主机B以后向A发送数据报时就更方便了。
地址映射项目的生存时间
ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间(例如10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。
设置这种地址映射项目的生存时间是为了保证高速缓存中信息的新鲜性。
ARP使用情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
- 发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址。
- 发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
ARP的问题
- ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的硬件地址。
不直接使用硬件地址进行通信的原因
- 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
- 连接到因特网的主机都拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
RARP协议(逆地址解析协议)
允许局域网的物理机器从网关服务器的ARP表或缓存上请求IP地址。比如局域网中有一台主机只知道自己的物理地址而不知道自己的IP地址,那么可以通RARA协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。RARP协议广泛应用于无盘工作站引导时获取IP地址。RARP允许局域网的物理机器从网关服务器ARP表或者缓存上请求其IP地址。
工作原理
- 主机发送一个本地RARP广播,在广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址。
- 本地网段的RARP服务器收到此请求后,检查器RARP列表,查找该MAC地址对应的IP地址。
- 如果存在,RARP服务器就给源主机发送一个响应数据包,并将IP地址提供给对方主机使用。
- 如果不存在,RARP服务器对此不做任何响应。
- 源主机收到从RARP服务的响应信息,就利用得到的IP地址进行通信。如果一直没收到RARA服务器的响应信息,表示初始化失败。
使用场景
RARP用于将一个已知的MAC地址映射到IP地址。
RARP要依赖于RARP服务器,该服务器中有一张MAC地址与IP地址的映射表。
需要查找自己IP地址的站点向网上发送包含有其MAC地址的RARP广播,RARP服务器收到后将该MAC地址翻译成IP地址予以响应。
RARP同样只能用于具有广播能力的网络。
DHCP协议已经包含了RARP协议的功能
无需我们单独使用
IP数据报
IP数据包由首部和数据两部分组成。
首部的前一部分是固定长度,共20个字节,是所有IP数据包必须有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的。
首部
固定部分
按位: 4 4 8 16 16 3 13 8 8 16 16 16
版本
占4位,指IP协议的版本。IP协议目前有两个版本IPv4和IPv6。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4 )
首部长度
占4位,可表示的最大十进制数值是15。
请注意,这个字段所表示数的单位是32位二进制数(即4个字节),
因此,当IP的首部长度为1111时(即十进制的15),首部长度最大达到60字节。
区分服务
占8位,配置计算机给特定应用程序的数据包添加一个标志,然后再配置网络中的路由器优先转发这些带标志的数据包,在网络带宽比较紧张的情况下,也能确保这种应用的带宽有保障,这就是区分服务,为这种服务确保服务质量( Quality of Service , QoS )。
服务类型(TOS)
TOS常用来做QOs,用于在数据传输过程中的质量保证
占用8位二进制位,用于规定本数据报的处理方式。
服务类型字段的8位分成了5个子域
- —优先权(0-7)数越大,表示该数据报优先权越高。网络中路由器可以使用优先权进行拥塞控制,如当网络发生拥塞时可以根据数据报的优先权来决定数据报的取舍
- —短延迟位D(Delay):该位置1时,数据报请求以短延迟信道传输,0表示正常延时
- —高吞吐量位T(Throughput):该位置1时,数据报请求以高吞吐量信道传输,0表示普通
- —高可靠位R(Reliability)∶该位置1时,数据报请求以高可靠性信道传输,0表示普通
- —保留位
说通俗一点路窄、车多,所以对车辆标出优先级,有些车先走,有些车后走,有些车不让走。
路由器跟交警一样,指挥交通,如何操作,取决事先确定的策略。对于终端而言(比如电脑),已经收到报文,所以就不会关心这个字段。
总长度
指IP首部和数据之和的长度,也就是数据包的长度,单位为字节。总长度字段为16位,因此数据包的最大长度为216-1=65535字节。实际上传输这样长的数据包在现实中是极少遇到的。
总长度,首部长度,数据荷载长度关系
例题:已知IP数据报首部长度和总长度分别为0101和0000001111111100,求荷载长度
首部长度(因为占4位,每位是4个字节所以要乘4):0101 转换为10进制=》5 =》5 × 4 = 20 字节
总长度:0000 0011 1111 1100 =》1020 字节
数据荷载长度 = 总长度 - 首部长度
所以为1020 - 20 = 1000 字节
标识( identification )
占16位,它是个计数器,用来产生数据报的标识
IP软件在存储器中维持一个计数器,每产生一个数据包,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的MTU而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是数据包这个标识字段的值就被复制到所有的数据包分片的标识字段中。相同的标识字段的值使分片后的各数据包片最后能正确地重装成为原来的数据包。
标志( flag )
占3位,但目前只有两位有意义。标志字段中的最低位记为MF(More Fragment )。MF= 1 即表示后面“还有分片”的数据包。MF= 0 表示这己是若干数据包片中的最后一个。标志字段中间的一位记为DF (Don’t Fragment ),意思是“不能分片”。只有当DF= 0时才允许分片。
片偏移
占13位。片偏移指出︰较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
生存时间
生存时间(8位)记为TTL (Time To Live)
数据报在网络中可通过的路由器数的最大值。
表明是数据包在网络中的寿命。现在TTL字段的功能改为“跳数限制”
TTL
占8比特,最大值是255,推荐值是64。
TTL是IP数据包在计算机网络中可以转发的最大跳数,限制IP数据包在计算机网络中的存在的时间。
在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。
如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送ICMP time exceeded消息。
作用:
TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。
协议
占8位,字段指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程
首部检验和
占16位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
这里不采用CRC检验码而采用简单的计算方法。
如何计算检验和?
- 截取IP数据报(一般题目会直接给你)
- 将校验和字段设置为0。
- 把需要校验的数据看成以16位为单位的数字组成,依次进行二进制求和。
- 求和后超过16位的加到低16位。
- 最后结果取反就是检验和。
例子:
报文:45 00 00 30 80 4c 40 00 80 06 b5 2c d3 43 11 7b cb 51 15 3d
由16进制和固定部分可知检验和在第11,12位即 b5 2c
所以把b5 2c 置为 00 00
得到 45 00 00 30 80 4c 40 00 80 06 00 00 d3 43 11 7b cb 51 15 3d
(两两求和)求和:4500+0030+804c+4000+8006+ … = 3 4ACE
头部3加到尾部:4ACE + 3 = 4AD1
取反(FFFF - 4AD1):B52E
所以检验和就是:B52E
源地址和目的地址
各占4字节
例题
IP数据报分配
片偏移
可变部分
IP首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
选项字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,这就增加了每一个路由器处理数据报的开销。
实际上这些选项很少被使用。