【Linux进阶之路】地址篇

文章目录

一、ipv4地址

1. 基本概念

  • 概念:IP地址,英文全称Internet Protocol Address,又译为网际协议地址、互联网协议地址。是网际协议中用于标识发送或接收数据报的设备的一串数字。
  • 功能:
    1. 定位并标识网络中的唯一的一台设备。
    2. 用于数据在传输时进行寻址。
  • 范围:0 ~ 42 9496 7295,最大为42亿多。
  • 表示形式:点分十进制,方便进行记忆,以下图为例:将点分十进制ip地址转换成计算机的数据。
ip地址 192 . 168 . 1 . 1
十进制 192 168 1 1
二进制 1100 0000 1010 1000 0000 0001 0000 0001
合并
计算机中存储 1100 0000 1010 1000 0000 0001 0000 0001 32位 4字节
再转化为十进制 3232235777 unsigned int

总而言之,ip地址在计算机中就是一个32位的unsigned int的整数。

2. 分类

  • 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 ~ 255.255.255.255

  • 单类地址表示的主机数:
表示范围 A类 B类 C类
0 ~ 2^24^ - 1 0 ~ 2^16^ - 1 0 ~ 2^8^ - 1
理论最大主机数 16777216 65536 256
实际最大主机数 16777214 65534 254

减2的原因

  1. 当主机号全为0的时候,用于表示网络序号。
  2. 当主机号全为1的时候,用于表示广播地址。

为什么要进行分类呢?

  1. 对IP地址进行严格划分,不同的网络根据需求分配不同类别的ip地址。需求大就分配A类,需求小就分配C类。
  2. 对网络进行划分,分组管理,方便路由,快速定位寻址
  3. 划分功能,A类,B类,C类是根据主机范围进行逐级递减,D类用于组播,E类待定。

对于快速定位寻址这一点,为了方便理解,这里简单的画一张图,对其进行分析:

  • 首先,主机1位于局域网A中,主机2位于局域网B中,局域网之间的主机无法直接进行通信,需要借助路由器进行网络转发。
  • 其次,假设主机1想要给主机2发送消息,且主机1在一个A类网络中,主机2在一个C类网络中。
  • 然后,这时主机1识别到主机2的ip地址与其不在同一个网络当中,那么就会转发到路由器A上,由其进行转发。
  • 接着,路由器A转发到广域网所在的路由器中,识别到其路由表中存在主机2所在的网段,并且由路由器C进行管理。
  • 最后,将数据转发给路由器C且识别之后就会将数据转发到其局域网内指定的主机2上。这样就实现了网络中两个主机之间的定向传输。

在整个过程中,主机1可以通过网络号识别是否位于同一个网段,如果不位于就往上传,在上传的过程中,我们淘汰了局域网A和B所在的全部主机。在实际的过程中,还可以往上再进行上传,越往上传,那么淘汰的主机数就越多,也就变向的达到了快速定位寻址的效果。因此我们可以将网络看成一个多叉树,主机就是叶子结点,路由器就是非叶子节点,两个不同网段主机间进行通信,也就是两个叶子结点之间进行路由的过程。


  • 说明:A类,B类,C类地址统称为单播地址,即一台主机到另一台主机。

广播地址用于什么?

  1. 广播地址分为本地广播和直接广播,可以向指定网络段的所有主机发送数据,通常为本地网络。
  2. 本地广播,只能用于将数据包发放到本地网络的所有主机。
  3. 直接广播,可以用于将数据包发放到不同网络的主机,但通常是被关闭的,smurf和fraggle攻击就是利用了这一点进行实施攻击的。

组播地址用于什么?

  • 组播地址用于向网络中的指定的组内的所有主机。

从 224.0.0.0 ~ 239.255.255.255 都是组播的可用范围,其划分为以下三类:

  1. 224.0.0.0 ~ 224.0.0.255 为预留的组播地址,只能在局域网中,路由器是不会进行转发的。
  2. 224.0.1.0 ~ 238.255.255.255 为用户可用的组播地址,可以用于 Internet 上
  3. 239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效

