文章目录
- 一、认识IP协议
- 二、IP协议头部格式
- 三、IP地址划分
- 1. IP地址分类
- 2. 子网划分
- 四、IP地址数量危机
- 1. IP地址的数量限制
- 2. NAT技术
- 五、私网IP和公网IP
- 六、路由
- 1. 认识路由
- 2. 路由表生成算法
一、认识IP协议
IP协议是Internet Protocol(互联网协议)的简称,它是一种网络层的协议。IP协议的主要作用是在互联网中传输数据包(也称为IP数据包),它定义了数据包在互联网上如何寻址、路由和传输的方式。
IP协议是一种面向无连接的协议,不保证数据包的可靠传输,也不保证数据包的传输顺序。因此,IP协议一般与传输层的协议(如TCP协议)一起使用,以保证数据包的可靠传输和有序性。
IP协议还定义了IP地址的格式和分配方式。IP地址是一个32位的二进制数,通常用点分十进制表示法来表示。在互联网中,每个设备都必须拥有唯一的IP地址,这样才能与互联网相通。
IP协议是互联网中最基本的协议之一,它为互联网上的数据通信提供了基础的支持。
二、IP协议头部格式
IP协议头部格式如下:
各协议字段说明:
- 版本:占4位,协议版本号,通常为4,表示IPv4。
- 首部长度:占4位,IP协议头部长度,即头部中有多少个32位字节,通常为5个。
- 服务类型:占8位,用于标记数据包的优先级、延迟、可靠等。其中3位优先权字段(已经弃用),4位TOS字段和1位保留字段。4位TOS字段分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者之间相互冲突,只能选择一个。对于SSH和Telnet这样的程序,最小延时比较重要;对于FTP这样的程序,最大吞吐量比较重要。
- 总长度:占16位,表示整个IP数据包的长度,包括头部和数据部分。
- 标识:占16位,用于唯一标识一个 IP 数据包的片段。如果IP数据包在数据链路层被分片,那么每一个片段中的标识相同。
- 标志:占3位,第一位保留;第二位为 1 表示禁止分片,为 0 则允许分片;第三位表示分片的情况,如果为 0 表示后面还有分片,为 1 则表示当前是最后一个分片。
- 片偏移:占13位,用于指示当前分片在原始数据包中的偏移量。实际偏移的字节数就是片偏移量乘以 8 得到的。因此,除了最后一个报文外,其他报文的长度必须是 8 的整数倍。
- 生存时间(Time To Live,TTL):占8位,表示数据包到达目的地的最大跳数。一般是64,每次经过一个路由,TTL的值减 1 ,一直减到 0 还没有到达,那么该数据包就会被丢弃。该字段主要是用来防止出现路由循环。
- 协议:占8位,表示数据包的上层协议类型,如TCP、UDP、ICMP等。
- 首部校验和:占16位,用于检测头部在传输过程中出现的错误。
- 源地址:源IP地址。
- 目的地址:目的IP地址。
- 可选字段:可选字段,用于扩展头部,通常不使用。
- 填充:填充字段,用于保证头部长度位 32 位的整数倍。
三、IP地址划分
1. IP地址分类
IP地址分为两个部分:网络号和主机号
- 网络号:保证互相连接的两个网段具有不同的标识。
- 主机号:同一个网段内,主机之间有相同的网络号,但主机号不同,以便区分不同的主机。
如下图:
不同的子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机,则该主机的网络号与这个子网的网络号一致,但是主机号必须保证和该子网中的其他主机不同。
在刚开始设计互联网络时,为了便于寻址以及层次化构造网络,IP地址根据网络号划分出五种IP类型:A类地址、B类地址、C类地址、D类地址和E类地址。如下图所示:
- A类地址:以0开头,第一个字节(8位)用于网络地址,后面三个字节(24位)用于主机地址。它的网络号可以表示1~126之间的数字,它的默认子网掩码为255.0.0.0。
- B类地址:以10开头,前两个字节(16位)用于网络地址,后面两个字节(16位)用于主机地址。它的网络号可以表示128~191之间的数字,它的默认子网掩码为255.255.0.0。
- C类地址:以110开头,前三个字节(24位)用于网络地址,后面一个字节(8位)用于主机地址。它的网络号可以表示192~223之间的数字,它的默认子网掩码为255.255.255.0。
- D类地址:以1110开头,用于多播地址(multicast addresses),不用于单个主机或网络。
- E类地址:以1111开头,保留地址,不分配给主机或网络使用。
其各自的范围如下:
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
2. 子网划分
随着互联网的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址:
- 例如,申请了一个B类地址,理论上一个子网内能允许6万5千多个主机。A类地址的子网内的主机数更多,然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的IP地址都被浪费掉了。
针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing,无类别域间路由)。
CIDR是一种用于分配IP地址的方法,与传统的IP地址划分方式不同,CIDR将IP地址划分为一个个的子网,每个子网的大小可以根据需要灵活调整。CIDR可以在不改变网络地址和主机地址划分的基础上,更好地利用IP地址空间,避免浪费IP地址,提高IP地址的使用效率。
利用CIDR划分子网的步骤如下:
-
确定需要划分的IP地址范围,例如:192.168.0.0~192.168.0.255。
-
根据需要分配的子网数量,确定网络前缀长度。例如,如果需要将该地址范围分为4个子网,则网络前缀长度为26位(2的2次方等于4,需要2个二进制位来表示4个子网)。
-
将IP地址范围划分为多个子网,每个子网的大小由网络前缀长度确定。
-
为每个子网分配一个独立的网络地址和主机地址范围。
例如,将192.168.0.0/24划分为4个子网,每个子网大小相同,即每个子网有64个IP地址。根据CIDR表示法,网络前缀长度为26位,子网划分如下所示:
- 子网1:192.168.0.0/26,网络地址为192.168.0.0,广播地址为192.168.0.63。
- 子网2:192.168.0.64/26,网络地址为192.168.0.64,广播地址为192.168.0.127。
- 子网3:192.168.0.128/26,网络地址为192.168.0.128,广播地址为192.168.0.191。
- 子网4:192.168.0.192/26,网络地址为192.168.0.192,广播地址为192.168.0.255。
CIDR IP子网划分可以更好地利用IP地址空间,并提供更灵活的子网划分方式。它也更容易管理,因为每个子网都有一个独立的网络地址和主机地址范围,这使得网络管理更加简单和高效。
四、IP地址数量危机
1. IP地址的数量限制
我们知道,IP地址(IPv4)是一个4字节32位的正整数。那么一共只有 2^32 次方个IP地址,大概是43亿左右。而TCP/IP协议规定,每个主机都需要有一个IP地址,这意味着,一共只有43亿台主机能接入网络吗?
实际上,由于一些特殊的IP地址的存在,数量远不足43亿。另外 IP 地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址。
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率、减少了浪费,但是IP地址的绝对上限并没有增加),但仍然不够用。这时候有三种方式来解决:
- 动态分配IP地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网,得到的IP地址不一定是相同的。
- NAT技术:网络地址转换。
- IPv6::IPv6并不是IPv4的简单升级版。这是互不相干的两个协议,彼此并不兼容。IPv6 用 16 字节 128 位来表示一个 IP 地址,但是目前还没有普及。
2. NAT技术
网络地址转换(NAT)是一种网络协议,用于在私有网络和公共网络之间转换IP地址。它通常用于家庭、小型办公室或企业网络,以便在一个公共IP地址下运行多个私有IP地址。
NAT技术可以隐藏内部网络的真实IP地址,从而增加了网络安全性。它可以防止来自互联网的未经请求的数据包进入内部网络,并且可以使内部网络中的主机更难受到攻击。
在NAT中,路由器会分配一个公共IP地址给内部网络中的每一个主机,并在必要时将数据包从公共IP地址转换到内部主机的私有IP地址。这使得内部网络中的多个主机可以共享单个公共IP地址,从而减少了IP地址的使用量。
然而,NAT技术也存在一些限制,例如它可能会影响某些应用程序的性能,特别是需要建立点对点连接的应用程序,例如视频会议或P2P文件共享。
五、私网IP和公网IP
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到因特网上。理论上使用任意的IP地址都可以,但是RFC 1918
规定了用于组建局域网的私有IP地址:
- 10.*,前8位是网络号,共 16,777,216 个地址。
- 172.16.* 到 172.31.* ,前12位是网络号,共 1,048,576 个地址。
- 192.168.*,前16 位是网络号,共 65,536 个地址。
包含在以上范围中的IP地址,都作为私有IP,其余的则称为全局IP(或公网IP)。
如下图所示:
- 一个路由器可以配置两个IP地址,一个是 WAN 口 IP ,一个是 LAN 口 IP (子网IP)。
- 路由器 LAN 口连接的主机,都从属于当前这个路由器的子网中。
- 不同的路由器,子网IP其实都是一样的(通常都是 192.168.1.1)。子网内的主机 IP 地址不能重复,但是子网之间的 IP 地址可以重复。
- 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口 IP 就是一个公网IP了。
- 子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP)。这样逐级替换,最终数据包中的IP地址成为一个公网 IP 。 这种技术就是 NAT(Network Address Translation,网络地址转换)。
六、路由
1. 认识路由
路由是将网络数据包从一个网络节点传递到另一个网络节点的过程。在网络中,路由器是负责路由数据包的设备。当一个数据包进入路由器时,路由器会根据其目标IP地址来确定数据包应该转发到哪个网络节点。
在路由的过程中,路由器需要查找路由表以确定数据包应该转发到哪个节点。路由表是一个数据结构,它包含了网络中的所有节点和它们之间的联系。当一个数据包到达路由器时,路由器会将其目标IP地址与路由表中的地址进行匹配,以便找到下一个节点的地址。
那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表:
- 路由表可以通过
route
命令查看。 - 如果目的IP命中了路由表,就直接转发即可。
- 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
假设某主机上的网络接口配置和路由表如下:
- 这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络。
- 路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表示此条目有效(可以禁用某些条目),G 标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
2. 路由表生成算法
路由表是用于将IP地址映射到网络路径的数据结构,路由表生成算法用于确定路由表中的网络路径。常见的路由表生成算法包括以下几种:
-
静态路由:管理员手动配置的路由,它们不会自动更新或更改。静态路由比较容易实现,但需要管理员手动配置,并且不适用于复杂的网络环境。
-
RIP(Routing Information Protocol):是一种距离向量路由协议,使用跳数作为距离指标,每个路由器将其邻居的路由表传递给其它路由器,以便每个路由器都能获得整个网络的路由信息。
-
OSPF(Open Shortest Path First):是一种链路状态路由协议,每个路由器将其连接到的所有路由器和网络的信息发送给其它路由器,以便每个路由器都能计算出整个网络的最短路径。
-
BGP(Border Gateway Protocol):是一种路径向量路由协议,用于在互联网上交换路由信息。它使用AS路径作为路由选择的标准,每个AS(自治系统)都将其拥有的网络告知其它AS,以便确定全局路由。
这些算法都有其优点和局限性,网络管理员需要根据网络拓扑、带宽、延迟等因素来选择适合的路由表生成算法。