IP 协议
协议头格式
-
4位版本号: 只有两个取值,4(IPv4)和6(IPv6).
IPv2,IPv5这些在实际中是没有的,可能是理论上/实验室中存在~
-
4位首部长度: IP头部的长度是多少个32bit,也就是length*4的字节数.4bit表示最大的数字是15,因此IP头部最大长度是60字节.
-
8位服务类型: IP协议以哪种模式进行工作.
-
16位总长度: IP数据报整体占多少个字节.
-
16位标识: 一个大的数据,拆成多个IP数据报传输,此时这多个IP的数据报的16位标识,就是相同的值.
-
3位位标志字段: 一位保留(现在不用,但是说不定以后要用到).1位表示当前是否是拆包/组包.1位表示当前包是否是组包中的最后一个.
-
13位分片偏移: 是分片相对于原始IP报文开始处的偏移.其实就是在表示当前分片在原报文中处在哪个位置.实际偏移的字节数是这个值 * 8 得到的.因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了).
-
8位生存时间(TTL): 描述了一个数据报在网络中最多存活多长时间.TTL的单位不是 s 或者 min ,而是 “次数”(经过路由器转发的次数,一般是64).这个字段主要是用来防止出现路由循环.
发送一个IP数据报的时候,会有一个初识的TTL的值(32,64,128…)
数据报每次经过一个路由器转发,TTL就会 -1 (经过交换机,不减).
一旦TTL减到0了,此时这个数据包就会被当前的路由器直接丢弃掉. -
8位协议: 描述了IP数据报中,携带的载荷,是哪种传输层协议的数据报.
通过这里不同的数值,来表示接下来要把数据交给TCP解析,还是UDP解析,还是其他协议解析.
有点类似于TCP/UDP报头中的"端口号". -
16位首部校验和: 验证数据在传输中是否出错(只是针对首部,IP报头).
载荷部分TCP/UDP都有自己的校验和~
-
32位源地址和31位目标地址: IP数据报中的最关键的信息,描述了数据报从哪里来,要到哪里去~
-
选项字段: 略.
IP 地址
IP地址,用来标识网络上的一个设备.
IP地址的数量限制
我们知道,IP地址(IPv4)是一个4字节32位的正整数,那么一共只有2的32次方个IP地址,大概是42亿九千万左右.而TCP/IP协议规定,每一个主机都需要有一个IP地址.
这意味着,一共只有42亿九千万主机能接入网络吗?
实际上,由于一些特殊IP地址的存在,IP地址的数量远不足42亿九千万.另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址.
解决IP不够用的问题
方案一: 动态分配IP地址.一个设备上网就分配IP,不上网就先不分配IP.(只是一个权宜之计)
方案二: NAT网络地址转换.以一当千,使用一个IP代表一大波设备.
- NAT把IP地址分成两大类:
- 内网IP / 私网IP
- 外网IP / 公网IP
要求公网IP必须是唯一的.但是私网IP是允许重复的(在不同的局域网中是允许重复的)
NAT 网络地址转换:
- 一个设备在进行上网的时候,IP数据报中的IP地址,就会被NAT设备(通常是路由器)自动修改.
- 同一个局域网内,主机 A 访问主机 B ,不会涉及到 NAT 机制.
- 公网上的设备 A ,访问公网上的设备 B ,不会涉及到 NAT .
- 一个局域网中的主机 A 访问另一个局域网的主机 B ,这在 NAT 机制中,是不允许的.
- 局域网内部的设备 A ,访问公网上的设备 B ,NAT机制生效.
但凡是搭建一个服务器给别人使用,都是需要公网IP的.
NAT 机制的缺点:
- 在这个机制之下,网络环境太复杂了.
- 替换过程中,每一层路由器都需要维护映射关系,每次转发数据,都要查询映射关系…(都是开销).
方案二是一个办法,但是不太优雅.别急,还有一个办法.
方案三: IPv6 .
IPv6可以从根本上解决 IP 地址不够用的问题~
- IPv4 使用 32 位 4 个字节表示 IP 地址.
- IPv6 使用 128 位 16个 字节来表示 IP 地址.
IPv6 的地址空间非常巨大,大到可以给地球上的每一粒沙子都分配一个唯一的 IPv6 地址.
关于 IPv6 可以看看这个视频 电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅
IP 地址的网段划分
IP 地址分为两个部分,网络号和主机号.
网络中规定:
- 同一个局域网中的设备,网络号必须相同,主机号必须不同.
- 两个相邻的局域网,网络号必须不同.
子网掩码
网络号和主机号如何区分呢?
答: 通过子网掩码来区分.
子网掩码:
- 子网掩码是一个 32 位的正整数,通常用一串 “0” 来结尾.
- 子网掩码中的连续的 1 表示网络号的部分,连续的 0 表示主机号的部分。
- 将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号.
举个例子:
ABCDE五类网络
除了子网掩码的方案,还有一种方案,ABCDE五类网络.
这是上古时期的网络划分方式,现在已经看不到了.但是仍然存在于教科书上,期末网络考试一般会有一道题靠这个.
特殊的 IP 地址
- 将 IP 地址中的主机地址全部设为 0 (二进制),就成为了网络号,代表这个局域网.
因此,给局域网中的某个设备,分配 IP 地址的时候,不能把主机号设为全 0.
- 将 IP 地址中的主机地址全部设为 1 (二进制),就成了广播地址,用于给同一个链路中相互连接的所有主机发送数据包.
- 127.* 的 IP 地址用于本机环回测试,通常是 127.0.0.1
自发自收,给这个 IP 发一个数据,设备就会从这个 IP 上再收到同一个数据,自己发给自己~