简单总结一下:

单播 广播 组播
一个主机对另一个主机发送数据包 一个主机向指定网络下的所有主机发送数据包 一台主机向指定网络下的特定的一些主机发送数据包
一对 一对所有 一对特定的一些

3.CIDR

  • CIDR,全称Classless Inter-Domain Routing,无类别域间路由,用来解决ip地址分配不均的问题。

为啥会ip地址分配不均呢?

  • 首先,ip地址被严格分为三类,A类地址有160多万,B类地址有6万多台,C类地址有254台。
  • 假设,公司A有3万台主机需要接入网络,那么C类地址是不够的,B类地址又太多了。
  • 那么,这样只能分配B类地址,因此就会造成大量的浪费,从而导致IP地址分配不均。

如何解决?

  • CIDR具体使用子网掩码来进行实现。
网络类别 默认子网掩码
A 255.0.0.0
B 255.255.0.0
C 255.255.255.0

当我们能够需要一个3万多台的网络的电脑时,可以对一个B类的子网掩码设置为 255.255.128.0,即给B类地址多分配一个网络号,那么主机号就变成了15位,最多能表示32,768 台主机,因此可以解决IP地址分配不均的问题,下面我们使用图解进行举例演示。

如图,也就意味着子网掩码的作用就是划分网络号与主机号 。在实际过程中为了表示方便,将ip地址与子网掩码一起用129.255.1.1/17的形式进行表示,「 / 」 前面表示ip地址,后面表示划分的网络号的位数,即17位网络号。

  • 注意:子网掩码只能分成两段,即前面一段连续的1和后面一段连续的0。不能出现断断续续的0和1。

4.特殊的ip地址

  • 127.0.0.1:本地回环地址,用于测试和本地通信。
  • 0.0.0.0:非特定地址,用于表示任意地址或者默认地址。
  • 255.255.255.255:受限广播地址,用于向本地网络中的所有设备广播消息。
  • 224.0.0.0~239.255.255.255: 组播地址,用于向特定的一些设备广播信息。
  • 10.x.x.x,192.168.x.x,172.16.x.x ~ 172.31.x.x :私有地址只能在局域网内进行使用。

二、IP协议

1. 协议字段

  • IPV4

报头与有效载荷如何进行分离?

  • 首先,我们先截取报文的前4位版本号,判断ip报文的类型,如果是4,那么就是ipv4的地址,截取前20字节;如果不是4,则根据其协议的规定,定长截取指定的字节数,进行判断。下面以ipv4的协议字段进行分析。
  • 其次,从定长的字节数中,再截取出4位首部长度,计算出实际的报头的大小,理论范围为 [0,15],实际上要乘4,因此表示范围为 [0,60],又因为最小是20,所以表示的最终范围为 [20,60]。如果大于20字节,说明还有选项部分,继续将其截取即可。
  • 最终,截取完毕报头之后,我们成功将报文中报头与有效载荷进行了分离。

说明:

  1. 在分离之前,我们还需要检测报文是否完整,可通过16位首部检验和,进行相应的算法进行检验,具体算法,与前文讲述UDP的检验和大同小异,详见理解UDP,成为TCP。
  2. 有效载荷的大小,即字节数,可以通过16位总长度 减去 4位首部长度准确得到。

有效载荷如何向上进行分用?

8位协议的字段中,如果是UDP协议的报文,那么8位协议就为17,如果是TCP协议的报文,那么8位协议就为6,通过对协议编号,可以将有效载荷准确的向上进行分用。

协议号拓展:

  • ICMP(Internet Control Message Protocol)协议号为 1,用于在 IP 网络上发送控制消息和错误报告,用于网络诊断和错误通知。
  • IGMP(Internet Group Management Protocol)协议号为2,用于在多播网络中管理主机成员关系的协议。
  • 8位生存时间(TTL, Time To Live):指的是经过路由器转发的最大跳数,每次经过路由器转发这个跳数就会减1,直到0就将其丢弃,可以有效防止数据包在路由中成环路。

