一、IP协议报头
-
版本号:用来表示IP协议的版本,现在常用的IP协议有两个版本,IPv4和IPv6,其他版本可能只存在于实验室中,并没有被广泛的使用。
-
首部长度:用来表示IP报头的长度,因为存在"选项"字段,所以IP报头是可变长的,此处单位为4个字节。取值范围:20-60字节。
-
服务类型:虽然有8位但是真正只有4位才有效,用来表示IP协议的4工作模式:最小延时、最大吞吐量、最高可靠性、最小成本,四种模式互斥,只能切换到一种模式。虽然IP协议支持这个机制,但在实际中很少用到。
-
总长度:表示的是整个IP数据报的长度,即IP报头长度+载荷的长度。这里的总长度使用了16bit,只能表示到64kb的数据,所以当携带的数据比较多的时候,IP协议会自动将数据报拆成多份,而数据到了接收方又会进行合并操作。
-
标识+标志位+片偏移:用来帮助IP协议正确拆包组包。当IP的载荷数据比较多的时候,会进行拆包,而同一个数据报中多个包的标识是相同的,然后再根据包的先后顺序进行片偏移的赋值。其中的标志位,一共3bit,一位不作使用,一位用来表示是否允许拆包,还有一位用作"结束标记",判断是否为最后一个包。
-
生存时间(TTL):表示一个数据包在网络上最多被转发多少次,每经过一个中间节点就减1,比如有一个TTL的初始值为32,在经过32次转发后就会减为0,此时这个数据包就会被丢弃,表示不可达。
-
协议:表示上层使用的是哪种协议。
-
首部校验和:检验IP协议数据包的头部是否出现错误,后面的载荷为TCP/UDP,可以自己检验。
二、IP地址
在网络的世界中有许多的主机,彼此之间要使用IP地址找到对方才能通信,因此每个IP地址原则上是不能重复的。而所谓的IP地址本质上是一个32位的整数。不过为了便于叙述与记忆往往会使用点分十进制表示。
32位能表示的数据量是有限的,大约为42亿,随着网络的迅速发展,上网的设备越来越多已经超出了32位能表示的范围了,如何解决32位IP地址不够用呢?
DHCP(动态分配IP)
通过使用类似分时复用的方式,当主机需要上网的时候进行分配一个IP地址,不需要就先不分配,这种方式无法改变总量,只能缓治(你咋确定不会正好有42亿人一起上网呢?)。
NAT机制(网络地址转换)
NAT机制本质上是使用了IP地址的复用,将网络分为了两大类,一类为内网,另一类为外网。外网之间可以直接通信,而内网之间不可以。
由于内网可以复用,因此就会出现两台不同的主机的IP地址相同的情况,此时要通信的话,需要借助外网。
大致流程如下:
在发送的过程中,每经过一个路由器的时候就会触发NAT机制,路由器会将自己IP地址替换到当前IP数据报的源IP地址,因此接收端也无法知道这个数据报是源自哪的,只知道是上一级交付的。对于每一个带有NAT机制的路由设备也都会使用一个映射表来维护对应关系,这样当一个数据报过来之后,通过查表就知道发给谁了。
在NAT机制下,一个外网IP代表的不一定是一个设备了,而是很多很多设备,但是NAT也有非常明显的缺点:
非常繁琐,不方便直接访问局域网设备,需要多层路由转发才能访问另一个局域网中的设备。
虽然NAT进一步提高了利用率,但是也没有从根本上解决问题,但为啥还是在当今广泛使用呢?这是因为NAT是一个纯软件实现的方案,开发商只需要更新一下软件,这样就能大大降低成本。
IPv6
IPv6算是从根本上解决了IP地址不够用的问题。因为IPv6增长到了16个字节,128位,其能表示的数据范围相当于能给地球上的每一粒沙子都分配一个IP地址。
但是IPv6并没有发展起来,这是因为IPv4使用的是4个字节,因此两个协议无法兼容,要想升级IPv6就得更换硬件,但这并不会提高网速,用户也就感知不到,运营商也就赚不到钱......
更多知识可参考:电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅_哔哩哔哩_bilibili
IP地址组成
IP地址由两部分组成:网络号+主机号。
网络号:标识网段,保证相互连接的两个网段具有不同的标识。
主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是主机号必须不同。
那么如何区分网络号和主机号呢?使用子网掩码。
子网掩码和IP地址一样,也是4个字节,32位的整数,但是子网掩码要求,左侧必须为连续的1,右边必须为连续的0,即0和1不能穿插出现。其中1的范围就描述了IP地址的网络号,0的范围则是主机号。
这里就表示前23位为网络号,后9位为主机号。
子网掩码是现代的一种划分网络号的办法,上古时期还有一种:
特殊的IP地址
1.IP地址中的主机号全部位0,就成了网络号。
2.IP地址中的主机号全部设为1,就成了广播地址。例如:192.168.0.255,子网掩码:255.255.255.0,此时这个地址就是广播地址了,往这个地址发送UDP(TCP无法和广播地址握手)数据报,那么这个局域网中所有设备都会接收到。
3.127.*的IP地址用于本机环回地址,通常为127.0.0.1。