目录
一,IP协议格式
1.1 拆包组包
1.2 8位生存空间
二,地址管理
2.1 动态分配 IP
2.2 NAT 机制(网络地址转换)
2.3 IPv6
2.4 网段划分
三,路由选择
一,IP协议格式
- 4位版本:IPv4
- 4位首部长度:代表IP报头的长度,报头最短是20个字节(即没有选项),最长是60个字节(即选项拉满),虽然只有 4 bit ,但是此处的单位是4个字节,所以可以表示60个字节的长度。
- 8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。
- 16位总长度:IP数据包的长度(0~64kb),虽然IP协议也存在64kb这样的大小限制,但是IP协议自身支持 "拆包组包" 这样的功能。
- 8位协议:描述该IP协议的载荷部分是一个UDP协议,还是一个TCP协议,要知道按照那种协议的方式来拆分。
- 16位首部校验和:这个校验和只是校验 IP首部,不管 IP数据的载荷部分,因为UDP/TCP协议自身有校验和
- 32位源IP地址/32位目的IP地址:本质上是一个32位整数,为了方便理解,写作点分十进制,比如:127.0.0.1
1.1 拆包组包
通过以下三个属性,来支持 IP 协议的拆包组包:
- 16位标识:如果16位标识相同,就说明它们是由一个同一个大包拆分成的小包
- 3位标志:有一位表示是否可以拆包,有一位表示是否是最后一个(即组包是否结束),还有一位没什么用
- 13位片偏移:由该部分的大小表示组包时的前后顺序
1.2 8位生存空间
描述这个IP数据包,在网络上还能存活多久,TTL的单位是次数,IP数据包被构造出来的时候,会给TTL赋一个初始值(32,64....),数据在转发过程中,每转发一次,TTL就 - 1,如果这个数据包转发了TTL次之后,还没有到达对方,就会被丢弃。
虽然可能会出现TTL耗尽还没有到达目的设备的情况,但是该机制还是很有用的,假设一个数据包的目的IP写错了,实际上不存在这个IP,那么这个数据包不可能到达目标,也不可能允许在网络上一直存在。
这有点类似于"六度空间理论" —— 理论上你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人。这在现实中很难做到,因为不是每个朋友都能全力以赴的执行,但是在计算机中是可以的,网络环境中包含很多的路由器,每一个路由器都会转发给相邻的设备,所以出现TTL耗尽的概率很小。
二,地址管理
IP地址,是一个32位的整数,也就是说最多就只有4294967296个地址,而到目前为止,能够上网的设备远远超过了这个数字,如何解决 IP地址不够用的问题呢?
2.1 动态分配 IP
就是如果你这个设备不上网,就把分配给你的IP地址分配给别人去使用,这个方案提高了 IP 地址的利用率,但是没有增加 IP 地址的数目,也就是治标不治本。(虽然是一个过渡方案,但目前仍然广泛使用)
2.2 NAT 机制(网络地址转换)
将IP地址分成两个大类:
- 内网IP(局域网IP):如果一个IP地址,是 10.* 或者 172.16.* - 172.31.* 或者 192.168.*,那么就称为内网 IP,在同一个局域网内部,内网IP是不能重复的;在不同的局域网中,内网IP是可以重复的。
- 外网IP(广域网IP):除了内网IP,剩下的IP就是外网IP,外网IP必须唯一
注:NAT机制的本质上就是让一个IP地址,代表一批设备。
举个例子:比如有1~100的编号,要用这些编号表示更多的人。
方案一:一个编号表示一个人,那么只能表示100个人。
方案二:1~10这几个编号,每一个都表示一个班,每一个班都能有11~100这些编号的人。那么就可以表示900个人,NAT机制就类似于这个方案。
NAT机制是如何工作的?
但是这里还有一个问题,如果有多台设备同时访问同一个服务器,此时返回的响应,路由器设备要返回给哪个主机?此时我们就会使用端口号来区分。
那如果两个设备的端口号相同,路由器会主动把相同的端口,替换成不同的端口,路由器内部会记录它们的映射关系。
当前的网络环境,就是使用 NAT + 动态分配 的方式来解决 IP地址不够用的问题。NAT机制最大的优势,就是他是一个 "纯软件的方案"(只要软件一升级就可以使用),也正因为这个机制,局域网内部的设备能主动访问外网的设备,但是外网的设备无法访问内网的设备。
2.3 IPv6
IPv6使用16个字节来表示 IP 地址,也就是 2^128,这么大的数字足以给地球上的每一粒沙子都分配一个IP地址,而沙子是制造计算机的原材料,也就是说除非有一天我们走出地球,否则IP地址是不可能用完的。
2.4 网段划分
一个IP地址会分成两个部分,网络号(标识一个局域网) + 主机号(标识了局域网中的一个设备),同一个局域网中的设备,网络号必须相同,主机号可以不同,两个相邻的局域网(通过一个路由器连接),网络号不能相同。
一个IP地址,哪里是网络号,哪里是主机号是由子网掩码确定的,子网掩码也是一个32位的整数,但是它的左侧二进制位全是1,右侧全是0。而被标记成1的部分对应的IP地址就是网络号。比如:
如果一个IP地址,主机号全1,表示这个IP是一个"广播地址",不能给一个具体主机分配;如果一个IP地址,主机号全0,当前这个IP表示网络号,代表一个局域网,不能给一个具体主机分配;如果一个IP是 127 开头的,此时这个IP就是一个环回IP,最常用的127.0.0.1,表示设备自身。主要用来进行一些测试。
三,路由选择
路由选择就是描述了IP协议的转发过程,在进行IP数据报转发的时候,每一个路由器只能一些局部信息(它是和谁相连的)这就意味着IP数据在转发过程中,是一个"探索式"的过程,只能给出一个局部最优解。
一个网络层的数据报,每次到达一个路由器,就会进行"问路",每一个路由器内部都有一个数据结构叫"路由表 ",根据目的IP查询路由表,如果查到,就按照路由表给定的方向转发,如果没查到,路由表中有一个默认的表项,按照默认的表项转发即可。