如何理解生存时间与环路?

  • 首先,路由器简单来理解就是一台配备有多张网卡的一台主机,且通常工作在网络层帮助数据包在不同的网段之间形成转发。
  • 其次,每当路由器转发一次数据到下一个网段时,我们将之称为 "一跳",即跳出当前局域网,前往下一个网段。
  • 然后,由于每当路由器收到数据要进行转发,会检测ip报文中TTL字段是否为0,如果为0就直接丢弃,不为0,减一进行转发。
  • 最后,如果不这样设置的话,由于网络中的结构非常复杂,数据包在传递的过程中可能就会出现环路,进而导致数据报循环路由的问题。

如图:

这样就会有两个问题:

  1. 数据包环路在进行传递的过程中,其实在网络中就已经算是垃圾数据,因为始终到不了目的主机,可以被直接丢弃了。
  2. 由于路由器还要不断的接收网络中的新数据,可能会导致环状路由的数据越来越多,进而导致网络拥塞,即变卡现象的发生。

  • 服务类型,前提是只有网络设备支持且能识别时,设置才有意义,否则是没有意义的。
  1. 首先,从后往前数。第一位必须设置为0,第六,七,八,都被弃用,剩余的位,可以设置,但有且只能设置1位,不可能同时保证。
  2. 其次,第二位设置表示最小费用,与跳数有关。
  3. 接着,第三位设置表示最高可靠,可减少丢包。
  4. 然后,第四位设置最大吞吐量,即增大数据的转发量。
  5. 最后,第五位设置最小延迟,即最快转发。

2.分片与重组

为什么要进行分片?

  • 首先,网卡为了保证发送数据的高效和准确,规定了一次最大能够发送数据包的大小,就叫做MTU,一般设置为1500。

查看MTU的命令:

bash 复制代码
#Windows
netsh interface ipv4 show subinterfaces

#Linux 
ifconfig

说明:Loopback(Windows) / lo(Linux) ,为本地环回地址,不会将数据发送到网络,因此通常MTU设置的很大。

  • 那么,网络层也就无法一次传比1500字节还大的报文,这也就表明如果网络层的报文大于1500,那么就要进行分片,即将一整个大的ip报文拆分成多个小的ip报文进行传递给下层进行发送。
  • 因此,当接收方收到这多个小的ip报文时,无法传递给上层,因此还要进行组装成原来的一整个大的ip报文,即重组。

注意:

  1. 在中间的路由转发的过程中,并不进行ip报文的重组,只在目的主机进行重组。
  2. 在目的主机网络层组装ip报文时,如果组装失败了,直接将一整个ip报文直接丢弃,并不进行重发,因此网络层不保证可靠。
  3. 如果将报文丢弃之后,如果上层是TCP,那么就会触发重传机制,进行报文的重传,进而保证可靠性。

相关的协议字段:

  • 标识,在计算机软件中,其实就是一个计数器,用来表示一整个完整的ip报文。
  • 标志,在ip报文进行分片的过程中,用于表示ip报文是否完整和分片的位置。目前只有最后两位有效,末位0表示最后一个分片,末位为1表示还有分片,次位1表示不允许分片,次位为0表示允许分片。
  • 13位片偏移,在原ip报文中相对于起始位置的偏移量,实际上×8表示实际的偏移量。

分片与组装的具体过程?

  1. 首先,网络层在发送报文时,识别到整个报文的字节大于1500,因此会将一个大的报文分割出几个小的报文,并标识相应的字段。
  2. 其次,接收方收到标识号为67的报文之后,就将其聚到一组,从而确保分片能够聚在一起。
  3. 然后,等收集分片完毕之后,我们可以根据原整个ip报文的偏移量进行排序,进而检测报文是否完整。
  4. 接着,如果检测到标志的次低位为1,那么不存在分片。接着可以通过偏移量为0,可以检测出开头的报文是否丢失;可以通过标志0,检测到结尾的报文是否丢失;可以通过偏移量和报文中的数据大小,检测出中间的报文是否丢失;确保报文完整。
  5. 最后,如果报文完整,那么进行组装之后,将形成的ip报文向上交付,如果报文不完整,那么直接丢弃即可。

