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
服务器统一进行管理。