计算机网络(二)| IP协议
IP概述
IP 协议简述
IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接和不可靠的传输功能。
IP协议的主要作用是在相互连通的网络之间传输IP数据报,最重要的部分是IP寻址、路由选择、数据分段与重组。
IP协议的头部
我们可以使用wireshark抓包分析一下IP的头部信息。
ping命令数据包
- Version(版本号):标识IP协议的版本,目前V4版本地址已经枯竭,V6慢慢成为主流。
- Header Length(头部长度):默认为20字节,最大为60字节
- Differentiated Services Field (服务区分符):用于为不同的IP数据包定义不同的服务质量,一般应用在QoS技术中。
- Total Length (总长度):标识IP头部加上上层数据的数据包大小,IP包总长度最大为65535个字节。
- Identification (标识符):用来实现IP分片的重组,标识分片属于哪个进程,不同进程通过不同ID区分。
- Flags(标志符):用来确认是否还有IP分片或是否能执行分片。
- Fragment offset (分片偏移量):用于标识IP分片的位置,实现IP分片的重组。
- Time to live (生存时间):标识IP数据包还能生存多久,根据操作系统不同,TTL默认值不同,每经过一个三层设备如路由器的处理,则TTL减去1,当TTL=0时,则此数据包被丢弃。
- Protocol (协议号):标识IP协议上层应用。当上层协议为ICMP时,协议号为1,TCP协议号为6,UDP的协议号为17。
- Header checksum (头部校验):用于检验IP数据包是否完整或被修改,若校验失败则丢弃数据包。
- Source(源IP地址):标识发送者IP地址,占用32bit。
- Destination (目的IP地址):标识接收者IP地址,占用32bit。
我们可以将几个常用的头部信息组合起来:
- Id+Flags+FO三个字段可以实现IP数据分片和重组
- Total Length和Header Length标记IP头部和上层数据的边界
IP地址
IP地址的分类
IP地址分为五个类别:分别为A类,B类,C类,D类,E类。
IP地址分类- A类:0.0.0.0 ~ 127.255.255.255
- B类:128.0.0.0 ~ 191.255.255.255
- C类:192.0.0.0 ~ 223.255.255.255
- D类:224.0.0.0 ~ 239.255.255.255
- E类:240.0.0.0 ~ 247.255.255.255
然而,这种划分方案的局限性很明显,大多数都申请的是B类地址,就会导致B类地址很快就分配完了,而A类却浪费了大量地址。
因此引入了一个新的划分方案(CIDR):引入一个子网掩码的概念来区分网络好和主机号,子网掩码本身也是一个32的正整数。子网掩码对应IP地址的网络号全为1,主机号全为0。 将IP地址与子网掩码进行按位与操作,得到的结果就是网络号。
IP v4地址不够用了怎么办
虽然CIDR一定程度上减少了IP地址的浪费,但是IPv4地址只有43亿左右,怎么都是不够用的,因此需要解决方案来解决IPv4枯竭的问题,目前有三种方案。
- 动态分配IP地址
- NAT技术
- IPv6
接下来主要介绍一下NAT技术:
静态NAT
如果一个内部主机唯一占用一个公网IP,这种方式被称为一对一模型。此种方式下,转换上层协议就是不必要的,因为一个公网IP就能唯一对应一个内部主机。显然,这种方式对节约公网IP没有太大意义,主要是为了实现一些特殊的组网需求。比如用户希望隐藏内部主机的真实IP,或者实现两个IP地址重叠网络的通信。
图片来源于:https://zhuanlan.zhihu.com/p/47715358动态NAT
它能够将未注册的IP地址映射到注册IP地址池中的一个地址。不像使用静态NAT那样,你无需静态地配置路由器,使其将每个内部地址映射到一个外部地址,但必须有足够的公有因特网IP地址,让连接到因特网的主机都能够同时发送和接收分组。
图片来源于:https://zhuanlan.zhihu.com/p/47715358PAT
这是最常用的NAT类型。NAT重载也是动态NAT,它利用源端口将多个私网ip地址映射到一个公网ip地址(多对一)。那么,它的独特之处何在呢?它也被称为端口地址特换(PAT)。通过使用PAT(NAT重载),只需使用一个公网ip地址,就可将数千名用户连接到因特网。其核心之处就在于利用端口号实现公网和私网的转换。
面对私网内部数量庞大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪个内部主机。此时,需要NAT设备根据传输层信息或其他上层协议去区分不同的会话,并且可能要对上层协议的标识进行转换,比如TCP或UDP端口号。这样NAT网关就可以将不同的内部连接访问映射到同一公网IP的不同传输层端口,通过这种方式实现公网IP的复用和解复用。这种方式也被称为端口转换PAT、NAPT或IP伪装,但更多时候直接被称为NAT,因为它是最典型的一种应用模式。