细节:

  • 8位片偏移要求实际的原报文的偏移量必须是8的倍数,也预示着整个报文进行分割时也是按照8的倍数进行分割的。
  • 我们往下还有链路层,因此实际进行分割时还要为下层的报头预留一部分的空间,即分割之后的ip报文比MTU要小。

分片会产生哪些影响?

  1. 对于ip协议来说,分片也就是在ip报文过大时,将数据在发送方进行拆分,在接收方再组装的过程,由于一旦组装失败就要全部丢弃,所以会导致数据效率的降低,以及数据的不可靠性。
  2. 对于udp协议来说,只负责将用户传来的数据往下进行传输,不管报文的大小,况且udp不保证且无法保证可靠性,所以一旦传到网络层中的ip协议进行封装时,也就加大了分片的概率,也就坐实了udp不可靠的名声。
  3. 对于tcp协议来说,不仅负责数据的传输,还要保证可靠性,那么就要想办法减轻ip报文的分片,因此在协商通信,也就是在"三次握手"之间会协商好一个MSS(Max Segment Size),这个长度是ip报文不会进行分片的最大长度,因为双方通信设备的不同,可能会导致MSS的不同,因此要协商各自的MSS取一个较小值,进而可以达到避免分片的效果。

3.路由

  • 路由,其实就是"路径选择",即在网络中通过网络设备将信息正确的发送到目的地的方式

路由获取方式上分:

  1. 直连路由: 路由器直连网段的路由。
  2. 静态路由:人工配置的路由。
  3. 动态路由:路由器之间通过交互信息自动获取的路由。
  • 查看
bash 复制代码
# Windows:
route PRINT

# Linux:
route

这里以Windows路由表进行举例:

接口一栏,我们需要借助网卡设备进行理解:

查看网卡配置:

bash 复制代码
#Windows
ipconfig
  • 首先,这里的网卡的ip地址就是,路由表里的接口,在进行下面的分析时,我们只分析与WLAN接口相关的内容。
  • 第一部分,当得到网络目标不在剩余的部分当中,我们就会将数据通过接口,发送到网关,也就是路由器上进行转发。
  • 第二部分,在链路上意味着在局域网内,可以直接进行访问。三个网络目标分别为网络号,本机ip,本地广播地址。
  • 第三部分,网络目标224.0.0.0,为组播地址,即向特定的一些主机发送数据包。
  • 第四部分,广播地址,当没有获取到本地广播时,使用该广播代替本地广播进行发送数据。

  • 常见的路由算法,作为了解即可。
  • 最短路径算法:最短路径算法用于确定网络中两个节点之间的最短路径。著名的最短路径算法包括Dijkstra算法和Bellman-Ford算法。

  • 路径向量路由算法:路径向量路由算法类似于距离矢量路由算法,但是每个路由器不仅发送到达目的地的距离信息,还发送到达目的地的路径信息。BGP是一种路径向量路由算法,用于在互联网中实现路由。

  • 距离矢量路由算法:距离矢量路由算法基于每个路由器维护到其他所有路由器的距离矢量,通过交换距离矢量信息来更新路由表。经典的距离矢量路由算法有RIP和IGRP。

三、NAT技术

1.公有和私有

在之前,我们提及过ipv4地址只有42亿多,当今的互联网世界远不止这么多的互联网设备,那么我们要如何让这么多设备接入互联网呢?基本的思路是将一批的ip地址进行复用,一批的ip地址进行公开,即私有ip和公有(网)ip。

图解:

简单理解就是公有ip就是一个唯一标识,私有ip是一个局部的唯一标识,全局的可重复的标识,比如我在XX理工大学上大学,这个某地我们就可理解为成唯一标识,在这个地方肯定只有一家理工大学,但是在别的地方就会有北京理工大学,武汉理工大学等等,那么理工大学就是一个全局的可重复的标识。

  • 私有地址

范围:

我们要了解到这样一个常识,即没有连网之前,我们的设备是没有ip地址的,而连了网之后,我们的设备才被分配了ip地址,这个ip地址通常为私有ip地址。

