文章目录
- IP协议相关特性
- 地址管理
- NAT机制
- IP地址的组成
- 特殊的IP地址
- 路由选择
- 数据链路层相关内容
- 以太网
- MTU
IP协议相关特性
首先我们来认识一下IP协议的报头:
4位版本号:指定IP协议的版本,对于IPv4就是4.
4位头部长度:IP头部的长度是多少个32bit,也就length*4的字节数,4bit表示的最大数据是15,因此IP头部最大长度是60个字节。
8位服务类型:用于分配优先级、延迟、吞吐量以及可靠性;前3位是优先级,后面4位成为服务类型,最后1位没有定义。
16位总长度:IP数据报整体占多少个字节。
16位标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每个片里面1这个id都是相同的。
3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
13位分片偏移:是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。用于重组源数据。
8位生存时间:数据报到达目的地的最大报文跳数,一般为64,每次经过一个路由,TTL -= 1,一直减到0还没有到达,那么就丢弃了,可以防止出现路由循环。
8位协议:表示上层协议的类型。
16位头部校验和:使用CRC进行校验,用来甄别头部是否损坏。
32位源地址和32位目的地址:表示发送端和接收端。
地址管理
从上述的IP数据报头可以看出来,IP地址是一个4字节,32位的整数。但是我们通常会把这个32位的整数转换成点分10进制的表示方法
这样一串东西就是我的IP地址,三个点把整数分成了4个部分,每一个部分就是一个字节,每个部分的取值范围位0-255。
我们可以尝试着计算一下一个32位的整数可以产生多少不同的地址呢?42亿9千万个,在过去的互联网环境下,42亿9千万个IP地址绝对够我们使用,可是互联网飞速发展,这个地址数量已经不够用了,如何解决这个问题呢?
有两个解决方法:
一个是动态分配IP地址:只给正在上网的设备分配地址,没有上网的设备不给分配地址。
另一个就是NAT机制。
NAT机制
NAT机制将IP地址分为了两大类,一类我们称为内网,一类称为外网。
内网IP:
10.*
、172.16.*
-172.32.1.*
、192.168.*
内网IP可以重复出现。
外网IP:剩下的所有IP 外网IP必须唯一
类似于上面这样的结构,当我要在哔哩哔哩上搜索IP协议讲解,此时我的电脑就会找到路由器,告诉路由器我要干什么,路由器此时就会针对源IP进行替换,替换成路由器自己的IP之后将数据报发送给哔哩哔哩服务器,此时哔哩哔哩的服务器接认为收到的这是数据来自于1.2.3.4这个IP,而不是192.168.0.79这个IP。因为外网设备是无法直接访问内网的设备的。
此时我的舍友也在哔哩哔哩上搜索小姐姐跳舞,同样要经过路由器进行IP替换后发送给哔哩哔哩的服务器。那么问题来了服务器返回数据时,目的IP都是路由器的IP,如何区分那个数据报是给哪一个主机的呢?路由器做了IP替换,他也会记得是谁替换了谁。
NAT背景下如何通信:
1、外网设备 >> 外网设备,可以直接通信
2、内网设备 >> 其他内网设备, 不允许
3、外网设备 >> 内网设备, 不允许
4、内网设备 >> 外网设备,对应的内网设备的路由器,触发NAT机制进行IP替换,此时就会给这个网络数据报的源IP替换成路由器自己的IP。
IP地址的组成
IP地址分为了两个部分,网络号和主机号。
网络号:标识网段,保证相互连接的两个网段具有不同的标识。
主机号: 标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
下面我来通过画图说明一下网络号和主机号的规则,一般家里的局域网由路由器连接,路由器一般都会有两个口一个Wan
口用于连接广域网,一个Lan
扣用于连接局域网,有时候Wan
口并非真正意义的广域网。
此时路由器就连接了两个相邻的局域网,在我的电脑所在的局域网中,网络号为192.168.0.
,同时在这个局域网中的各个设备的主机号不能重复。家用电视所在的局域网中网络号为192.168.1.
,同样这个局域网中的各个设备的主机号也不能重复,同时因为这个路由器将两个局域网连接在一起了,这两个局域网就被成为相邻的局域网,这个时候两个局域网的网络号也不能重复。
那么问题又来了,如何区分网络号和主机号呢?是不是前三个字节一定是主机号而后一个字节一定是网络号呢?不是的,对于网络号主机号的划分是有两种分类方法的:1、IP地址类型(ABCDE)2、子网掩码
IP地址类型(ABCDE)
用前缀来区分类别,每个类别有固定的网络号位和主机号位。
子网掩码
子网掩码站在二进制的角度看,左侧都为1右侧都为0,为1的部分有几位,就有几位网络号,剩下的就是主机号了。
特殊的IP地址
主机号全部为0的
例如:192.169.0.0 这个就是一个网络号,局域网中不存在某个主机的主机号为0。
主机号全部为1的
192.168.0.255 这是一个广播地址。
ip为127.*开头的我们成为环回IP
主机号为1的,一般作为
网关IP
,这个不是绝对的。
路由选择
传输层关注的端到端,而网络层关注的是究竟选择哪一条路实现端到端,因为互联网中的设备非常之多,所以这条路存在了大量的冗余,如何筛选路径,这个就是路由选择需要做的事情了。
类似于高德地图导航,当我们知道出发地和目的地后,有很多条路都可以到达目的地,但是高德地图会选择一条最近的路,网络上也是一样,区别在于,高德地图可以记住所有的路,而在网络中路由器的能力有限,他只能记住自己周围的设备并且生成一个路由表来记录,我们进行路由选择时没到达一个路由器就会“问路”,但是有可能该路由器的路由表中没有这个目的IP,此时路由器会指出一条默认的路径(路由表中的“吓一跳表项”),这个路由器更高一级,所以更见多识广,反复这样问路最后找到目的IP,规划出来了一条路径,这就是路由选择。
数据链路层相关内容
以太网
首先我们先来认识一下以太网帧
数据链路层关注的是相邻节点的传输,所以有mac地址,占6个字节,相比于IPv4的4字节大了很多,所以当前的每个设备都有唯一的mac地址。
类型为0800的是用来传输数据的以太网帧,类型为0806和8035的是特殊的以太网帧。
值得注意的是,以太网帧的最大载荷为1500,那么如果IP数据报内容大于这个最大载荷怎么办呢?
MTU
一般我们把数据链路层的数据帧的最大载荷成为MTU,如果承载的数据长度超过这个MTU,那么就会在IP层进行分包,是每个数据帧都在MTU的范围之内。
在之前的IP协议的报头我们需要关注三个内容:
1、16位标识:一个大的IP数据报,拆成对各小的报之后,这个标识都是一样的。
2、3位标志位:有1位不用,1位表示是否分包了,还有1位表示当前这个分包是否是最后一个(结束标志)。
3、13位片偏移:简单来说就是表示了每个小的数据报的先后顺序,用来组包的。