目录
1、IP协议
1.1、IP协议报头
1.2、解决IPv4地址不够用的问题
2、IP地址管理
2.1、IP地址的组成
2.1.1、子网掩码
2.1.2、IP地址的分类
3、路由选择
4、数据链路层协议:以太网协议
IP协议属于TCP/IP模型的网络层,在网络层协议存在很多,IP协议作为一个比较重点的协议我们在本篇博客中进行了解。IP协议具有地址管理和路由选择这两个重要的作用,IP协议版本现在具有两种版本IPv4与IPv6,现在使用最广的是IPv4版本,IPv6的出现是为了解决IPv4这个版本的IP地址不够用的问题。
- 4位版本号: 指定IP协议的版本,对于IPv4来说,就是4.
- 4位首部长度(IHL):描述了IP协议的首部长度(报头),单位是4字节(32比特),首部最短就是没有可选字段+填充,那么IP协议报头就存在5行必要的信息,每行信息有32bit(4个字节),因此总共有5*4 = 20个字节,首部最长长度,因为首部长度占4bit,4bit可以表示的范围是0~15,所以最大值是15,那么最大长度就是15*4=60个字节。
- 16位总长度:表示IP首部与数据部分合起来的总字节数,该字段长16bit,因此IP报的最大长度为65535个字节。也就是64kb.
- 3位标志:在后面的内容中有,这里就不介绍了。
- 13位片偏移:用来标识被分片的每一分段相对于元素数据的位置。第一个分片对应的值位0.
- 8位生存时间:它最初的意思是以秒为单位记录当前报在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该报。这个字段主要是用来防止出现路由循环。
- 8位协议:表示IP首部的下一个首部隶属于那个协议。这个协议包括UDP和TCP等的协议。
- 16位首部校验和:也叫IP首部校验和,该字段只校验数据报的首部,不校验数据部分(IP数据报的载荷部分UDP/TCP数据报已经有校验和了),它主要用来确保IP数据报头部不被破坏。
由于IPv4版本的IP地址是32位(4个字节)的,所以能过表示的范围在不考虑负数的情况下是42亿9千万,这个数字在当今这个时代中,就显得比较小了,现在我们每个人至少都有一台设备上网,这个时候就需要给这台设备分配一个的IP地址,当然我们是期望每个设备都有一个唯一的IP,那么全世界这么多台设备,显然IPv4这个版本的地址不够用。所以这个时候就需要一些解决办法。
1️⃣动态分配IP地址(DHCP)
设备上网才分配IP地址,不上网就不分配IP地址,这个时候就可以省下很多的IP地址,这种方法只能一定程度的缓解IP地址不够用的问题,并不能彻底解决,这就是因为这个方法并没有增加IP地址的数量。
2️⃣网络地址转换(NAT机制)
在NAT机制下将IP地址分为了内网IP和外网IP两大类。
内网IP(私有IP)
内网IP始于非注册地址,专门为组织机构内部使用。因特网分配委员会保留了3块IP地址作为私有IP地址,10.0.0.0——10.255.255.255;172.16.0.0——172.31.255.255;192.168.0.0——192.168.255.255.
内网IP可以在不同的局域网中重复出现,如果内网中一个设备要访问外网,会给它分配一个外网IP,但是这个外网IP不会被这个设备独占,而是这个内网中所有的设备都共用这一个外网IP。一个路由器连接的网络设备就是处在内网中,也就是局域网。
外网IP(公有IP)
外网IP是指合法的IP地址,对外代表一个或者多个内部局域地址,是全球统一的可寻址的地址。
NAT机制就是在局域网中使用内网IP,而当内部结点要与外部网络进行通信时,就要在网关处,将内网IP替换成外网IP,从而在外网上正常使用,NAT机制可以使多台计算机共享Internet连接。通过这种方法就可以只申请一个合法的IP(外网IP),就把整个局域网中的计算机接入Internet中。
就比如,现在两个内网设备要访问百度的服务器(内网设备访问外网设备),路由器会将这两台计算机的内网IP转换成外网IP,去访问百度的服务器。
主机1和主机2想要访问百度服务器首先要构造数据报,这个数据报中包含了源IP和目的IP,通过路由器转发,路由器拿到这个数据报之后,就会把主机2发来的数据报的源IP替换成路由器的IP(公有IP),将这个数据报发送给百度服务器,百度服务器将数据处理之后,通过路由器的公有地址,将数据发送给路由器。这个时候,路由器会根据端口号将响应发送给相应的计算机(之前说到端口号是用来区分同一个计算机的不同进程的,这里用来区分不同计算机的不同进程也是完全可以)。
在现实生活中,我们是将前动态分配IP和网络地址转换结合使用的,这样虽然缓解了IP地址不够有的问题,但是还是没有从根本上解决这个问题。
❗注意:在NAT背景下通信
- 外网设备访问外网设备,不需要任何的NAT,直接就能通信
- 内网设备访问其他内网设备是不被允许的。但是可以使用一个外网设备进行中转,也就实现了通信。
- 外网设备访问内网设备这也是不被允许的。
- 内网设备访问外网设备,对应的内网设备的路由器就会触发NAT机制进行IP替换,此时就会给这个网络数据的源IP替换成路由器字节的IP。
3️⃣使用IPv6地址
IPv6是使用16个字节(128位)来表示IP地址的,这就使IPv6可以表示的IP地址个数是一个天文数字了,给地球上的每一粒沙子都分配一个IPv6版本IP地址都是够用的,虽说IPv6可以完美解决IP地址不够用的问题,但是从IPv6被提出到现在真正被使用到的还是非常少的,现实中还是大量的使用IPv4版本的IP地址。这主要还是IPv4和IPv6不兼容,想要大范围的使用IPv6,就需要将原本的路由器等的网络设备更换掉,这个更换的成本还是很大的,还有原因就是目前IPv6的各方面还没有IPv4一样成熟。
IP地址分为两个部分,网络号和主机号
- 网络号:用来标识网段(标识一个局域网),保证相互连接的两个网段具有不同的标识;
- 主机号:用来标识主机(标识一个局域网内部的主机),同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
就比如这样一个IP地址192.168.1.8,192.168.1表示的就是网络号,8表示的就是主机号。通过下面的局域网环境来了解一下网络号和主机号。
一个路由器存在两个IP分属不同的网段(局域网),通过这两个IP就可以将两个局域网连接在一起,此时这两个局域网就称为"相邻"局域网,这两个局域网的网络号是不能重复的。上述图片中路由器和光猫都有两个IP,一个是LAN口IP,一个WAN口IP,路由器的WAN口连接在光猫的LAN口,这个时候连接在光猫的LAN口的设备的网络号和路由器的WAN口IP的网络号相同。光猫的WAN口连接着光纤。
但是在一个IP地址中,哪个部分是网络号,那个部分是主机号,不一定是前三个字节表示网络号 。对于网络号和主机号的划分,主要有两种分类方式,一种是通过IP地址分类(ABCDE),一种是子网掩码。
子网掩码格式和IP地址一样,也是一个32位的二进制数,其中左边是网络号,用二进制数字"1"表示,1的数目等于网络的长度;右边是主机位,用二进制数字"0"表示,0的数目等于主机位的长度。家用网络的子网掩码一般都是255.255.255.0。
子网号
我们通过下面的例子来了解一下IP地址为192.168.1.113,子网掩码为255.255.255.192,我们将他们转换成二进制的形式。
按照子网掩码的定义,子网掩码中1所对应的为网络号位,而0所对应的位为主机号位,可以看到上述使用的子网掩码中原本主机号被借走了两位用来表示网络号了,这就是子网号。
这五类IP地址的前缀使用来区分类别的,每个类别下,网络号和主机号长度都是固定的。AB类由于主机号太长,实际中很少有那么大的局域网,这就导致很多IP地址会被浪费掉 ,这种分类方式在实际中被淘汰掉了
特殊IP地址
- 主机号为0的IP:例如192.168.0.0 表示的就是网络号,局域网里不应该存在某个主机的主机号为0
- 主机号为全1的IP:例如192.168.0.255,假定子网掩码是255.255.255.0,这种称为是广播地址,(广播地址就是往这个地址上发送UDP数据报,此时这个数据报就会被转发给整个局域网中的所有主机,TCP不支持广播。)
- 环回地址:IP以127开头的,使用最多的是127.0.0.1,是指Windows系统自带的虚拟网卡,这块网卡于任何外部网络不能通讯,只限于本机通讯。
- 主机号为1:例如192.168.0.1,一般被用作"网关IP",这只是习惯用法,并不强制约定。
路由选择其实就是对数据在网络中传输的路径规划,数据在发送的过程中,两台主机先是建立连接,两台主机都知道了对方的IP的地址,然后之后的每次数据传输过程中,由于网络环境非常复杂,每个数据报传输的路径不可能都相同,每条数据在网络中进行传输的时候都会经历网络中的中间节点(路由器),这些结点是无法感知到网络环境的全貌的,一个路由器最多只认识它的一些邻居结点(或者是邻居的邻居),也就是说一个网络设备是不可能有数据传输的完整路径,当这些网络设备知道了这个数据报的目的地址(目的IP),具体该怎样走他会向邻居结点进行询问(就类似于我们日常生活中向别人问路)。
路由选择的核心思路就是"问路",每个路由器中都会有一个路由表这样的数据结构用来记录邻居结点的信息,当一个IP数据报在进行网络转发的过程中,每个路由器在接收到这个IP数据报之后,就会将这个IP数据报中的目的IP与路由表中的信息进行比对,有匹配的结果就会按照当前路由器规划的路径传输,但是当前路由器的路由表中没有匹配的信息,此时就会走路由器给你指出的一条默认的路径(路由表的"下一跳表项"),这个下一跳表项就会将把这个IP数据报指引向更上一级的路由器(越上一级的路由器中的路由表中记录的信息就会更多),这样直到到达目的IP,当然也有到达不了的情况,因为每经过一个路由器问一次,生存的时间TTL就会减1,如果减到了0还没有到达目标IP,就表示这个包永远到不了了,这个包就会丢弃。
数据链路层也存在很多协议,最著名的使用最广泛的就是"以太网"协议,以太网协议不仅在数据链路层进行了规定,同时也在物理层也存在一些协议规定了一些内容。
以太网数据帧的格式:
这里的以太网数据帧的目的地址和源地址都是6个字节的长度,表示的范围比IPv4大了6w多倍,所以MAC地址现在还不存在地址短缺的问题,所以大部分网卡等的硬件设备在出场的时候地址就已经写死了。
一个完整的以太网数据帧是由帧头(目的地址+源地址+类型)、帧尾(校验和)和载荷构成,上面的0800类型的数据帧表示的就是用来传输数据的普通的数据帧。上述的0800类型的数据帧的载荷长度46~1500,这个1500表示的就是载荷最大长度就是1500.这是由于不同的数据链路层协议,对应不同的硬件物理设备,这个时候数据报的载荷上限也就不一样。我们把这个数据链路层的数据帧最大载荷长度称为MTU。
如果要传输的数据长度超过了MTU,那么就会在IP层进行分包,使分出来的报的长度都在MTU的范围内。 在IP协议中使用16位标识、13位片偏移和3位标志位这三个字段来支撑IP协议的分包和组包的。
0806类型的数据报载荷部分是ARP报文, 0835类型载荷部分就是一个RARP报文