就拿我电脑上的ip地址进行举例:

我们看到的一般都是私有ip地址,可根据上图的范围图进行对比查看,且我们在网络中进行传递时,因为在全局范围内是重复的,所以只能在局域网内部进行使用。

就拿我租的云服务器的ip地址进行举例:

从图中我们可以看到,我们服务器内部使用的是私有ip,但是我们访问时使用的是公网ip进行的访问,这就是因为公网ip在全局唯一,是一种全局唯一的标识。


那我们就疑惑了,那么使用公网的ip地址是如何能够访问到局域网目的主机的呢?这中间蕴含着怎样的奥秘呢?

2.NAT

  • NAT,即 Network Address Translation,网络地址转换。NAT是一种私有地址转公有地址的一种网络转换技术。

首先,路由器之间不断在进行转发的过程中,会有一种叫NAT路由器的,负责将我们所在的私有ip转化为公有ip,具体如下图:

  • 首先这里主机A向公网中的服务器发送一条数据包,经过NAT路由器之后,源私有ip地址转换为了公有ip地址;
  • 然后继续经过路由转发到云服务提供商的手中,会再一次经过NAT路由器的,不过这一次是将报文中的服务器的公网ip转换为私有ip地址;
  • 最终将数据送到了其公司内部的服务器上进行处理。处理完之后,会再一次经过类似的流程,最终将响应返回。上图实际上省略了服务商内部的地址转换的工作,这里简要进行补充。

那么就又会产生一个问题,如果主机A,主机B,主机C 同时 向服务器发送消息,那么就会出现虽然服务器能够收到消息,但不知道是谁发来的,在返回请求时就会出现NAT路由器实际上无法进行从「公有ip」向「私有ip」的转换,因此 NAT技术只能实现单主机在网络内通信。也就引出了下面的NAPT技术,来解决这一问题。

3.NAPT

  • NAPT,即 Network Address Port Translation,网络地址端口转换。主要用于解决NAT技术无法实现多主机并发在网络上访问的情况。
  • 首先相较于NAT,其多了一个端口号进而来实现一台设备的并发访问,端口号一般来源于TCP和UDP协议;
  • 因此NAT路由器中是具备识别与修改传输层报文的协议字段的能力,那么当多台设备向网络中发送消息时,NAT路由器就可以提取出报文中的ip与端口号进行映射;
  • 虽然是同一个ip地址,但是端口号不同,这就可以在返回应答时,根据端口号再进行映射,从而得出指定主机的ip地址与端口号,从而实现多台网络设备并发的在网络中发送数据。
  • 但是由于端口号的范围在0~65535之间,因此NAT路由器一次最多只能允许这么多台机器同时在网络中进行发送数据。
  • 因此如果实际的主机数超过NAT路由器能够承受的范围,那么会运营商进行子网划分,即将多余的机器分配到其它NAT路由器上的。

四、ARP协议

1.MAC地址

  • 概念:MAC,英文全称Media Access Control address,即媒体访问控制地址,通常被称为物理地址,局域网地址。
  • 表示:用48位二进制数,一般每8位转换成两位16进制数,中间使用 - 号进行隔开。
  • 性质:不随地理位置的变化而变化,且一般网络设备出厂时就确定了。一般来说一个网卡一个MAC地址。
  • 协议层:链路层。
  • 特殊地址:当MAC地址全为1时,被用于广播给局域网内所有的设备。

对比ip地址:最重要的区别在于ip地址是根据地理位置的变化而变化的;MAC地址是随着网络硬件的,只要网络硬件不变,设备的MAC地址是不会发生变化的。

在链路层,我们一般将数据格式称为数据帧,其中MAC帧主要有三种表示形式:

  • 这里的所有数字都是字节为单位的,这里的CRC校验和的作用相同,用于检测数据帧是否完整。PAD是一段填充字段。
  • 当数据在进行传输的过程中,需要知道下一次传输实际要去哪台「物理设备」,因此需要ARP/RARP协议帮我们获取下一次物理设备的MAC地址。
  • 当知道了下一次传输的物理设备的MAC地址之后,我们再将ip数据报封装成MAC帧传给指定的物理设备即可。

