IP 协议
目录协议格式
地址管理
网段划分
特殊的 IP 地址
IP 地址的数量限定
私网IP地址 和 公网IP地址
路由选择
网络层负责在复杂的网络环境下确定一个合适的路径。IP 协议是网络层中的紧张协议,在本篇文章中,我们就来学习 IP 协议
IP协议,紧张的负责两方面:
地址管理:使用一套地址体系,来形貌互联网上每个设备所处的位置
路由选择:一个数据包,怎样从网络中的某个地址,传输到另一个地址
我们首先来了解一些基本概念:
https://i-blog.csdnimg.cn/direct/8fd3dfbbe0ed4f28954fa3911ae77445.jpeg
主机:配有 IP 地址,但是不举行路由控制的设备
路由器:配有 IP 地址,还能举行路由控制
节点:主机 和 路由器 的通称
协议格式
https://i-blog.csdnimg.cn/direct/5b88fa7e2f8342a0bfa2681ffa001ecd.jpeg
4 位版本号(Version):指定协议的版本,对于IPv4,该字段为 4
4 位首部长度(Header Length):IP 头部的长度是多少个 32bit,也就是 length * 4 字节数,4bit表示最大的数字是15,因此,IP 头部的最大长度是 60 字节
8位服务范例(Type Of Service):3位优先权字段,4位TOS字段,1位保留字段(必须置为0),4位TOS分别表示:最小延时、最大吞吐量、最高可靠性 和 最小本钱。这四者相互冲突,只能选择一个。比方:对于 SSH/Telnet,最小延时比力紧张,而对于 FTP,最大吞吐量比力紧张
16 位总长度(Total Length):IP 数据报整体(头部 + 数据)占多少个字节
16 位标识(id):唯一的标识主机发送的报文。若 IP 报文在数据链路层被分片了,那么,每一批里的 id 都是相同的
3 位标记位(Flags):
第一位保留(现在不使用,以后可能用到)
第二位为1表示克制分片,若此时报文长度超过MTU,就会丢弃报文
第三位表示 更多分片,若举行了分片,最后一个分片置为1,其他为0,类似于一个竣事标记
什么是分片?
分片就是将一个大的数据包拆分成多个小的数据包的过程,以适应网络中差别设备的最大传输单元(MTU) 。数据包可能会因为网络路径上的 MTU 限定而被分片,每个分片都是一个独立的IP数据包,包罗原始数据包的一部门。接收端会重新组装这些分片,恢复成完备的数据包。
https://i-blog.csdnimg.cn/direct/23a796efd6e743d9bbdb7e90d8f8b9cc.png
13位分片偏移(Fragment Offset):是分片相对于原始IP 报文开始处的偏移,表示当前分片在原报文的哪个位置,实际的偏移字节数为 偏移量 * 8,因此,除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则就不连续了)
8 位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数(一般为 64),每次颠末一个路由,TTL -= 1,一直减到0还没有到达,就丢弃。这个字段用来防止出现路由循环
8 位协议:上层协议范例
16 位头部校验和:使用 CRC 举行校验,来鉴别头部是否破坏
32 位源地址:发送端,发送数据包的源 IP 地址
32 位目的地址:接收端,接收数据包的目的 IP 地址
选项字段:不定长,最多 40 字节
数据:实际传输的数据,IP 头部之后的部门
地址管理
IP 地址本质上是一个 32 位的整数,为了方便,常用 点分十进制 的方式举行表示(通过 3 个 . 将其划分为 4 个部门,每个部门 1 字节,每个部门的取值都是 0 - 255)
IP 地址的存在,目的就是为了能够区分网络上的差别设备,希望每个网络设备都要唯一的一个 IP 地址
网段划分
IP 地址分为两个部门:网络号和主机号
网络号:包管互相毗连的两个网段具有差别标识
主机号:同一网段内,主机之间具有相同的网络号,但必须具有差别的主机号
https://i-blog.csdnimg.cn/direct/5ba9ddf8018d43bfa824d97cccc65cc7.jpeg
此中,差别的子网实在是将网络号相同的主机放到一起
若子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但主机号不能与子网中其他主机重复
通过公道设置主机号和网络号,就可以包管在互相毗连的网络中,每台主机的 IP 地址都不相同
那么,该怎样管理子网内的 IP 呢?
若我们手动管理,则会非常麻烦。有一种技术叫做 DHCP,能够自动的给子网内新增的主机节点分配 IP 地址,避免了手动管理 IP。一般的路由器都会带有 DHCP 功能,因此,路由器也可以看做一个 DHCP 服务器
在过去,提出过一种划分网络号和主机号的方案:将所有 IP 地址划分为 5 类:
https://i-blog.csdnimg.cn/direct/8b2e85b110b34f10a91cc7452f4c2ef4.jpeg
A类:0.0.0.0 - 127.255.255.255
B类:128.0.0.0 - 191.255.255.255
C类:192.0.0.0 - 223.255.255.255
D类:224.0.0.0 - 239.255.255.255
E类:240.0.0.0 - 247.255.255.255
但是,随着互联网的飞速发展,这种划分方案的局限性很快就体现出来了:大多数组织都会申请B类地址,导致B类地址很快就分配完了,而A类却浪费了大量地址
比方:
申请了一个B类地址,理论上一个子网内能够有 6 万多台主机,A 类地址的子网内主机数量更多
但在实际的网络中,不会存在一个子网中有这么多台主机的情况,因此,大量的IP地址都被浪费掉了
针对这种情况,就有了新的划分方案 —— CIDR(Classless Interdomain Routing)
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
子网掩码也是一个 32 位的正整数,通称以一串 0 来结尾
将 IP 地址和 子网掩码 举行 按位与 操作,得到的结果就是网络号
网络号和主机的划分就与这个IP地址是 A 类、B 类 还是 C 类无关了
比方:
https://i-blog.csdnimg.cn/direct/69013279be1b48afa62735a3db38df57.jpeg
IP 地址与子网掩码举行 与运算 就可以得到网络号,主机号从 全0 - 全1 就是子网的地址范围
IP 地址和子网掩码另有一种更简洁的表示方法:143.251.30.44/24,表示 IP 地址为 143.251.30,子网掩码的高 24 位为 1,也就是 255.255.255.0
特殊的 IP 地址
将 IP 地址中的主机地址全部设为0,就成了网络号,表示这个局域网
将 IP 地址中的主机地址全部设为1,就成了广播地址,用于给同一个链路中相互毗连的所有主机发送数据包
127. * 的 IP 地址用于本机环回(loop back)测试,通常使用的是 127.0.0.1
IP 地址的数量限定
IP 地址(IPv4)是一个 4 字节(32位的正整数),也就是2的32次方个IP 地址,大概是 43 亿,而在 TCP/IP 协议中规定:每个主机都需要有一个 IP 地址。此外由于一些特殊的 IP 地址存在,可使用的 IP 数量远不敷 43 亿。而且,IP 地址并非是按照主机台数来配置的,而是每个网卡都需要配置一个或多个 IP 地址
CIDR 虽然在肯定水平上缓解了IP地址不敷用的问题(提高了使用率,减少了浪费,但IP地址的总数并没有增长),但仍然不敷用,此时该怎样解决呢?
动态分配 IP 地址:只给接入网络的设备分配 IP 地址,因此同一个 MAC 地址的设备,每次接入互联网中,得到的 IP 地址不肯定相同
NAT技术:后面详讲
IPv6:IPv6 并不是 IPv4 的简朴升级版,它们是互不干扰的两个协议,彼此并不兼容,IPv6 用 16 字节(128位)来表示一个地址,增长了 IP 地址的个数,是从根本上解决问题的方案,但目前 IPv6 还未普及
在了解 NAT 技术之前,我们先来学习 私网IP地址 和 公网IP地址
私网IP地址 和 公网IP地址
若一个组织内部组建局域网,IP地址只用于局域网内部通信,而不毗连到互联网上,理论上,可以使用恣意 IP 地址,但 RFC 1918 规定了用于组建局域网的私有 IP 地址:
10. * :前8位是网络号,共 16 777 216 个地址
172.16 - 172.31:前 12 位是网络号,共 1 048 567 个地址
192.168.* :前16位是网络号,共 65 536 个地址
在这个范围中的,都称为 私网IP,其余的则称为全局IP(或公网IP)
局域网内的设备访问局域网内的另一个设备没有任何问题,那局域网内的设备怎样访问另一个局域网中的设备呢?
一个路由器可以配置两个 IP 地址:一个 WAN 口IP,一个 LAN 口IP(子网IP)
路由器 LAN 口毗连的主机,都附属当前这个路由器的子网中
差别路由器,子网IP实在都是一样的(通常是 192.168.1.1),子网内的主机 IP 地址不能重复,但是子网之间的 IP 地址可以重复
每一个家用路由器,又作为运营商路由器子网中的一个节点,如许的运营商路由器可能会有很多级,最外层的运营商路由器,WAN 口 IP 就是一个公网 IP 了
子网内的主机需要和外网举行通信时,路由器首先将 IP 首部中的 IP 地址举行替换(替换成 WAN 口 IP),如许逐级替换,最终数据包中的 IP 地址称为了一个公网IP,这种技术称为 NAT(Network Address Translation,网络地址替换)
https://i-blog.csdnimg.cn/direct/8a579eec941a438eb8c5d46076e824a6.jpeg
如许,局域网内的主机就可以访问到局域网外的设备了
上述举行替换,就能够让一个 公网 IP 对应多台设备,从而达到节省 IP 地址的结果
局域网内的设备通过 NAT 访问外部信息,那返回数据时,该怎样找到这台设备呢?
路由器举行 NAT 时,会把这次通信的相关信息记载下来
https://i-blog.csdnimg.cn/direct/fdcf4ac5d5974ef0b90802f00d7c2754.jpeg
此时,路由器通过查表,找到对应表项,就能把 目的 IP 还原成之前 局域网设备的 IP 了
若局域网的各个设备,访问的是差别的服务器
路由器就可以简朴的通过服务器 IP 地址来举行区分当前是哪次替换,之前是怎样替换的,就怎样替换回去
但是,若局域网内的多台设备,访问同一个服务器,此时又怎样找到对应的设备呢?
上述的表中,不但包罗 源IP 和 目的IP,还包罗 源端口 和 目的端口,路由器在举行查表时,不但会查源 IP 和 目的 IP,还会查源端口和目的端口
https://i-blog.csdnimg.cn/direct/6b8b59765e57485d823843ec95657022.jpeg
路由器在收到相应后,就可以查询传输层中的 源端口
由于客户端的端口号是系统随机分配的,因此,两个主机之间的端口,大概率是不相同的
可万一局域网中的两台设备不但访问同一个服务器,分配的端口号也相同呢?
此时路由器就会对端口号举行映射
https://i-blog.csdnimg.cn/direct/7e20df85edbc496bbbb905814ed9ca5d.jpeg
这时,NAT 就会修改传输层的报头(此时,路由器就不是一个纯粹工作在网络层的设备,也会涉及到传输层的内容)
但是,在大部门情况下,局域网中的差别设备,访问的是差别网址,此时就可以直接通过服务器IP区分
少数情况下,访问的是同一个服务器,此时可以加上端口号举行区分
极少数情况下,访问的是同一个服务器,且端口号相同,路由器就会自动映射成差别端口,从而举行区分
NAT 本质上也是提高 IP 的使用率,没有增长 IP 地址,而是让 IP 地址被复用
路由选择
路由选择,目的是在复杂的网络布局中,找出一条通往目的主机的门路
路由选择的过程,是 一跳一跳 的 “问路” 过程
所谓 一跳,是数据链路层中的一个区间,在以太网中指从源 MAC 地址到 目的 MAC 地址之间的帧传输区间
https://i-blog.csdnimg.cn/direct/f67c1f43c5d94f91983e50fc9158b584.jpeg
IP 数据包的传输过程与 问路 类似:
当 IP 数据包到达路由器时,路由器会先查看目的 IP
路由器决定这个数据包是能直接发送给目的主机,还是需要发送给下一个路由器
依次反复,一直到达目的IP地址
那么,怎样判定当前这个数据包该发送到哪里呢?
这需要依赖每个节点内部维护一个路由表,路由表是一张包罗网络路径的表格,资助路由器决定将数据包转发到哪个下一跳设备(即下一个路由器或目的地)
若路由表中有准确匹配目的地址的条目,路由器将根据该条目决定转发路径;
若没有准确匹配,路由器会找到最长的匹配前缀,以便选择最优路径
路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由),如 距离向量算法
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]