【计算机网络】网络层——IP协议

文章目录

  • IP协议
    • [1. IP协议报文格式](#1. IP协议报文格式)
    • [2. 认识IP地址](#2. 认识IP地址)
    • [3. 子网掩码](#3. 子网掩码)
    • [4. DHCP 与 NAT(解决IPv4地址数量枯竭问题)](#4. DHCP 与 NAT(解决IPv4地址数量枯竭问题))
    • [5. 路由选择](#5. 路由选择)

前言:

本文是对 TCP/IP 协议栈中网络层的重要协议 IP协议 的基本介绍。

IP协议

IP协议 全称为互联网协议,是一种网络层通信协议,负责网络中主机之间的数据包传输。

在 TCP/IP协议栈中,IP协议的主要功能为 地址管理路由选择

地址管理 :制定一系列的规则,通过 IP地址 描述出一个设备在网络上的位置。
路由选择:在复杂的网络传输环境中,一个节点到另一个节点存在很多不同的传输路径,路由选择即通过路由算法在众多的路径中规划出更加合适的路径进行数据传输。

1. IP协议报文格式

  • 版本:表示 IP协议的版本。占 4 位,通常为 IPv4 或 IPv6。
  • 首部长度:表示 IP报文首部的长度。占 4 位,它是一个 0 ~ 15 的数据,单位为 4个字节,但在实际情况中 IP首部长度字段最小为 5(不包含任何选项),因此 IP首部长度的范围为 20 ~ 60。
  • 服务类型:用于指定 IP数据包的服务质量。占 8 位,其中有 3 位优先权字段(已弃用)、4 位 TOS字段和 1 位保留位(必须置为0)。TOS字段只有一位能为 1,分别表示不同的 IP协议形态:最小延迟、最大吞吐量、最高可靠性、最小成本。
  • 16位总长度:表示整个 IP数据包的总长度。占 16 位,单位为 1字节,因此一个 IP数据包最多可以携带 64KB(忽略首部的长度)的数据。当数据量太大时 IP协议 能通过 16位标识、3 位标志、13 位片偏移 来支持"拆包组包"的功能。
  • 标识:用于唯一标识数据报文。占 16 位,一个大的 IP数据包被拆分成若干分片时,所有分片都具有相同的标识。
  • 标志:包括分片相关的标志,其中 1 位为保留位(现在暂时不用),1 位表示支持该 IP数据包是否支持"拆包"(分片),另一位表示当前数据包是否最后一个分片。
  • 片偏移:指示数据报在原始数据报中的相对位置,用于接收端重新组装分片。
  • 生存时间(TTL) :表示数据报文在网络中允许传输的最大跳数,每经过一个路由器转发跳数 -1,当生存时间为0时数据包将被丢弃。生存时间通常设置为 32、64、96等,理论上不会因为初始值过小而发生频繁的丢包的情况(参考 六度空间理论)。
  • 协议:描述了 IP数据包的载荷部分使用什么协议(传输层)。如:TCP、UDP、ICMP等。
  • 首部检验和:用于检测 IP数据报首部在传输过程中是否出错。
  • 源/目的 IP地址:表示了数据发送方和接收方的网络地址。
  • 选项:用于指定一些可选的首部信息,如记录路由、时间戳等。

2. 认识IP地址

  • 概念

    IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。

  • 作用

    IP地址用于定位和标识唯一的网络设备,以便数据能被正确地路由和转发。

  • 格式

    IP协议可分为 IPv4IPv6

    IPv4 地址由 32位数(4字节)据组成,每 8位为一组,通常采用"点分十进制"表示,每部分大小为 0 ~ 255,如:123.5.255.1。

    IPv6 地址由128位数据(16字节)组成,每 16为一组,采用 16进制表示,用冒号分隔。如:2558:1659:e670:2a6c:fd48:cf53:ee98:4f15。

  • 组成(主要介绍 IPv4)

    IP地址分为两个部分:网络号主机号

    网络号:标识网段,即一个局域网,两个相邻局域网的网络号不能相同。

    主机号:标识主机,即局域网中的一台设备,同一个局域网内主机的网络号必须相同,主机号不能相同。

注意:如果一个IP地址的主机号全为0,则该 IP表示"网络号",不能被分配给具体的主机;如果一个 IP地址的主机号全为1,则该 IP就是一个"广播地址",该 IP也不能被分配给具体的主机;如果一个 IP地址以127开头的,则此 IP为"环回IP",表示"自身",常用的环回IP有127.0.0.1等。

如何区分一个IP地址的网络号和主机号?
当前网段是采用带有子网掩码的划分方式 (后面会介绍子网掩码),而在"上古时期"则采用如下图将 IP地址划分为五类。

注意:主机最大连接数应减去2,因为主机号为全 0 和全 1 是特殊IP地址。

3. 子网掩码

子网与 IPv4地址一样都是一个32位的数据,用于将一个IP地址划分为网络号和主机号。其中左边连续的二进制数字 1 代表网络号,右边连续的二进制数字 0 代表主机号。例如:一个主机的 IPv4地址为 192.168.5.300,对应的子网掩码为 255.255.255.0,则该 IP地址前24位代表网络号即192.168.5.0,后8位代表主机号即0.0.0.300。

常见的子网掩码有:255.0.0.0(用于大型网络)、255.255.0.0(用于中型网络)、255.255.255.0(用于小型网络或家庭网络)。

4. DHCP 与 NAT(解决IPv4地址数量枯竭问题)

在IPv4协议诞生初期,网络设备还比较少,32位的地址为每一台设备分配一个IP地址绰绰有余;而随着互联网普及率的大幅增加和各种智能家居设备的出现,IPv4已完全不能满足每一台设备 IP地址的分配,因此 DHCP协议和NAT技术 的出现就是为了缓解 IPv4地址枯竭的问题。

DHCP:是一种用于动态分配网络设备 IP地址和其他网络配置信息的协议(应用层协议)。它允许设备在连接到网络时自动获取所需的网络配置,没有联网时则不分配 IP地址。动态分配 IP虽然提高了 IP地址的利用率,但本质上并没有增加 IP地址的数目,因此它属于"治标不治本"的过渡方案。

NAT :是一种在网络路由器上执行的技术,能够将局域网内部设备的 IP地址映射为广域网的 公共IP地址,以实现对外部网络的访问。NAT机制本质上是让一个 外网IP地址代表一批网络设备,以此来"提高" IPv4地址的数量。

在NAT机制下,IP地址被分为两个大类,即内网IP(局域网IP)和外网IP(广域网IP)。

  • 内网IP:通常情况下,如果一个 IP地址是以 10.x.x.x 或者 172.16.x.x - 172.31.x.x 或者 192.168.x.x 开头就是内网IP。在同一个局域网中 内网IP之间不能重复;在不同的局域网中, 内网IP之间可以重复
  • 外网IP:除了内网IP,剩下的 IP 就是外网IP。外网 IP 必须唯一,不允许重复。通常情况下,一个大的局域网可能由一个小区/一个学校/一个公司构成,在这个局域网中可能存在成千上万台设备,而一个 外网IP则代表了这些设备(这个局域网)。

注意:局域网内的设备能够主动访问外网设备,而外网设备无法主动访问局域网内的设备。

NAT机制是如何工作的?(局域网内的设备如何访问外网设备?如下图)

如果一个局域网内的多个设备同时访问外网的同一服务器,当响应返回时,路由器如何知道数据应被返回哪个主机呢?(如下图)

如果一个局域网内的多个设备同时访问外网的同一服务器,且进程的端口号相同,当响应返回时,商路由器如何知道数据应被返回哪个主机呢?(如下图)

5. 路由选择

上述的一系列规则都与"地址管理"功能有关,而在 IP协议中,还有一个重要的功能------路由选择。

路由选择:指在多个可用路由之间选择最佳路径的过程,以便将数据从源IP 传输到目的IP。

在30年前,人们去到某个不认识的地方往往靠地图指引或向他人问路,而在"技术爆炸"的今天,我们无论想去哪个地方都只需要打开地图导航软件,输入目的地即可瞬间获得一条到达的最佳线路。地图软件之所以可以瞬间获得一条最佳路径,是因为在它的服务器上已经存储了所有地点的信息,相当于站在"上帝视角"引路。

当进行 IP数据报转发的时候,每个路由器都是无法得知网络"全貌"的,只知道一些局部的信息,即哪些设备是与自己相连的。因此,这就意味着 IP数据报在转发的过程是一个"探索式"的过程,无法确保数据传输路径一定是"最优解",只能获得一个"较优解"。

路由选择的过程:

由于每个路由器都只掌握了局部信息,因此 IP数据每报经过一个路由器转发时都要经历"问路"的过程,在路由器内部有一个数据结构"路由表",表中记录着相连设备的信息,当 IP数据报到达路由器时会根据路由器查询目的IP地址是否存在,若查到则按照给定路线将数据送往目的主机(问的人知道怎么走),若没有查到目的IP的信息(问的人不知道咋走)则按路由器的默认表项进行转发,重复上述过程,直到在生存时间(TTL)耗尽前找到目的IP为止。


以上就是本篇文章的全部内容了,如果这篇文章对你有些许帮助,你的点赞、收藏和评论就是对我最大的支持。

另外,文章的不足之处,也希望你可以给我一点小小的建议,我会努力检查并改进。

相关推荐
醉陌离3 分钟前
渗透测试笔记——shodan(4)
笔记
Estar.Lee11 分钟前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
LateBloomer77717 分钟前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz21 分钟前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py22 分钟前
【Linux】-学习笔记04
linux·笔记·学习
友友马42 分钟前
『 Linux 』网络层 - IP协议(一)
linux·网络·tcp/ip
fengbizhe1 小时前
笔试-笔记2
c++·笔记
余为民同志2 小时前
mini-lsm通关笔记Week2Day4
笔记
墨染风华不染尘2 小时前
python之开发笔记
开发语言·笔记·python
徐霞客3202 小时前
Qt入门1——认识Qt的几个常用头文件和常用函数
开发语言·c++·笔记·qt