源ip和目的ip就像是当下所在的起点和你要去往的最终目标一样,指定了源头和要实现的目标,给我们了一个明确的方向,而源mac和目的mac就像我们实际的行动一样,需要我们脚踏实地,两者结合最终才能实现我们的目标,即到达目的主机。

2.ARP

  • ARP的全称是地址解析协议(Address Resolution Protocol),使用目的主机的ip进而获取其MAC地址。
  • 首先当数据到达目的主机局域网时,需要经过路由器进行转发,但是其可能并不知道目的主机的MAC地址;
  • 那么我们就无法运输到实际的网络设备上,此时就需要ARP发送报文广播给所有的主机;
  • 让目的主机给我们返回其设备上的MAC地址,路由器就能将报文用目的主机的MAC地址封装,最终将数据包运往到目的主机当中。

协议字段

ARP粗略过程

  1. 路由器向局域网内所有主机发送ARP请求。

  2. 目的主机识别ARP报文,然后向路由器发送ARP应答,其中报文中携带目的主机的MAC地址。

  • 首先,路由器发送ARP请求时,由于不知道要传给哪台主机,因此给所有主机发送报文,因此目的MAC,全为1表示广播地址。
  • 其次,由于是请求,所以ARP操作字段中添上1表示请求,报文中携带关键信息「目的ip地址」,用于识别目的主机。
  • 然后,让所有的主机收到ARP请求后会进行识别,关键识别目的ip地址,如果不是就直接丢弃,如果是就返回应答报文。
  • 接着,目的主机识别请求,返回ARP应答,其中携带关键信息「目的主机的MAC地址」,定向返回给路由器。
  • 最后,路由器识别之后,会将ip报文用目的主机的MAC地址再进行封装,然后将数据定向的传送给目的主机。

补充:

  1. 路由器只有在其表上查不到目的主机的MAC地址时,才会向所有的主机发送ARP请求报文,获取目的主机MAC地址。
  2. 目的主机的MAC地址在路由器上会被临时缓存起来,当MAC地址失效时,也会重新发送ARP请求。
  3. 当主机收到大量的ARP请求时,会以最新的MAC为准,这也就是ARP欺骗的原理。

五、DHCP协议

  • 动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。

当设备接入网络时,会自动分配ip地址,而在连入到网络之前,设备是没有ip地址的,也就是说ip地址并不属于我们,我们只是临时的进行使用而已,那么DHCP协议就可以帮助我们自动的完成申请ip这一过程,而省去了繁琐的步骤。

查看DHCP信息

DHCP协议一般都是在DHCP服务器下进行的,我们可以在windows下查看到内网的DHCP服务器的ip地址:

bash 复制代码
ip /all

基本信息

  • 报文格式:

    UDP报头中,DHCP服务器的端口号一般设置为67,客户端一般设置为68

  • 协议字段:

  • 跳数:这里指定对应的路由器,我们称之为中继路由器,负责将报文转发到DHCP服务器上,其转发的次数,即为这里的跳数。

  • 秒数:一般来说为客户端申请或者更新ip地址的时间,一般用时间戳的形式表示。

  • 标识:一般为2字节,即16比特,最高位为1时为广播,最高位为0时为单播。

  • 事务标识:DHCP一般是由客户端发起的,所以一般由客户端生成的随机数,用于标识唯一的应答和请求报文。

  • 引导文件名:这里指定是服务器指导客户端在指定文件下配置ip地址等相关信息。

选项中的字段格式:

说明:选项字段中有一个END字段,用于表示选项位置的结束,因此我们是可以截取出一个完整的DHCP报文的。

选项中的基本信息:

  • 报文的类型:一般有DHCP-DISCOVER报文,即客户端请求报文;DHCP-OFFER报文,服务器响应包;DHCP-REQUEST报文,客户端选择包;DHCP-ACK报文 ,服务器确认包等类型。
  • 其次的是服务器返回的一些关于ip的属性,都有ip地址,子网掩码,租约,网关,DNS服务器的ip等信息。

