目 录
网络层协议的工作:
- 地址管理
- 路由选择(规划路径)
网络层中,最核心的协议就是 IP 协议
🍀一. IP协议报头格式
协议头格式如下:
4 位版本号
:当前 IP 协议的版本号,有 4 和 6 ,此文我们以 IPv4 为主!4 位首部长度
:IP 报头的长度。带有选项字段(可以有,也可以没有,可以有一个,也可以有多个)(0 - 15 的单位是 4 个字节!最长是 60 个字节,最短是 20 个字节)8位服务类型(TOS)
:(Type Of Service)其实有效位为 4 位,另外 4 位是保留位。
16 位总长度(字节数)
:一个 IP 数据报有多长(报头 + 载荷)。载荷部分就是一个完整的传输层数据报!(比如完整的 TCP 数据报)
16 位标识
:同一个包拆出来的若干个小的包,标识是一样的3 位标识
:说是 3 位,其中 1 位是最关键的,标识结束标记~,1 后面还有,0 后面没了(类似于 链表的 null),还有一个标记描述是否分包了!13 位片偏移
:描述了拆出来的每个包的先后顺序
例如网络层构造出上述数据报之后,发现载荷部分太长了,超出最大长度限制了,于是就进行拆包!
如果需要在 UDP 这里,实现拆包组包,可以参考此处 IP 的机制上述三个字段
8位生存时间(TTL)
:描述了这个 IP 数据报,还能在网络上存活多久!
8 位协议
:表示了传输层使用了哪个协议16 位首部校验和
:校验和和前面的校验和都是一样的,这个校验和只针对 “首部” ,而不对数据部分校验,数据部分的校验自然是传输层的协议来负责。32位源 IP 地址和32位目标 IP 地址
:表示发送端和接收端。
类似于一个包裹的传输,上述四个元素必不可少
🌻二. IP 地址
IP 地址能保证唯一性吗?
能否给每一个主机都分配一个唯一的 IP 地址呢?(最初设计 IP 协议初心是这样的),但是后来由于网络发展迅速,32 位数字表示的 42 亿 9 千万不够用了,那么该如何解决 IP 地址不够用的问题呢?
- 动态分配 IP 地址(DHCP)
- NAT, IP 地址转换
- IPv6 :解决 IP 不够用问题的终极方案
IPv6相当于是另一个网络层的协议,和IPv4可以视为是完全不同的两个协议,而不是IPv4的升级版~~
lPv6 使用 16 字节(128位)这样的值表示IP地址了(2 ^ 128 = 2 ^ 32 * 2 ^ 32* 2 ^ 32* 2 ^ 32)(相当于 42 亿 *42 亿 *42 亿 *42 亿 *,所以 IP 地址完全够了)
IPv4 是 4 个字节(2 ^ 32)
此处还有一个很大的问题就是 IPv4 和 IPv6 不兼容的问题,现存的支持 IPv4 的网络设备(路由器,网卡,交换机…) 不一定支持IPv6。
IP 地址 是一个四个字节的整数,为了更好的进行组网,对于这个 IP 地址又做出了一些更详细的划分,把一个 IP 分成两段,前一半叫做叫做网络号,后一半叫做主机号。
如何划分呢?以前是把 IP 地址分为五类,A,B,C,D,E类,但是目前这种分法很少见,现在主流的分法是 CIDR。引入了一个 “子网掩码”,通过这个来区分哪个是网络号,哪个部分是主机号,也是一个 32 位的整数,左侧都是 1 ,右侧都是 0。255.255.255.0:标记为 1 的部分,就表示了这部分 IP 是网络号
192.168.0.1 / 192.168.1.1 主机号为 .1 的 IP ,通常用来作为网关(关:入口,出口)(不是绝对的,常见的默认的情况,完全可以手动配置成其他的 IP)
192.168.0.0 / 192.168.1.0 主机号为 .0 的 IP 也就是网络号(表示当前局域网 / 网段)
192.168.0.255 / 192.168.1.255 主机号为 255 的 IP 是广播 IP(如果我们往 192.168.0.255 这个 IP 地址上发送数据,此时整个 192.168.0 这个局域网中所有的设备都会收到这个包)
127.0.0.1 / 127.* 环回 IP(表示主机自己),每个主机上都有表示一个虚拟的表示环回 IP 的网卡
🌿三. 路由选择
和地图寻路一样,从 A 到 B 两点之间的路径规划就是路由选择,相比于高德地图或者百度地图,路由规划没有那么大的空间来收集每个地方的位置信息,每个路由器就只能知道位置信息的一部分,它只能只能相邻的一些设备怎么走或者可以知道相邻的设备。路由选择这里的数据转发,就相当于原始的寻路方式:问路!!