目录
一、IP协议报头格式
二、地址选择
1、IP地址
(1)格式
(2)组成
(3)分类
(4)子网掩码
三、路由选择
IP协议是网络层的协议,它主要完成两个方面的任务:
(1)4位版本号:IP协议的版本号,当前主要有两个取值:4和6,即IPv4和IPv6。
(2)4位首部长度:IP报头和TCP报头类似,都是可变的,带有选项。
4 位的取值范围0~15,这里的单位也是 4字节。
即如果取值是1111 -> 15,实际表示的首部长度就是 60(15 * 4)字节。
(3)TOS(8位服务类型):其实只有四位是有效的。相当于切换形态。(同一时刻,只能取一种状态)。
4 位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。
(4)16 位总长度(字节数):IP数据报整体占多少个字节。类似UDP,单个IP数据报最大的长度不能超过64K。
如果要构造一个更长的数据报(比如搭载的载荷部分已经超过64K了):IP协议自身就实现了分包和组包这样的操作。(标识和片偏移)
(5)16 位标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了(分包),那么每个片里的这个标识id都是相同的。
(6)3 位标志字段:
(7)13 位片偏移:是分片相对于原始IP报文开始处的偏移。就是表示当前的这个分片是在原来报文中的哪个位置。用来描述这些分片谁先谁后。
实际偏移的数不是单纯的1、2、3....,而是可以基于片偏移来算出中间差多少空间的。
(8)8 位生存时间(TTL):数据报到达目的地的最大 报文跳数。
表示一个IP数据报,在网络上还能存在多久。一般是 64。每次经过一个路由,TTL -=1,一直减到 0 还没到达,就丢弃了。用来防止出现路由循环。(有些包里面的IP地址,可能是永远也到不了的,像这样的包,不能让其在网络上无休止的转发,这样会占用太多硬件资源)
(9)8 位协议:表示上层的协议类型。即传输层用的是哪种协议(TCP和UDP 都有不同的取值)。
(10)16 位首部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。
(11)32 为源地址 和 32 位目的地址:表示发送端(的IP地址)和接收端(的IP地址)。
(12)选项字段:不定长,最多40个字节。
IP地址是指互联网协议地址(网际协议地址)。
IP地址是 IP协议 提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机都分配了一个逻辑地址。
IP地址是一个 32 为的二进制数,通常被分割为4个字节。用“点分十进制”的方式来表示。
例如:100.4.5.6
IP地址分为两个部分:网络号(标识网段) + 主机号(标识主机)。
过去曾经提出过一种划分的方案,把所有IP地址分为5类,如下图所示。
其中有几个特殊的IP地址:
使用上述的分类,会出现一些资源浪费的问题。例如一般单位会申请 B 类网络,但是 B 类网络的最大连接主机数量是 65534,实际上连接的主机远远小于这个数字,就造成了资源浪费。
因此就有了子网掩码。
IP地址有 32 bit位,那么哪些是网络号,哪些是主机号呢。其实是不固定的。子网掩码就是用来表示多少个bit位是网络号的。
子网掩码,也是一个 32 位的点分十进制的整数。子网掩码的左侧都是1,右侧都是0 。而左边的这些 1 就表示哪些位是网络号,剩下的 0 就是表示哪些位是主机号。
例如:255.255.255.0 -> 1111 1111 1111 1111 1111 1111 0000 0000 (前 24 个bit位是网络号,后 8 个bit位是主机号)
计算方式:
网络通信时,子网掩码结合IP地址,可以计算获得网络号及主机号。一般用于判断目的IP与本IP是否为同一个网段。
将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号。
(5)外网IP和内网IP:
IP地址是10开头、192.168开头、172.16~172.31开头,表示该 IP 是一个局域网内部的IP(内网IP)。除此之外,剩下的IP称为 外网IP(直接在广域网上使用的 IP)。
要求外网IP一定是唯一的,每个外网IP都会对应到唯一的一个设备。内网IP 只是在当前局域网中时唯一的,在不同的局域网里,可以有相同的 内网IP 的设备。
其作用:
咱们现在生活中时 IPv4协议,使用的IP地址是 32 位整数。但是随着时间推移,世界上的设备越来越多,让每一个设备都有唯一的一个IP地址就不现实了。就有如下方法了。
① 动态分配IP地址:让每个设备上网的时候才分配IP地址,不联网的时候这个IP就给别人。(不能从根本上解决问题,所以我们现实中不采用)
② NAT机制:让多个设备共用一个 IP (外网IP)。
这个机制就是把网络分成了 内网(局域网)和 外网(广域网)。要求 外网IP 必须表示唯一的设备,同时内网中的若干设备,可以共用同一个外网IP。这个时候每个外网IP就都可能表示着几百个甚至上万个设备了,此时IP地址的压力就缓解了很多。
两个外网之间的连接,如果外网A里有多台 PC 都向 外网B 发送连接,那么外网B如何区分这两个连接谁是谁呢?靠端口号。
NAT机制也说明了:
对于一个外网IP,可以在互联网任意位置都能访问到。
对于一个内网IP,只能在当前局域网内部访问。局域网1 的设备,不能使用 内网IP 访问局域网2的设备。(内网IP可以重复出现,只有在当前局域网内才是唯一的)。
现实生活中,运营商的路由器就会在这里修改IP数据报,从内网发出带有这样功能的路由器设备,也叫做 NAT设备。
NAT 设备:
NAT 不光会将 IP 调整为外网IP。还会对端口进行调整,如果端口不一样,就罢了;如果端口一样,NAT 就会调整成不同的端口号,再转发出去。 同时 NAT 会记录这个映射关系,以此保证服务器返回的数据,可以再按照这个映射关系给还原回去。
③ IPv6:IPv6 是在报头中使用了一个更长的字段来表示 IP 地址,16 个字节,128 bit位(IPv4是 4个字节)。
但是现在依然用的是IPv4+NAT。因为这里最大的问题就是 IPv4和IPv6是不兼容的,对于一个设备来说,支持IPv4和IPv6需要两个截然不同的机制,而现有的大量的网络设备(路由器...)很可能都是只支持IPv4,不支持IPv6的。
路由选择就是规划路径。两个设备之间,要找出一条通路能够完成传输的过程。而要想找出通道,就得先认识路。
IP协议的路由选择也是类似的,IP数据报中的目的地址,就表示了这个包要发到哪里去。这个目的地址,如果当前的路由器直接认识,就直接告诉你路了;如果当前路由器不认识,就会告诉你大概的方向,让你走到下一个路由器的时候再来问问。就这样一次往后走,就会离目的地址越来越近,这个时候总是会遇到一个认识这个地址的路由器,于是就可以具体转发过去了。如果认识了多个路,就可以进行选择,选择一个合适的路径进行传输。
在路由器的内部,维护了一个数据结构——路由表。路由表里面就记录了一些网段信息(网络号...)以及每个网络号对应的网络接口(对应到路由器里面的具体的端口),目的IP就在这些网络号中进行匹配。而路由表中有一个默认表项,就是当 IP地址 在路由表的所有表项中都匹配不上的时候,此时就会走这个下一跳。