大致申请的流程。

  • 首先当客户端申请ip地址时,我们是没有ip地址的,那么此时只能用0.0.0.0代替我们的主机地址,其次我们也不知道DHCP的ip地址,因此我们只能用广播地址(全1),在局域网内进行广播,报文类型我们设置为DHCP-OFFER用于表示发送的第一个请求,通过绑定68号端口上的客户端进程进行发送。

  • 当报文经过对应的中继路由器不断进行转发到达相应的DHCP服务器之后,其上67号端口上进程识别对应的报文之后,发送DHCP-OFFER 类型的应答报文,携带配置ip相关信息,比如ip地址,子网掩码,DNS主机名,租约等信息。由于对应主机目前还没有ip地址,于是发送时以广播的形式进行发送给对应局域网的路由器,不过我们转发时可是知道其MAC地址的,因此目的主机最终还是能收到对应的应答的。

  • 当客户端确认收到应答之后, 会对DHCP服务器,发送DHCP-REQUEST类型的报文,用于表示接收DHCP服务器发来的配置信息,这时由于ip地址还是无效的,不能直接用,还是跟最初一样用相应的ip地址作为代替进行发送报文。

  • 当服务器再次收到请求,识别之后会发送相应的 DHCP-ACK报文,此时客户端再次收到报文时,此后ip地址才算生效。

如图:

六、DNS协议

域名

比如我们所熟知的www.baidu.com,其实就是百度的域名。那么域名只是为了方便我们看到进行记忆,其中还蕴含着目标服务器的ip地址,如何解析域名进而获取ip地址,就是DNS协议的工作了。

分类:

  • 通用顶级域名:常见的有.com(商业)、.org(非盈利组织)、.net(网络服务提供商)、.edu(教育机构)和 .gov(政府机构)等。这些域名可以被任何人注册,并且通常被用于与其领域相关的网站。
  • 国家级域名:常见的有.cn(中国)、.us(美国)、.uk(英国)、.fr代表(法国)等,能在指定境内进行访问。

分析:www.baidu.com.cn

现在我们可以从.com的角度,证明百度其实是一家商业公司。哈哈,这感觉像是一个冷笑话。


Windows下查看与清除DNS缓存:

  • ipconfig /displaydns ------ 查看dns缓存。
  • ipconfig/flushdns ------ 清除dns缓存。

大致流程

当我们解析域名时,其实是交给对应的DNS服务器进行处理的,下面我们体验一波DNS解析baidu.com的大致过程:

  • 前提:浏览器中无相应的域名的DNS缓存,且主机上也没有相应的dns缓存,即没有域名对应的ip地址。

  • 第一步,客户端发送请求到本地的DNS服务器上,本地DNS服务器就会查看是否有对应的域名的ip地址,如果有直接返回相应ip的地址,如果没有,就向根dns服务器上发送badu.com的请求。

  • 第二步,根DNS服务器也无法识别baidu.com,但是知道相关顶级域名.com的DNS服务器,于是就返回它的地址让其访问它,看是否有baidu.com的ip地址。

  • 第三步,本地DNS服务器继续向顶级域名.com的服务器发送请求,看其是否有baidu.com的ip地址,这个服务器上也没有对应ip地址,但是知道baidu.com的权威服务器上可能会有,于是又将其返回了。

  • 第四步,本地DNS服务器继续向这个权威服务器发送请求,最终其返回baidu.com的ip地址,然后返回给对应的主机。

简单画张图:

  • 总结:DNS服务器如果存在对应域名就会返回对应域名的ip地址,如果不存在对应的域名就 "只指路,不带路",可把本地DNS服务器累惨了 。

尾序

我是舜华,期待与你的下一次相遇!

相关推荐
Lary_Rock2 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零3 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
热爱跑步的恒川3 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
云飞云共享云桌面4 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮5 小时前
Linux 使用中的问题
linux·运维
音徽编程6 小时前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust
dsywws6 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零7 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
23zhgjx-NanKon7 小时前
华为eNSP:QinQ
网络·安全·华为