LV06-02-网络基础-05-IP协议简介
本文主要是网络基础——IP协议简介的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
| Windows | windows11 |
| Ubuntu | Ubuntu16.04的64位版本 |
| VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
| SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
| 开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
| uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
| linux内核 | linux-4.15(NXP官方提供) |
| STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
| 参考方向 | 参考原文 |
| --- | --- |
这里简单了解一下IP协议吧。这一节的笔记挺迷糊的,有坑的话后边再补充。
一、IP协议简介
IP,全称Internet Protocol,即网际互连协议,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
IP是整个TCP/IP协议族的核心,也是构成互联网的基础。IP位于TCP/IP模型的网络层(相当于OSI模型的网络层),它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。
IP主要包含三方面内容:IP编址方案、分组封装格式及分组转发规则。IP所提供的服务大致可归纳为两类:IP信息包的传送和 IP信息包的分割与重组。这里就不详细展开写了,可以看百度百科,这部分笔记就来自于百度啦。
二、IP数据报文
在 TCP/IP 协议中,使用 IP 协议传输数据的包被称为 IP 数据包,每个数据包都包含 IP 协议规定的内容。IP 协议规定的这些内容被称为 IP 数据报文(IP Datagram)或者 IP 数据报。
IP 数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的,在首部的固定部分的后面是一些可选字段,其长度是可变的。
1. IPv4数据报文首部结构
2. IPv6数据报文首部结构
三、IP协议相关技术
1. DNS
TCP/IP提供了通过IP地址来连接到设备的功能,但对用户来讲,记住某台设备的IP地址是相当困难的,因此专门设计了一种字符串形式的主机命名机制,这些主机名与IP地址相对应。在IP地址与主机名之间需要有一种转换和查询机制,提供这种机制的系统就是域名系统DNS(Domain Name System)。
它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
我们平时在上网的时候,通常使用的方式是域名,而不是 IP 地址,比如我们要搜索东西,需要用百度的话,我们输入的网址是www.baidu.com,而不是IP地址。那么实现这从IP地址到域名的技术就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。
1.1 域名的层级
DNS 中的域名都是用句点.来分隔的,比如 www.server.com,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。
域名系统的名字空间是层次结构的,类似Windows的文件名。它可看作是一个树状结构,域名系统不区分树内节点和叶子节点,而统称为节点,不同节点可以使用相同的标记。所有节点的标记只能由3类字符组成:26个英文字母(a~z)、10个阿拉伯数字(0~9)和英文连词号(-),并且标记的长度不得超过22个字符。
最上层节点的域名称为顶级域名(TLD,Top-Level Domain),如.com、.net、.cn 等,第二层节点的域名称为二级域名,如baidu.com,依此类推。例如,
https://www.server.com是一个网址;www.server.com是域名;.com是顶级域名;server.com是二级域名;www.server.com是三级域名
实际上域名最后还有一个点,比如 www.server.com.,这个最后的一个点代表根域名。也就是说,. 根域是在最顶层,它的下一层就是 .com 顶级域,再下面是 server.com。
1.2 域名的分配
最初所有机器使用的名字构成了一个非等级的名字空间,由字符序列组成所有的名字。网络信息中心NIC(Network Information Center)管理这个名字空间,并负责接纳新名字。非等级名字空间由于自身的特点不能管理大量的机器名字,主要有如下原因:
- 名字由字符序列组成,存在潜在的命名冲突。
- 名字空间的管理结构位于一个站点,机器数量的不断增多对管理工作带来很大负担。
- 名字到
IP地址的映射经常发生变化,导致维护域名空间的工作量巨大。
后来TCP/IP把DNS的域名设计成了分级的结构。Internet域名结构由TCP/IP协议栈中的DNS进行定义。DNS把因特网划分成多个顶级域。顶级域采用组织模式和地理模式的划分模式。地理模式按照国家进行划分等。
| 顶级Internet域名 | 含义 |
| com | 商业组织 |
| edu | 教育机构 |
| gov | 政府机构 |
| mil | 军事部门 |
| net | 主要网络支持中心 |
| int | 国际组织 |
| org | 其他组织 |
| 国家代码 | 其他各个国家(按照地理模式划分) |
域名由因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers)管理,这是为承担域名系统管理、IP地址分配、协议参数配置,以及主服务器系统管理等职能而设立的非盈利机构。ICANN为不同的国家或地区设置了相应的顶级域名,这些域名通常都由两个英文字母组成。例如:.uk代表英国、.fr代表法国、.jp代表日本。中国的顶级域名是.cn,.cn下的域名由CNNIC进行管理。
1.3 域名解析
因特网上的DNS服务器按照层次安排,根据不同层次的域名服务器所起的作用,可以把域名服务器分为4种不同的类型。
| 根域名服务器 | 最高层次的域名服务器,也是最重要的域名服务器,全球有13个根域名服务器名称。一个根服务器的名字可以作为入口对应一组服务器集群来提供域名解析服务。 |
| 顶级域名服务器 | 负责管理在该顶级域名服务器注册的下一级域名(二级域名)。所有顶级域名服务器的名称和IP地址是在根服务器注册的,也就是说,根域名服务器知道所有的顶级域名服务器的名称和IP地址。 |
| 权威域名服务器 | 负责一个区的域名服务器,通常是指顶级域名以下的管理二级、三级、四级等域名的服务器。 |
| 本地域名服务器 | 当一个主机(个人电脑)发出DNS请求时,查询请求就被发送到本地域名服务器,本地域名服务器负责回答这个查询,或者代替主机向域名空间中不同层次的权威域名服务器查询,再把查询的结果返回给主机。 |
层次关系如下图所示:
根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路找到位于下层的某台目标 DNS 服务器。
下边就来了解一下解析流程吧:
- (1)客户端通过浏览器访问域名为
www.server.com (http://www.server.com)的网站,发起查询该域名的IP地址的DNS请求。该请求发送到了本地DNS服务器上。本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。 - (2)本地
DNS服务器向根服务器发送DNS请求,请求域名为www.server.com (http://www.server.com)的IP地址。 - (3)根服务器经过查询,没有记录该域名及
IP地址的对应关系。但是会告诉本地DNS服务器,可以到域名服务器上继续查询,并给出域名服务器的地址(.com服务器)。 - (4)本地
DNS服务器向.com服务器发送DNS请求,请求域名www.server.com (http://www.server.com)的IP地址。 - (5)
.com服务器收到请求后,不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,该域名可以在server.com域名服务器上进行解析获取IP地址,并告诉server.com域名服务器的地址。 - (6)本地
DNS服务器向server.com域名服务器发送DNS请求,请求域名www.server.com (http://www.server.com)的IP地址。 - (7)
server.com服务器收到请求后,在自己的缓存表中发现了该域名和IP地址的对应关系,并将IP地址返回给本地DNS服务器。 - (8)本地
DNS服务器将获取到与域名对应的IP地址返回给客户端,并且将域名和IP地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
但是每次解析域名不一定都要经过那么多的步骤,浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问本地 DNS 服务器。
2. DHCP
DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议。它是一个局域网的网络协议,指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。我们的电脑通常都是通过 DHCP 动态获取 IP 地址,大大省去了配 IP 信息繁琐的过程。
难以想象,这部分笔记所学习的DHCP相关知识竟然是从一款产品的文档中获得的,不过说的确实很详细,感兴趣的话可以看这里:NetEngine AR 产品文档 (huawei.com)
【说明】关于DHCP的配置说明部分在这个手册的【配置→配置指南(通过命令行)→IP业务配置指南→DHCP配置】
2.1 使用DHCP有什么优势?
使用DHCP有如下优势:
- 准确的
IP配置:IP地址配置参数必须准确,并且在处理192.168.XXX.XXX之类的输入时,很容易出错。另外印刷错误通常很难解决,使用DHCP服务器可以最大程度地降低这种风险。 - 减少
IP地址冲突:每个连接的设备都必须有一个IP地址。但是,每个地址只能使用一次,重复的地址将导致无法连接一个或两个设备的冲突。当手动分配地址时,尤其是在存在大量仅定期连接的端点(例如移动设备)时,可能会发生这种情况。DHCP的使用可确保每个地址仅使用一次。 IP地址管理的自动化:如果没有DHCP,网络管理员将需要手动分配和撤消地址。跟踪哪个设备具有什么地址可能是徒劳的,因为几乎无法理解设备何时需要访问网络以及何时需要离开网络。DHCP允许将其自动化和集中化,因此网络专业人员可以从一个位置管理所有位置。- 高效的变更管理:
DHCP的使用使更改地址,范围或端点变得非常简单。例如,组织可能希望将其IP寻址方案从一个范围更改为另一个范围。DHCP服务器配置有新信息,该信息将传播到新端点。同样,如果升级并更换了网络设备,则不需要网络配置。
2.2 DHCP组网
一种典型的组网如下图所示:
| DHCP服务器 | DHCP服务器负责从地址池中选择IP地址分配至DHCP客户端,还可以为DHCP客户端提供其他网络参数,如默认网关地址、DNS服务器地址和WINS服务器地址。DHCP服务器可以接收处理来自本网段或跨网段由DHCP中继转发的DHCP请求报文。 |
| DHCP客户端 | DHCP客户端发送DHCP请求报文、通过BOOTP或DHCP协议请求获取IP地址等网络参数的设备。例如,IP电话、PC、手机、无盘工作站等。 |
| DHCP中继 | DHCP中继负责转发DHCP服务器和DHCP客户端之间的DHCP报文,协助DHCP服务器向DHCP客户端动态分配网络参数的设备。 |
2.3 DHCP报文
DHCP服务器与DHCP客户端之间通过DHCP报文进行通信。DHCP报文是基于UDP协议传输的。DHCP客户端向DHCP服务器发送报文时采用68端口号,DHCP服务器向DHCP客户端发送报文时采用67端口号。目前DHCP定义了如下八种类型报文:
| 报文名称 | 说明 |
| DHCP DISCOVER | DHCP客户端首次登录网络时进行DHCP交互过程发送的第一个报文,用来寻找DHCP服务器。 |
| DHCP OFFER | DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。 |
| DHCP REQUEST | 此报文用于以下三种用途。客户端初始化后,发送广播的DHCP REQUEST报文来回应服务器的DHCP OFFER报文。客户端重启后,发送广播的DHCP REQUEST报文来确认先前被分配的IP地址等配置信息。当客户端已经和某个IP地址绑定后,发送DHCP REQUEST单播或广播报文来更新IP地址的租约。 |
| DHCP ACK | 服务器对客户端的DHCP REQUEST报文的确认响应报文,客户端收到此报文后,才真正获得了IP地址和相关的配置信息。 |
| DHCP NAK | 服务器对客户端的DHCP REQUEST报文的拒绝响应报文,例如DHCP服务器收到DHCP REQUEST报文后,没有找到相应的租约记录,则发送DHCP NAK报文作为应答,告知DHCP客户端无法分配合适IP地址。 |
| DHCP DECLINE | 当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此报文来通知服务器,并且会重新向服务器申请地址。 |
| DHCP RELEASE | 客户端可通过发送此报文主动释放服务器分配给它的IP地址,当服务器收到此报文后,可将这个IP地址分配给其它的客户端。 |
| DHCP INFORM | DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP INFORM请求报文。 |
2.4 如何获取IP的?
只有跟DHCP客户端在同一个网段的DHCP服务器才能收到DHCP客户端广播的DHCP DISCOVER报文。当DHCP客户端与DHCP服务器不在同一个网段时,必须部署DHCP中继来转发DHCP客户端和DHCP服务器之间的DHCP报文。在DHCP客户端看来,DHCP中继就像DHCP服务器;在DHCP服务器看来,DHCP中继就像DHCP客户端。
2.4.1 无中继场景时DHCP客户端首次接入网络
(1)发现阶段
客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,由于次接入网络的DHCP客户端没有 IP 地址,也不知道 DHCP 服务器的IP地址,为了获取到DHCP服务器的IP地址,DHCP客户端发送DHCP DISCOVER报文到链路层,然后链路层以广播方式发给同一网段内的所有设备(包括DHCP服务器或中继)。广播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。
DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。
(2)提供阶段
与DHCP客户端位于同一网段的DHCP服务器都会接收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端。
该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。通常,DHCP服务器的地址池中会指定IP地址的租期,如果DHCP客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。
点击查看租期和地址池的概念
- 租期
DHCP服务器给每个分配给客户端的IP地址定义一个使用期限,该使用期限被称为租期。在租期到期前,DHCP客户端如果仍需要使用该IP地址,可以请求延长租期;如果不需要,可以主动释放该IP地址。在没有其他空闲地址可用的情况下,DHCP服务器会把客户端主动释放的IP地址分配给其他客户端。
DHCP服务器动态分配的所有IP地址都受租期时长的限制,不同的DHCP服务器配置的租期时长可以不同。静态分配的IP地址不受租期时长的限制,使用期限为无限长。
DHCP客户端不会等到租期到期后再申请IP地址,这样会导致IP地址被服务器回收,然后分配给其他客户端。为保证能够使用原来的IP地址,客户端会在租期到期前的某个时间点就开始申请延长租期。
- 地址池
指的是DHCP服务器可以为客户端分配的所有IP地址的集合。除IP地址外,地址池内还可以配置租期、子网掩码、默认网关等网络参数。在DHCP服务器为客户端分配IP地址时,这些网络参数也一并分配给客户端。根据创建方式的不同,地址池可以分为基于接口方式的地址池和基于全局方式的地址池。
基于接口方式的地址池:在DHCP服务器与客户端相连的接口上配置IP地址,地址池是跟此接口地址所属同一网段的IP地址,且地址池中地址只能分配给此接口下的客户端。这种配置方式简单,仅适用于DHCP服务器与客户端在同一个网段的场景。
基于全局方式的地址池:在系统视图下创建指定网段的地址池,且地址池中地址可以分配给设备所有接口下的客户端。当DHCP务器与客户端不在同一个网段时,需要部署DHCP中继。
(3)选择阶段
如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符(即Option54)和客户端IP地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IP地址)。
DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。
(4)确认阶段
当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址分配给客户端使用。
一旦客户端收到 DHCP ACK 后,交互便完成了,并且客户端能够在租用期内使用 DHCP 服务器分配的 IP 地址。
2.4.2 有中继场景时DHCP客户端首次接入网络
从上边了解到DHCP用的是广播,那如果 DHCP 服务器和客户端不是在同一个局域网内,路由器又不会转发广播包,那不是每个网络都要配一个 DHCP 服务器?为了解决这一问题,就出现了 DHCP 中继代理。有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。