目录
[二、IP 协议格式:](#二、IP 协议格式:)
[三、NAT 机制:](#三、NAT 机制:)
[1、动态分配 IP 地址:](#1、动态分配 IP 地址:)
[2、NAT 机制(核心方案):](#2、NAT 机制(核心方案):)
[1、内网 IP(私网 IP ):](#1、内网 IP(私网 IP ):)
[2、公网 IP (外网 IP ):](#2、公网 IP (外网 IP ):)
[3、NAT 机制工作原理:](#3、NAT 机制工作原理:)
[2、两个设备都是公网 IP :](#2、两个设备都是公网 IP :)
[3、一个设备在内网,一个设备在公网 ip:](#3、一个设备在内网,一个设备在公网 ip:)
[1、网络号 和 主机号:](#1、网络号 和 主机号:)
[2、子网掩码 和 网关:](#2、子网掩码 和 网关:)
[3、三种特殊的 IP 地址:](#3、三种特殊的 IP 地址:)
一、前言:
IP 协议 是在网络层的协议类型,IP 协议主要涉及地址管理和路由选择。
二、IP 协议格式:

4位版本:
标识 IP 协议的版本号,常见的有 IPv4 和 IPv6 。
4位首部长度:
表示 IP 数据报首部的长度,以 4 个字节为单位,因为首部可能包含可变长度的选项字段,所以需要这个字段来确定首部的实际长度,从而正确地找到数据部分的起始位置。
8位服务类型:
4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本 。这四者互相冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要,对于ftp这样的程序,最大吞吐量比较重要。
16位总长度:
IP 数据报整体占多少字节。即 IP 数据包(报头 + 载荷总的长度)。
16位标识:
在 IP 数据报分片和重组过程中使用。当一个数据报太大而不能在链路上传输时,会被分片。每个分片都有相同的标识 id 。
3位标志:
**用于控制数据报的分片和重组。**其中一位表示是否允许分片,一位表示是否是最后一个分片,还有一位保留未用。通过这些标志位,发送方可以指示路由器是否可以对数据报进行分片,接收方可以判断是否已经接收完所有的分片。
13位片偏移:
**表示该片在原始数据报中的相对位置,**以 8 字节为单位。用于在重组分片时确定各个分片在原始数据报中的顺序和位置。
8位生存时间:
用于限制数据报在网络中的生存时间。初始情况下TTL是 32 或 64 或 128。每经过一个路由器,TTL 值减 1。当 TTL 值减为 0 时,路由器将丢弃该数据报,以防止数据报在网络中无限循环传输,浪费网络资源。(要注意的是,走三层转发(即网络层的转发)才会减1;而交换机只有下两层,所以经过交换机TTL不会减1。)
8位协议:
标识上层的协议,即传输层(UDP / TCP)。
16位首部校验和:
用于校验 IP 数据报首部是否出现传输错误。
32位源 IP 地址:
标识发送方的 IP 地址。
32位目的 IP 地址:
标识接收方的 IP 地址。
这里值得一提的是,IP 地址 在计算机是二进制来存储的, IP 地址采用点分十进制来标识给人来看,例如 192.168.0.1 这样,其中三个点把 IP 地址分出了四个部分的数字,每个部分的数字 为 1 个字节,每个部分能表示的数据范围是0 ~ 255。IP 地址最多有 2 ^ 32 = 42亿9千万。
三、NAT 机制:
上述我们说到, IP 地址最多有 42亿9千万个,而当今世界,上网的人越来越多,IP 地址不够用的情况 " 迫在眉睫 " 。所以,有没有什么方法手段,解决这个 IP 地址不够用的问题呢?
答案肯定是有的,使用了动态分配 IP 地址 和使用 NAT 机制。
1、动态分配 IP 地址:
上网的时候再分配 IP 地址,不上网就不分配 IP 地址,这一定程度上缓解了 IP 地址不够用的问标题,但还不够。
2、NAT 机制(核心方案):
在动态分配 IP 地址 机制下,把当今世界的网络分为两个大类:
1、内网 IP(私网 IP ):
IP 地址开头为:
|---------------------|---------------------|
| 10.* | 常用于大型企业或机构的内部网络。 |
| 172.16 ~ 172.31.* | 适用于中等规模的企业或园区网络。 |
| 192.168.* | 在家庭网络、小型办公室网络中最为常用。 |
这些开头的 IP 地址都是内网 IP。
2、公网 IP (外网 IP ):
除去上面的 内网 IP ,其余的都是 公网 IP 。
3、NAT 机制工作原理:
NAT 机制下,同一个 局域网(比如同一个路由器下的网络设备)中,内网 IP 不可重复 ,而不同的两个局域网中, 内网 IP 可以重复。
1、两个设备都是在局域网:
两个主机都在同一个局域网:
直接按照 ip 地址转发信息即可(同一个局域网,内网 ip 不会重复)。
两个主机在不同的局域网:
无法直接进行传输,需要通过路由器等网络层设备进行转发到对方主机所在的局域网。
2、两个设备都是公网 IP :
不涉及 NAT 机制,直接转发信息即可。
3、一个设备在内网,一个设备在公网 ip:
下面,假设 A 是主机(在内网),B 是服务器(在公网);A 是可以主动访问 B 的,但是 B 不能主动访问 A (如果 A 已经主动访问了 B ,那么 B 可以沿着原路返回找到 A )。

可以看到,NAT 机制相当于把网络传输分成两个阶段,一是局域网内部的转发(使用局域网内部 IP 进行);二是公网上的转发(使用公网 IP 进行)。
那么如果在同一个局域网中,有两个主机访问同一个服务器,那么服务器返回的响应数据是如何找到对应的主机发请求?
在上图的工作原理中,带有公网 IP 运营商路由器会维护一个记录表,类似这样:
|--------------|------|---------|------|
| 旧 IP | 旧端口 | 新 IP | 新端口 |
| 192.168.0.10 | 1000 | 5.6.7.8 | 1000 |
| 192.168.0.11 | 1000 | 5.6.7.8 | 1001 |
这样,即使同一个局域网不同主机发送的数据报源端口号相同,运营商路由器也会在映射新端口的时候,分配不同的端口。服务器返回的响应数据也能通过路由器的映射表准确地找到对应的主机。
四、网段划分:
1、网络号 和 主机号:
IP 地址在网段划分下分成两个部分,网络号 和 主机号。例如:
192.168.100.98 ;192.168.100是网络号,98 是主机号。
注意:
同一个局域网内部,网络号必须相同,主机号必须不同;
两个相邻的局域网,网络号必须不同。
下面,一张图来解释各自的关系:
路由器的 LAN 口和 WAN 口通常是有不同的网络号的。
日常生活中,主机号为 1 的都是分配给了路由器的 LAN 口作为路由器的 LAN 口 IP(习惯所为) 。路由器的 WAN 口作为上一级路由器(光猫)的 LAN 口相连,这时路由器可以看作上一级路由器(光猫)的一个 "主机"。
2、子网掩码 和 网关:
子网掩码:
子网掩码通过与 IP 地址 进行逻辑与运算来确定网络地址,将 IP 地址和子网掩码都转换为二进制形式,然后逐位进行与运算,得到的结果就是网络地址。
例如,IP 地址为 192.168.1.100,子网掩码为 255.255.255.0,转换为二进制后进行与运算:
IP地址: 11000000.10101000.00000001.01100100
子网掩码:11111111.11111111.11111111.00000000
与运算结果:11000000.10101000.00000001.00000000
得到网络地址为 192.168.1.0。这表明该 IP 地址所属的网络是 192.168.1.0 网络。
IP 地址侧重于标识网络中的单个设备,而网络地址侧重于标识整个网络区域(局域网)。
当局域网设备超过 255 台时,将子网掩码最后一个字节的最高位由 1 变为 0 ,相当于把主机部分的位数增加了 1 位。以子网掩码从 255.255.255.0 变为 255.255.254.0 为例,在二进制表示中,就是从 11111111.11111111.11111111.00000000 变为 11111111.11111111.11111110.00000000,最后一个字节的最高位(第 8 位)从 1 变成了 0,从而使主机部分的位数从 8 位增加到 9 位,可容纳的主机数量也从 255 台增加到 2^9 - 2 = 510台,以满足更多设备接入局域网的需求。
网关:
网关是主机所连接的路由器的 LAN 口 IP。(可以看上图网络号和主机号解释图理解)。
3、三种特殊的 IP 地址:
1、主机号全为 0 (所有比特位都是 0 ):
比如192.168.100.0,主机号全为 0 的地址被用作网络地址,它代表了整个网络,而不是网络中的某一台具体主机。
2、主机号全为 1(所有比特位都是 1 ) :
主机号全为 1 的地址被用作广播 IP 。 往广播 IP 上发送数据,这个 广播 IP 网络设备(如路由器、交换机等)会发送给这个局域网所有的主机。
3、环回 IP:
**以 127.* 开头的 IP 地址为 环回 IP 。通过这个环回 IP 发送数据, 还能自己收到数据。**开发网络应用程序时,开发人员可以使用环回地址在本地计算机上进行测试。例如,测试网络服务器软件时,可将服务器程序绑定到 127.0.0.1 地址上,然后通过本地的客户端程序连接到该服务器,模拟网络环境下的通信,而无需实际连接到外部网络,有助于快速发现和解决程序中的问题。
五、路由选择:
路由器根据 IP 数据包中的目的地址,决定将数据包从一个网络接口转发到哪个下一跳网络接口,以最终将数据包送达目的主机的过程。
当一台主机要发送数据到另一台主机时,它会根据目的 IP 地址判断目标是否在同一局域网。如果不在,就会将数据包发送给所在网关,即本地网络中的路由器 LAN 接口。
路由器维护着一张路由表,其中包含了网络地址、子网掩码、下一跳地址和接口等信息。
路由器收到数据包后,会根据其目的 IP 地址在路由表中查找对应的转发条目,然后将数据包转发到下一个路由器或直接发送到目的主机所在局域网。