13 位片偏移(framegament offset):是分片相对于原始 IP 报文开始处的偏移(确定多少个要拼接的数据包先后次序)。实在就是在表现当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不一连了)。
8 位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是 64。每次颠末一个路由,TTL - 1,不停减到 0 还没到达,那么就抛弃了。这个字段重要是用来防止出现路由循环。
8 位协议:表现上层协议的类型(载荷部门是 TCP 还是 UDP 还是其他的协议)。
16 位首部校验和:使用 CRC 举行校验,来鉴别头部是否损坏。
32 位源 IP 地址和 32 位目的 IP 地址:表现发送端和接收端。为了让我们方便观察,把 32 位的整数通常表现成 “点分十进制”的方式。例如 192.168.2.103。
选项字段(不定长,最多 40 字节):略。
IP 协议数据包的总长度是 64 KB,假如载荷太长,会导致 IP 协议数据包的总长度超过 64 KB,这时 IP 协议数据包会举行拆包发送,在接收端举行组包。 通过 16 位表现 + 3 位标志 + 13 位片偏移这三个属性,实现 IP 协议的拆包组包。
二、IP 地址的数目限制
IP 地址(IPv4)是一个 4 字节 32 位的正整数。那么一共只有 2 的 32 次方个 IP 地址,大概是 43亿左右。而 TCP/IP 协议规定,每个主机都需要有一个 IP 地址。这意味着,一共只有 43 亿台主性能接入网络么?实际上,由于一些特殊的 IP 地址的存在,数目远不足 43 亿。另外 IP 地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个 IP 地址。
针对 IP 地址不敷用,有三种方式来办理:
动态分配 IP 地址: 只给接入网络的装备分配 IP 地址。因此同一个 MAC 地址的装备,每次接入互联网中,得到的 IP 地址不一定是相同的。
NAT 技术: 把 IP 地址,分成两个大类:(1)私网 IP(局域网内部使用)。(2)公网 IP (广域网使用)。此时约定公网 IP 唯一,私网 IP 允许在差别的局域网中重复。 虽然能上网的装备非常多,但是绝大部门都是在局域网中的。
采用 IPv6 协议: IPv6 并不是 IPv4 的简朴升级版,这是互不相干的两个协议,彼此并不兼容。IPv6 用 16 字节 128 位来表现一个 IP 地址(数目非常大,充足给世界上每一粒沙子分配一个 IP 地址),但是目前 IPv6 还没有遍及。
留意:私有 IP 地址和私网 IP 地址是一个意思。
假如一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址。
以下为私网 IP 的开头(*表现后续任意),这三个必须要记住。 除了这三个外,其他的根本都是公网 IP(特殊的后续有列出)
10.*
172.16 - 172.31.*
192.168.*
一个路由器可以配置两个 IP 地址,一个是WAN IP,一个是LANIP(子网 IP)。路由器LAN毗连的主机,都附属于当前这个路由器的子网中。差别的路由器,子网 IP 实在都是一样的(通常192.168.1.1)。子网内的主机 IP 地址不能重复,但是子网之间的 IP
地址就可以重复了。每一个家用路由器,实在又作为运营商路由器的子网中的一个节点,如许的运营商路由器可能会有很多级,最外层的运营商路由器,WAN IP 就是一个公网 IP 了。子网内的主机需要和外网举行通信时,路由器将 IP 首部中的 IP 地址举行更换(更换成WAN IP),如许逐级更换,终极数据包中的 IP 地址成为一个公网 IP。这种技术称为NAT(Network Address Translation,网络地址转换)。假如希望我们本身实现的服务器步伐,能够在公网上被访问到,就需要把步伐部署在一台具有外网 IP 的服务器上。如许的服务器可以在阿里云/腾讯云上举行购买。
这里涉及到一个焦点问题:引入上述的公网私网 IP,如何举行通信呢?
大体分为 5 种环境:
同一个局域网内部,装备之间通信:可以通信。由于一个局域网内部的装备之间的 IP 是不能重复的,所以可以正常举行通信。
广域网装备和广域网装备之间的通信:可以通信。广域网中的装备 IP 本来就是唯一的,可以正常举行通信。
局域网 1 中的装备 A 尝试访问局域网 2 中的装备 B:这种环境不允许访问。
局域网中的装备主动访问广域网装备:可以通信。这个过程中,NAT 机制就开始发挥作用了。
广域网装备主动访问局域网装备:不允许访问。因为局域网装备 IP 地址不是唯一的。
总结:被动方的 IP 地址不是唯一的就不能举行通信。因此,假如需要举行上述的局域网装备和局域网装备之间的通信,需要搭配广域网中的服务器,举行数据转发。
3.2 内网 IP 装备访问外网 IP 装备的过程(NAT 机制):
下面使用简化版的过程来举行讲授。主机(内网)-> 路由器-> 百度(外网) 。
运营商路由器,可以把它当作一个 NAT 装备,它会对中间颠末的数据包,举行网络地址的转化,当内网装备颠末运营商路由器访问外网的时候,就会把 IP 数据包中的源 IP,更换成它本身的 IP,端口号也会变(图中没有变)。
到达百度服务器之后,百度就会看到有一个 IP 地址为 5.6.7.8,端口号为 1234 的装备给它发送了一个哀求,百度服务器对于我的电脑真实的内网 IP 是一无所知的。
运营商路由器内部维护了一个“映射关系”,记载当前这个相应的哀求是从哪个内网中的装备发送过来的。
以上就是内网 IP 装备访问外网 IP 装备的过程。假如有多个内网装备同时访问外网,这时运营商路由器给出的 IP 地址是相同的,端口号是差别的。可以使用端口号来举行区分。
四、地址管理
通过合理设置主机号和网络号,就可以保证在相互毗连的网络中,每台主机的 IP 地址都不相同。那么问题来了,手动管理子网内的 IP,是一个相称麻烦的事情,该如何办理呢?
答:有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配 IP 地址,制止了手动管理 IP 的未便。一般的路由器都带有DHCP功能。因此路由器也可以看做一个DHCP服务器。
过去曾经提出一种分别网络号和主机号的方案,把所有 IP 地址分为五类,如下图所示:
随着 Internet 的飞速发展,这种分别方案的范围性很快显现出来,大多数组织都申请 B 类网络地址,导致 B 类地址很快就分配完了,而 A 类却浪费了大量地址。例如,申请了一个 B 类地址,理论上一个子网内能允许6万5千多个主机。A类地址的子网内的主机数更 多,然而实际网络架设中,不会存在一个子网内有这么多的环境。因此大量的 IP 地址都被浪费掉了。
4.1.2 CIDR | 子网掩码:
针对上面这种环境提出了新的分别方案,称为CIDR(Classless Interdomain Routing):引入一个额外的子网掩码(subnet mask)来区分网络号和主机号。子网掩码也是一个 32 位的正整数。通常用一串0来结尾。将 IP 地址和子网掩码举行按位与操作,得到的效果就是网络号。网络号和主机号的分别与这个 IP 地址是 A 类、B 类还是 C 类无关。
子网掩码:32 位整数。左半部门都是 1(网络号),右半部门都是 0(主机号),不会 01 交替出现。
将 IP 地址和子网掩码举行按位与操作,得到的效果就是网络号。255 分析 8 位都是 1,子网地址范围是网络号 +
主机号(最大和最小对应子网地址的范围)。
240 用 2 进制表现为 11110000,68 用 2 进制表现为 01000100。按位与就是 64,当 0100(网络号)0100(主机号),主机号最大和最小时就是子网地址范围。
可见,IP 地址与子网掩码做与运算可以得到网络号,主机号从全 0 到全 1 就是子网的地址范围。
IP 地址和子网掩码还有一种更简便的表现方法,例如140.252.20.68/24,表现 IP 地址为140.252.20.68,子网掩码的高 24 位是1,也就是255.255.255.0。
4.2 特殊的 IP 地址:
将 IP 地址中的主机地址全部设为 0,就成为了网络号,代表这个局域网(如许的 IP 表现网段,不应该分配给具体的主机)。
将 IP 地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互毗连的所有主机发送数据包(TCP 不支持广播,UDP 支持)。
127.*的 IP 地址用于本机环回(loop back)测试,通常是127.0.0.1。
五、路由选择
在复杂的网络布局中,找出一条通往终点的路线。 路由的过程,是一跳一跳(Hop by Hop)"问路"的过程。所谓"一跳"就是数据链路层中的一个区间。具体在以太网中,指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。
IP 数据包的传输过程也和问路一样:当 IP 数据包,到达路由器时,路由器会先查看目的 IP。路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器。依次反复,不停到达目标 IP 地址。
那么如何判定当前这个数据包该发送到哪里呢?
答:这个就依靠每个节点内部维护一个路由表。
路由表可以使用 route 下令查看。假如目的 IP 命中了路由表,就直接转发即可。路由表中的最后一行,重要由下一跳地址和发送接口两部门构成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
假设某主机上的网络接口配置和路由表如下:
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口,连到 192.168.56.0/24网络。路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表现此条目有用(可以禁用某些条目),G 标志表现此条目的下一跳地址是某个路由器的地址,没有 G 标志的条目表,表现的网络地址是与本机接口直接相连的网络,不必经路由器转。