主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层的传输单位是数据报,数据报是一个比较长的数据,分组是对数据报进行切割得到的一部分
功能:
IP数据报的首部分为固定部分和可变部分,固定部分占20B
版本指明使用IPv4/IPv6
首部长度:单位是4B,占用4位,可以从0000到1111,如果为1111,对应十进制数15,15×4B=60B,即IP数据报的首部为60B,其中固定部分20B,可变部分40B。因为固定部分为20B,因此最小为5,对应二进制数0101。
可以看到可变部分最后有一个填充部分,为了把可变部分填充为4B的整数倍,否则无法用首部长度表示
区分服务:指示期望获得那种类型的服务
总长度:首部长度+数据长度,单位是1B,占16位,最大取值对应十进制数为 2 16 − 1 = 65535 2^{16}-1=65535 216−1=65535
标识、标志、片偏移后面讲
生存时间(TTL):IP分组的保质期,经过一个路由器-1变成0则丢弃。确保分组不会永远在网络中循环
首部检验和:只校验分组的首部,而不校验数据部分,不重要
源地址和目的地址:各占32位
可选字段:0~40B,用来支持排错、测量以及安全等措施
填充:全0,把首部不成4B的整数倍
最大传送单元MTU:数据链路层数据帧可封装数据的上限,以太网的MTU是1500字节,也就是下图的数据部分
总长度占16字节,单位是1B
片偏移占13字节,单位是8B
首部长度占4字节,单位是4B
定义需要分片为长度不超过1420B的数据报分片
因为每一个分片都需要携带相同长度的首部,因此每个分片最大数据部分为1400B,
第一个分片数据部分为1400B,第二个1400B,第三个1000B
然后计算片偏移,第一个分片显然是从0B-1399B,因此片偏移为0;第二个分片从1400B-3799B,片偏移为 1400 B 8 B = 175 \frac{1400B}{8B}=175 8B1400B=175,类似地,第三个分片片偏移为为350
]
IP地址={<网络号>,<主机号>}
11011111.00000001.00000001.00000001=223.1.1.1(点分十进制)
上图共有6个逻辑上的网络
每个路由器总是有两个或两个以上IP地址,路由器的每个接口都会有不同网络号的IP地址
最前面固定的几位可以看做标志位
环回地址就是自己给自己发,检测设备是否可以正确的接受发送数据、网络层是否能正常工作等
A的最大可用网络数要-2,减去的是全0和127(环回地址);每个网络中的最大主机数也要-2,减去全0和全1
B的最大可用网络数要-1,减去的是128.0不可指派,也就是全0;每个网络中的最大主机数也要-2,减去全0和全1
C的最大可用网络数要-1,减去的是192.0.0不可指派,也就是全0;每个网络中的最大主机数也要-2,减去全0和全1
网络地址转换NAT:在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址
如果此时A要与B通信,A发出一个数据报,那么该数据报的源地址就是192.168.0.3,目的地址是213.18.2.4,端口号(假设)是30000,这时数据报到NAT路由器处,根据NAT转换表,需要将LAN端映射成WAN端,即该数据报的源地址就是172.38.1.5,目的地址是213.18.2.4,端口号是40001
端口号可以表明主机内的某一个进程
同理如果B向A发送一个数据报,那么该数据报的源地址就是213.18.2.4,目的地址是172.38.1.5,端口号(假设)是40001,这时数据报到NAT路由器处,根据NAT转换表,需要将WAN端映射成LAN端,即该数据报的源地址就是213.18.2.4,目的地址是192.168.0.4,端口号是30001
分类IP地址的缺点:
申请到一个网络后,划分子网是自己的选择,不需要向运营商申请。虽然划分了一个网络,但是对外仍表现为一个网络,即外面的网络看不见本网络内子网的划分
子网号能否全0全1要看情况,主机号不能全0全1,全0就是本网络,全1就是广播
假设此时有一个外部网络的数据报要发给145.13.3.10
子网掩码是一个与P地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成。其中,1对应于IP地址中的网络号及子网号,而0对应于主机号。计算机只需将IP地址和其对应的子网掩码逐位“与”(逻辑AND运算),就可得出相应子网的网络地址。
例如:已知IP地址是141.14.72.24,子网掩码是255.255.192.0,求网络地址
255是8个1,0是8个0,因此子网地址是141.14.xxx.0
192=11000000,72=01001000,与的结果是01000000即64
因此子网网址为141.14.64.0
如果子网掩码是255.255.224.0,求网络地址
结果一样141.14.64.0
但第一个子网掩码占了18位,剩下14位都是主机号,第二个子网掩码占了19位,剩下13位都是主机号
例:某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址是
子网网络地址为180.80.xxx.0
252对应11111100,这里可以看出子网掩码有8+8+6=22位,77对应01001101,取前6位进行与运算,得到01001100,对应76,因此子网掩码是180.80.76.0
现在需要进行广播,因此主机号全是1,之前说网络号占22位,剩下10位都是主机号,因此加上之前算的子网掩码后6位,即为180.80.010011 11.255,因此就得到了180.80.79.255
要注意子网掩码是11111111.11111111.11111100.00000000,因此第三部分被划分成了两块,前6位是网络号,后两位是主机号
使用子网掩码的情况
使用子网掩码时路由器的分组转发算法如下:
无分类域间路由选择即CIDR
CIDR记法:IP地址后加上/,然后写上网络前缀(可以任意长度)的位数,e.g.128.14.32.0/20
融合子网地址与子网掩码,方便子网划分
CIDR把网络前缀相同的连续的IP地址组成一个CIDR地址块
128.14.35.7/20是某CIIDR地址块中的一个地址
变成二进制:10000000 00001110 00100011 00000111
最小地址:10000000 00001110 00100000 00000000
最大地址:10000000 00001110 00101111 11111111
地址块:128.14.32.0/20
地址掩码(子网掩码):11111111 11111111 11110000 00000000
应用
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合
方法:将网络前缀缩短
例如,在如图所示的网络中,如果不使用路由聚合,那么R1的路由表中需要分别有到网络1和网络2的路由表项。不难发现,网络1和网络2的网络前缀在二进制表示的情况下,前16位都是相同的,第17位分别是0和1,并且从R1到网络1和网络2的路由的下一跳皆为R2。若使用路由聚合,在R1看来,网络1和网络2可以构成一个更大的地址块206.1.0.0/16,到网络1和网络2的两条路由就可以聚合成一条到206.1.0.0/16的路由。
例:某路由表中有转发接口相同的4条路由表项, 其目的网络地址分别为35.230.32.0/21、35.230.40.0/21、 35.230.48.0/21、 35.230.56.0/21, 将该4条路由聚合后的目的网络地址为,35.230.32.0/19
在使用CIDR时,查找路由表可能得到几个匹配结果(跟网络掩码按位与),应选择具有最长网络前缀路由。前缀越长,地址块越小,路由越具体
例如:有三个网络地址206.0.68.0/22、206.0.71.128/25、206.0.71.0/25,现发出一个数据报,目的地址为206.0.71.130
与第一个网络的子网掩码进行与运算,结果为206.0.68.0/22,可以发送给第一个网络
与第二个网络的子网掩码进行与运算,结果为206.0.71.128/25,可以发送给第二个网络
与第三个网络的子网掩码进行与运算,结果为206.0.71.128/25,不可以发送给第三个网络
我们得到可以发给一、二两个网络,但是根据最长前缀匹配,显然第二个网络匹配了25位,长于第一个网络22位,因此发给第二个网络