目录
一. IP协议报头结构
二. 地址管理
2.1 路由器
2.1.1 路由选择
2.1.2 WAN口(Wide Area Network)
2.1.3 LAN口(Local Area Network)
2.1.4 WLAN口(Wireless Local Area Network)
2.2 网段划分
2.1.1 IP地址格式
2.2.2 子网掩码(subnetmask)
2.2.3 网关
2.2.4 默认网关
2.3 特殊的IP地址
2.3.1 私有IP地址
2.3.2 保留地址
2.3.3 广播地址
三. 解决IP不够用的问题
方案一:动态 IP 分配 (DHCP)
方案二:NAT(Network Address Translation,网络地址转换)
1. 私有IP与公有IP
2. 局域网与广域网
3. NAT网络地址转换
方案三:IPv6
四. MAC地址 与 IP地址 的区别
4.1 定义
4.2 分配方式
4.3 工作层次
4.4 地址格式
4.5 寻址方式
IP协议的主要作用
- 地址管理:主机分配IP地址,定义了数据包的地址
- 路由选择:规划数据包传输的路径
一. IP协议报头结构
(1) 4位版本
指定IP协议的版本,实际上只有两个取值:4 --> IPv4;6 --> IPv6。
(2)4位首部长度
指定IP报头的长度,以4字节为单位,也是变长的。由于标准的IP头部是20字节,因此这个字段的值通常是5。
(3)8位服务类型TOS(Type of Service)
决定IP协议以哪种模式进行工作。3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。
4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。
- 最小延时:数据从 A 到 B 消耗时间最短
- 最大吞吐量:数据从 A 到 B 单位时间内传输的数据量最多
- 最高可靠性:IP协议不想 TCP 那样有严格的可靠性,但是 IP 一些机制会影响到丢包的概率
- 最小成本:设备上消耗的资源最少
(4)16位总长度(字节数)
指定整个IP数据包的长度,包括头部和数据部分,以字节为单位。最大值为65535字节,约是64KB。
* 那么是否意味着IP协议与UDP协议一样,传输数据不能超过64KB?—— 并非如此!
IP协议,内置了拆包组包机制,单个IP数据包确实没法超过64KB,但是不代表IP协议不能传输超过64KB的数据。IP协议会自动把大的数据包,拆成多个IP数据包携带传输,在接收方再进行拼装。
(5)用于数据拼装的字段
- 16位标识:用于唯一标识来自同一源的数据包。当数据包被分段时,所有片段将具有相同的标识值。
- 3位标志:用于控制或标识数据包的分段。只有后2位有效,第一位必须为0,第二位表示这个包是否需要组包(是否是拆包的一部分),第三位表示当前包是否是组包中的最后一个单位。
- 13位片偏移:指定该片段相对于原始数据包开始处的偏移量,决定组包的时候数据包的位置,以8字节为单位。
* 如果就是想使用UDP实现传输超过64KB的数据,如何做呢?—— 实现方案可参考IP协议!
应用层编写代码的时候,引入标识(id),并约定标识相同的数据,就应该组包;引入片偏移,约定组包时数据的先后顺序;引入标志位,用于区分是否需要组包,并标识组包的最后一个单位
(6)8位生存时间(TTL)
假设构造一个IP数据包,目的IP写成了不存在的IP。如果让这样的数据包无限传输,就会消耗很多的网络资源。TTL约定了传输时间的上限,达到上限之后,数据包就会自动被丢弃掉。
TTL的单位不是秒或者分,而是“次数”,指的是经过路由器转发的次数,即数据包在网络中可以经过的最大路由器数。发送一个IP数据包的时候,会有一个初始的TTL值(32,64,128....)数据包每次经过一个路由器转发,TTL就会-1(经过交换机不减的)。当TTL为0时,数据包将被丢弃。
一般TTL的初始值是64,此处显示TTL= 53,说明中间经过了 11 个路由器,最终到达了搜狗。
(7)8位协议
指定数据包所携带的数据是使用哪种传输层协议,如TCP(6)、UDP(17)等。 通过这里的不同数值,决定接下来要把数据交给TCP解析,还是UDP解析,还是其他协议解析 。
(8) 16位首部校验和
用于校验IP报头的完整性。在数据包传输过程中,如果头部信息发生变化,需要重新计算校验和。
(9)32位源IP地址 与 目的IP地址
指定发送数据包的源主机的IP地址 和 目的主机的IP地址。IP地址是32位整数,是一个很大的数字,不方便阅读,通常把32位(4字节) 通过3个点分割开,每个部分是一个字节,范围0~255。
(10)选项
可变长度,字段是可选的,额外的控制功能,如记录路由、时间戳等。
二. 地址管理
2.1 路由器
路由器是网络层设备,在不同网络之间(如局域网、广域网和互联网)转发数据包,确保信息正确、高效地到达目的地。 在网络世界中,每个路由器都像是一个十字路口,它需要知道如何将数据包(就像是要送的信件)发送到正确的目的地。
路由器不仅能够提供网络连接,还能够进行数据包的路由选择、网络地址转换(NAT)、防火墙功能、网络管理等。
在实际应用中,路由器通常被用来创建一个无线网络,该网络使用WiFi技术来允许设备无线连接到互联网。
2.1.1 路由选择
“路由”指在复杂的网络结构中,找出一条通往终点的路线。通过网络协议将数据包从源地址传输到目的地址,根据一定的路由选择策略,为数据包选择最佳的路由路径。
由于每个路由器,无法知道整个网络结构的全貌,只能知道其中的一小部分(附近的设备情况),因此IP协议的路由选择无法得到“最优解”,只能得到“较优解”。
路由的过程,是一跳一跳(Hop by Hop)的“问路”过程。每经过一个中间节点或路由器,就称为经历了“一跳”。这个术语用来描述数据在网络中的路径长度,即数据包到达目的地所必须经过的路由器的数量。
路由器中维护着路由表,存储在内存中,是一种重要的数据结构。路由表就是路由器的“地图册”,上面记录了所有可能的路径信息,包含网络地址、下一跳地址、接口信息等路由信息,从而实现数据转发。
路由表类似于hash表一样,key就相当于IP地址(网络号),value就是对应的网络接口(往哪个方向走)
在Windows操作系统上,输入 “route print” 命令,就可以查看路由表。
- 网络目标:这是数据包的目的地址或目的网络的标识符。当数据包到达路由器时,路由器会检查其目的IP地址,并与路由表中的网络目标进行比较,以确定最佳匹配的路由。
- 网络掩码:这个字段定义了网络目标的网络部分和主机部分的边界。通过与数据包的目的IP地址进行"与"运算,可以确定目的地址所属的网络。
- 网关:这是下一跳路由器的IP地址。当数据包需要离开本地网络时,它会首先发送到网关所指定的路由器,然后继续向目的地前进。
- 接口:这是数据包将从哪个网络接口发送出去。对于同一台路由器上的多个接口,不同的接口可能对应着不同的子网或网络段。
- 跃点数:这是一个可选的字段,通常表示从源到目的地的距离或成本。在某些情况下,路由器可能会根据跃点数来选择最优路径。
IP数据报到达路由器,就要进行路由表查表操作。根据IP数据报中的目的IP,查找这个目的IP在路由表中是否存在。
- 如果查到了,就按照路由表指向的方向继续转发;
- 如果没查到,路由表会有一个“默认表项” (下一跳),指向了一个更高层级的路由器(连接的设备范围更广) ;
- 依次反复,一直到达目标IP地址。
2.1.2 WAN口(Wide Area Network)
WAN口是路由器与广域网(通常是互联网服务提供商ISP的网络)之间的连接接口。它通常用于连接到外部网络,因此WAN口通常只有一个。主要功能是接收来自ISP的数据包,并将这些数据包转发到本地网络中的设备,反之亦然。
在某些情况下,WAN口可以连接到另一个路由器或网络交换机的以太网端口,以扩展或桥接网络。
除此之外,路由器的WAN口还可以连接光猫(光纤调制解调器,简称光猫),主要是将光纤网络信号转换为电信号,并通过路由器为家庭或企业网络提供无线或有线网络连接。
2.1.3 LAN口(Local Area Network)
LAN口是路由器与本地网络(如家庭、办公室或校园网络)之间的连接接口,通过LAN口将数据分发到本地网络中的设备。它通常用于连接内部网络中的设备,如计算机、打印机、智能设备等。LAN口可以有多个,以支持多个设备同时连接到本地网络。
2.1.4 WLAN口(Wireless Local Area Network)
路由器的WLAN口(无线局域网)是用来连接无线设备的接口。通过这个接口,路由器可以发射WiFi信号,供支持无线网络的设备(如手机、平板电脑、笔记本等)连接到网络,从而实现无线访问互联网和局域网的功能。
无线局域网本质的特点是不再使用通信电缆将计算机与网络连接起来,而是通过无线的方式连接,从而使网络的构建和终端的移动更加灵活。
WAN口是连接外部互联网的出口,LAN口是连接内部网络的接口,而WLAN口则是提供无线网络连接的接口。在现代网络设备中,如路由器,通常会同时提供WAN口、LAN口和WLAN功能,以满足不同设备的网络连接需求。
2.2 网段划分
IP地址是设备的唯一标识,子网掩码用于区分网络地址和主机地址,而默认网关则是设备访问外部网络的桥梁。
2.1.1 IP地址格式
IP地址分为两个部分,网络号和主机号:
- 网络号:保证相互连接(相邻)的两个网段具有不同的网络号标识
- 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
在同一个局域网中,某个设备网络号不相同的情况,无法上网;某个设备网络号虽然相同,主机号和别的设备重复,也无法上网。
过去曾经提出⼀种划分网络号和主机号的方案 --> “分类地址系统”,把所有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类地址,但只需要几百个主机地址,剩余的地址就会浪费。
- 路由表膨胀:由于每个网络都需要在互联网的路由表中有一个条目,这导致了路由表的快速膨胀,增加了路由器处理数据的负担。
针对这种情况提出了新的划分方案,称为CIDR(Classless Inter-Domain Routing,无类别域间路由),是一种灵活的IP地址分配和路由方法,通过可变长度的网络前缀来提高地址分配效率和减少路由表大小。
CIDR的优势:
1. 灵活的地址分配:CIDR不再按照A类、B类或C类的固定模式分配地址,而是根据实际需求分配地址块。例如,如果一个组织需要1000个IP地址,可以分配一个/22的网络块(22位网络号,10位主机号,最多容纳1024个主机),相当于3个连续的C类网络,而不是一个完整的B类网络,这样能够尽可能地减少地址浪费。
2. 路由聚合:通过路由聚合,ISP和其他网络运营商可以将多个较小的网络地址块汇总成一个较大的地址块,然后在互联网上通告这个较大的网络。这减少了路由器需要存储和维护的路由表条目数量。
路由聚合的通俗解释:
想象你是一个邮局的邮递员,负责将信件送到各个小区。如果你的邮局有一个详细的地址列表,上面列出了每个小区的每栋楼、每个单元、每户人家的具体地址,那么这个列表就会非常长,而且每次送信都要花很多时间去查找具体的地址。
现在,如果有一种方法,可以将同一个小区的所有地址归纳为一个简单的“小区地址”,那么你的地址列表就会大大缩短。当你收到一封信是寄往这个小区的,你只需要知道送到这个小区就可以了,而不需要关心具体是哪栋楼哪户人家。
在网络中,路由聚合的工作原理类似:
- 详细路由:每个网络设备都有一个路由表,里面记录了到达每个网络的具体路径。如果每个小的子网都有一个独立的条目,那么路由表就会变得非常庞大。
- 路由聚合:通过将多个小的子网合并成一个大的网络地址,路由表中的条目就可以减少。这样,路由器只需要知道如何到达这个大的网络,而不需要知道每个小网络的详细信息。
比如,有以下几个子网:
- 192.168.1.0/24
- 192.168.2.0/24
- 192.168.3.0/24
在没有聚合的情况下,路由表会有三个条目。通过路由聚合,可以将这些子网合并为一个更大的网络:192.168.0.0/22
2.2.2 子网掩码(subnetmask)
子网掩码是一个32位的二进制数字,用于将IP地址分为网络部分和主机部分。它通常与IP地址一起使用,以确定哪些位属于网络地址,哪些位属于主机地址。将IP地址和子网掩码进行“按位与”操作,得到的结果就是网络号。
子网掩码中的连续1表示网络地址部分,连续0表示主机地址部分。比如,子网掩码255.255.255.0 表示前24位是网络地址,后8位是主机地址。
除了使用上述点分十进制表示,还可以使用CIDR表示法,如/24,表示前24位是网络地址。
2.2.3 网关
网关是一种网络节点(指计算机网络中能够发送、接收、处理或转发数据包的任何设备),连接不同网络系统(如不同协议的网络)的设备,进行数据格式的转换。
类型:
- 默认网关:在本地网络中,默认网关通常是连接到互联网的路由器,它处理所有发往外部网络的数据包。在家庭网络中,路由器通常充当默认网关,连接家庭内部网络和互联网。
- 企业网关:在大型网络中,企业网关可能包括多个功能,如路由、防火墙、VPN等。企业可能使用多协议网关来连接使用不同通信协议的部门网络。
2.2.4 默认网关
默认网关是网络中的一个设备(通常是路由器),作为数据包从本地网络传输到其他网络(如互联网)的出口点。当数据包的目的地不在本地网络中时,设备会将数据包发送到默认网关。
作用:
- 路由:将数据包从一个网络转发到另一个网络。路由器在其路由表中查找与目的IP地址匹配的条目,以确定数据包的下一跳地址。
- 网络间的通信:默认网关连接不同的网络,使得不同网络中的设备能够相互通信。
- 出口点:对于主机来说,默认网关是访问外部网络(如互联网)的必经之路。
配置:
在每个网络设备上,都需要配置默认网关的IP地址,这个地址通常是本地网络中路由器的IP地址。
比如,如果计算机IP地址是192.168.128.10,子网掩码是255.255.255.0,而路由器的IP地址是
192.168.128.1,那么192.168.128.1就是默认网关。
2.3 特殊的IP地址
2.3.1 私有IP地址
- A类:10.0.0.0 ~ 10.255.255.255,适用于大型网络,因为它们提供了大量的地址空间。
- B类:172.16.0.0 ~ 172.31.255.255,适用于中型网络,比A类私有地址提供了更少的地址空间,但通常足够大多数企业使用。
- C类:192.168.0.0 ~ 192.168.255.255,适用于小型网络,如家庭、小型办公室或分支机构的网络。
这些地址用于内部网络,不会被路由到公共互联网。
2.3.2 保留地址
- 0.0.0.0:表示未指定地址或无效地址,通常用于表示本机的默认路由。将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。因此,给局域网中的某个设备,分配IP地址的时候,不能把主机号设为全0!
- 127.0.0.0/8:环回地址(Loopback Address),通俗来讲就是自发自收。给这个IP发一个数据,设备就会从这个IP上再收到同一个数据,自己发给了自己(回显服务器echo server设置的)。一般用于网络软件测试以及本地机器上的服务访问,其中127.0.0.1是最常用的环回地址。
2.3.3 广播地址
- 广播地址:在IPv4中,255.255.255.255 用作本地网络的广播地址。
- 子网广播地址:在子网中,广播地址通常是该子网的主机部分全部为1的地址,用于给同一个链路中相互连接的所有主机发送数据包。 比如 子网掩码是255.255.255.0,IP地址 192.168.0.255 就是一个广播地址,往这个IP地址上发送数据包,就相当于给整个局域网中所有的设备都发了一次数据包。
接下来要讲的DHCP,就使用了广播来分配IP地址和其他网络配置参数给网络中的设备。
三. 解决IP不够用的问题
我们知道,IP地址(IPv4)是一个4字节32位的正整数,那么一共只有2的32次方个IP地址,大概是43亿左右。而TCP/IP协议规定,每个主机都需要有一个IP地址,这意味着,一共只有43亿台主机能接入网络么?
实际上,由于一些特殊的IP地址的存在,数量远不足43亿;另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址。
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减少了浪费),但是IP地址的绝对上限并没有增加,仍然不够用,这时候有三种方式来解决。
方案一:动态 IP 分配 (DHCP)
设置IP地址的方式
- 手动设置IP地址:可以根据自己的规划,配置每台设备的固定IP,有利于对网络的统一管理。
- 自动获取IP地址:使用DHCP(动态主机配置协议)动态分配IP地址,确保地址只在需要时分配,并在不使用时释放。
DHCP分配IP的过程(家庭网络中,路由器充当DHCP角色)
1. PC 广播 DHCP Dsicover报文
- 当一个客户端(如计算机、手机等)接入网络时,它会发送一个 DHCP Discover消息,这是一个广播消息,目的是寻找网络中的DHCP服务器。
- 客户端通常使用0.0.0.0作为源IP地址,使用255.255.255.255作为目标IP地址。
2. DHCP服务器 分配IP 并 回复offer报文
- 网络中的所有DHCP服务器收到Discover消息后,会检查自己的地址池,然后向客户端发送一个 DHCP Offer消息(Offer消息包含了服务器的IP地址、客户端的IP地址、子网掩码、租约期限等信息)
3. PC 广播 DHCP Request报文
- 客户端从收到的多个Offer消息中选择一个(通常是收到的第一个),然后向选定的DHCP服务器发送一个DHCP Request消息,确认接受该服务器提供的IP地址。
- 如果有多个服务器提供了Offer,客户端只会响应一个Offer,其他的Offer将被忽略。
4. DHCP服务器 回复ACK包 确认此IP可用
- 选定的DHCP服务器收到 Request消息后,会发送一个DHCP ACK消息给客户端,确认IP地址的分配。
- ACK中包含了租约期限、网关地址、DNS服务器地址等配置信息。
其中,上述前两步是非必须执行的。因为当PC重启后,PC无需重新获取IP地址,只需要再次确认就可以了:PC直接发送request包,请求使用此IP,DHCP服务器需要检查此IP是否可用。
如果可以使用,则直接回复ACK确认PC可以使用此IP地址;如果不可以使用,比如此IP被其他设备占用,则回复DHCP NACK包拒绝申请,此时PC需要重新从第一步申请一个新的IP地址。
方案二:NAT(Network Address Translation,网络地址转换)
1. 私有IP与公有IP
- 私有地址:
根据RFC1918,私有地址空间包括以下三个地址块:
10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
192.168.0.0 ~192.168.255.255 (192.168.0.0/16) - 公有地址:这些是互联网上唯一分配的地址,由互联网服务提供商(ISP)提供。
要求公网IP必须是唯一的,但是私网IP是允许重复的(在不同的局域网中是允许重复的)
2. 局域网与广域网
- 局域网(LAN)是一个小范围内的计算机网络,通常限于单一建筑物或地点,由一个组织拥有和管理,用于共享资源和通信,速度较快。像是一个家庭或学校的内部网络,用来连接家里的电脑、打印机或者学校里的教室和办公室,速度快,一般由家庭或学校自己管理。
- 广域网(WAN)是一个大范围的网络,可以跨越城市、国家甚至全球,通常由多个组织共同运营,用于连接不同地点的局域网,速度相对较慢。 比如互联网就是最大的广域网,它连接了全世界的电脑和网络,速度比局域网慢,通常由电信公司或其他大型网络服务提供商来建设和维护。
3. NAT网络地址转换
一个设备在进行上网的时候,IP数据报中的IP地址,就会被NAT设备(通常就是路由器)进行自动的修改。
- 同一个局域网内,主机A <--> 主机B:主机A和主机B都配置有私有IP地址,它们通过局域网内的交换机或路由器直接通信,不会涉及到NAT机制
- 不同的局域网中,主机A <--> 主机B:此时主机A和主机B位于不同的私有网络中,在NAT机制中,是不允许的!!
- 公网设备A <--> 公网设备B:两台设备都拥有公网IP地址,它们可以直接在互联网上进行通信,不会涉及到NAT机制
- 私有网络中的设备 <--> 公网设备:NAT会将私有IP地址转换为公网IP地址
静态NAT:每个私有地址都有一个与之对应并且固定的公有地址,即私有地址和公有地址之间的关系是一对一映射。
动态NAT:为避免地址浪费,创建地址池。当私网地址需要访问外网时,从地址池中取出一个地址与私有地址一对一临时映射。
NAPT(Network Address and Port Translation,网络地址端口转换):从地址池中选择地址进行地址转换时,不仅转换IP地址,同时也会对端口号进行转换,从而实现公有地址与私有地址的1 : n 映射,可以有效提高公有地址利用率。
NAT机制虽然节省了IP地址并提高了安全性,但网络环境太复杂了,替换过程中,每一层路由器都需要维护映射关系,每次转发数据,都要查询映射关系,开销大,增加了网络延迟,可能导致连接问题,并限制了网络的可扩展性和透明性。
方案三:IPv6
IPv6的出现,从根本上解决了IP地址不够用的问题。IPv6并不是IPv4的简单升级版,这是互不相干的两个协议,彼此并不兼容;IPv6用16字节128位来表示一个IP地址,足以给世界上的每一粒沙子分配一个IP地址,但是目前IPv6还没有普及。
IPv6提出的时间是在上个世纪90年代,时间上和NAT其实差不多。之所以IPv6推广举步维艰,是因为IPv6和IPv4不兼容,要想使用IPv6,就需要更换能支持IPv6的设备。但是NAT机制,只要给路由器设备,更新升级软件即可,硬件不需要改变 (成本非常低)。
四. MAC地址 与 IP地址 的区别
4.1 定义
- MAC地址:是一个唯一的硬件地址,它被烧录在网络接口卡(NIC)上,用于在局域网(LAN)中标识硬件设备。
- IP地址:是一个逻辑地址,用于在网络中标识设备的网络位置,可以是局域网、广域网或互联网。
4.2 分配方式
- MAC地址:通常是固定的,由网络接口卡的制造商分配,并在生产过程中烧录到硬件中。
- IP地址:可以是静态分配的,也可以是动态分配的(通过DHCP服务器)。IP地址可以根据网络配置的变化而改变。
4.3 工作层次
- MAC地址:工作在数据链路层(OSI模型的第二层),负责在同一网络段内,相邻设备之间传输数据帧。(微观)
- IP地址:工作在网络层(OSI模型的第三层),负责在不同的网络之间路由数据包,进行路由规划。(宏观)
4.4 地址格式
- MAC地址:通常6个字节表示,MAC地址当前仍然可以给每个设备,都分配一个唯一的地址值。
- IP地址:对于IPv4,使用4个字节表示;对于IPv6,使用16个字节表示
4.5 寻址方式
- MAC地址:用于直接在局域网内寻找设备,通常是通过ARP将IP地址解析为MAC地址。以太网数据帧里面的MAC地址随着转发的过程,源MAC和目标MAC都会时刻发生改变(每经过一个交换机/路由器都会发生变化)
- IP地址:用于在网络层寻址和路由数据包,确保数据能够从源地址传输到目的地址。