网络基础

一、互联网

1.1 什么是互联⽹?

互联⽹过去⼜称为“信息⾼速公路”,是⽤来⾼速传输数据的。互联网的本质就是一系列的网络协议,如果你有一台电脑但家里没网,可以运行一些单机游戏,是孤立的,后来家里有了路由器,不过还是没有联网,楼上楼下的两台电脑之间可以一起玩局域网游戏了,后来联网了,可以玩网络游戏了。

  • 这一切得益于计算机之间可以识别同一系列协议。就像全世界都在使用英语一样,计算机之间拥有同一套标准,被称为互联网协议。

1.2 为何要互联⽹?

为了打破地域限制,进⾏⾼速的数据传输

1.3 互联⽹的构成

1、互联网由物理基建和通信协议共同构成。

  • 电话 = 电话⽹络 + 规范(英语)
  • 寄快递 = 快递⽹络 + 规范 (快递的填写标准)
  • 互联⽹ = 信息⾼速公路(⼀些列连在⼀起的⽹络设备)+ 规范(⽹络协议)

2、规范/协议存在的意义

所有⽹络的设备都需要认识⽹络通信协议,只有这样,数据包裹在传输过程中才能被沿途各级设备理解,从⽽确保成功发给下⼀站;⽹络通信协议就相当于计算机界的通用语言,要求所有设备都认识。

互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

二、OSI七层协议

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层。我们简单了解。

image-20260623194204794

每层常见的物理设备:

image-20260623194223305

OSI七层协议数据传输(封/解包)

img

三、TCP/IP五层模型

在七层模型的基础上,将应用层、表示层、会话层这最上面的三层合并为应用层,得到五层模型。我们将从tcp/ip五层协议的角度来阐述每层的由来和功能。搞清楚了每一层的主要协议,就能理解整个互联网通信的原理。

下层靠近硬件,上层靠近用户。用户能感知到的只是最上面一层的应用层,但自上而下每一层都依赖与下一层。所以我们从最下面一层切入比较好理解。

  • 应用层是人类真实感知交互的各种功能
  • 物理层是硬件设备真实传递的电信号
  • 中间的几层均为抽象,通过不断抽象,将电信号组织为人类使用的各种软件应用。

file

3.1 物理层

孤立的计算机需要互相连通在一起,即组网。全世界共同建造了一张互相连通的通信大网internet,这就是物理层。物理层表现为各种物理设备互联,互相之间可以发送高低电平,高电压表示1,低电压表示0。

特点:

  • 传输:通过光缆、电缆、网线等传输电信号,单位为bit。
  • 意义:单纯的电信号没有任何意义,多个电信号组合在一起构成意义(电报机原理)

3.2 数据链路层

为了使电信号具有含义,设计规定多少位电信号为一组,每一组代表什么含义,从而诞生了数据链路层,这一层级定义了电信号的分组方式,完成这一功能的设备为交换机。

(1)以太网协议

早期的时候各个公司都设计了自己的分组方式,后来形成了统一的标准,即以太网协议 ethernet。

ethernet 协议规定:

  1. ⼀组电信号称之为一个数据帧
  2. 每⼀个数据帧由两部分构成:报头head和数据data

​ ​

head:固定长度为 18 个字节,包含:

  • 发送者的地址:6字节
  • 接受者的地址:6字节
  • 数据类型信息:6字节

data:默认长度也是最长的长度 1500 字节

一个帧的长度等于head+data,在64-1518 字节这个区间。数据如果大于一帧,就会分片发送。

(2)MAC地址

head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。
​

mac地址:⽹卡上的地址,每⼀个mac地址都是全世界独⼀⽆⼆的地址。

每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

(3)广播

计算机通信基本靠吼:⼴播
在局域⽹内,主机之间通信基于以太⽹协议,采用广播的方式。(实际上就是⽤的mac地址找到对⽅)
强调:

  • mac地址是在局域⽹内部⽤的地址,以太网包只能在局域⽹内部发送
  • 一个局域网就是一个广播域,以太网的广播包只能在一个广播域内发送。
  • 主机之间互相获取mac地址通过arp协议

3.3 网络层

ip相关地址计算工具:https://ipjisuanqi.com/

网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难,所以需要设定一种新的转发关系,来标识计算机在全球的唯一性。

于是有了网络层。网络层设计了一套新的地址用来区分广播域,这套地址叫做网络地址,分为两段,一段标识设备所属的广播域(子网),另一段标识其在所属广播域下的唯一性,这样就能在全世界范围内实现通信。

  • 数据包发送到当前局域网时,源和目标机器都在一个广播域下,采用广播的方式
  • 数据包发送到别的局域网时,源和目标机器不在一个广播域下,采用路由的方式。

完成这一功能的设备为路由器。

(1)ip协议

ip协议是用于规定网络地址的协议,它定义了ip地址,现在广泛采用ip协议的v4版本(ipv4),这个版本规定ip地址由32位2进制表示,或者12位十进制表示。

二进制表示--> 十进制表示
00000000.00000000.00000000.00000000 ------->0.0.0.0
11111111.11111111.11111111.11111111. -------->255.255.255.255

⼀个ip地址要表达两种信息:

  • 网络部分:标识出全世界范围内独⼀⽆⼆的⼀个局域⽹/广播域
  • 主机部分:标识局域网内的某台主机,ip地址与主机mac地址一一对应

为了能让⼀个ip地址同时表示出上⾯两层含义,在ip地址上⼜增加了⼦⽹掩码用于标识网络部分。所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

示例:24位子网掩码的ip地址

IP地址:11000000.10101000.01000111.00000111 ----->192.168.71.7
子网掩码:11111111.11111111.11111111.00000000 ----->255.255.255.0
网络地址:10000000.10101000.01000111.00000000 ----->192.168.71.0

由此可以标识:192.168.71.7/24 表示 在192.168.71.0这个网络下的第7个主机。

小提示:子网掩码是可变长度,通常为24位。

(2)数据包

IP协议下数据以包的形式传输,ip数据包也分为head和data部分,无须为ip包定义单独的栏位,而是直接放入以太网包的data部分。

  • head:包含源ip地址、目标ip地址,长度为20到60字节
  • data:包含数据部分,最⻓65515个字节

而以太网数据帧的“data”部分最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

即:传输一个数据包=传输多个数据帧=传输非常多的电信号。

image-20260624075026003

(3)arp协议

上层包不管怎么封装,计算机通信最终还是得靠广播的方式找到具体的主机,即所有的数据包最后都需要封装以太网head。

以太网协议通信是基于mac地址实现的,当我们事先知道双方ip地址,一个数据包开始传输,发送端会带上自己的mac地址,然后通过arp协议获取目标机器的mac地址。

即: arp协议通过广播发送数据包,完成ip地址解析成mac地址的过程。

1、局域网内传输

同局域⽹内发送端:192.168.71.7/24
同局域⽹内接受端:192.168.71.8/24

1.通信之前,arp协议开始工作,判断双方是否在一个局域网内。
发送端网络地址:192.168.71.0
接收端网络地址:192.168.71.0

2、判断到双方在一个局域网内,发送端发出广播获取接收方mac地址
发送端:通过arp协议发送广播包,提供已知信息:
- 发送端mac
- 接收端mac:FF:FF:FF:FF:FF:FF(广播)
- 发送端ip
- 接收端ip
接收端:局域网内所有主机都会收到广播包,但只有接收端的ip能匹配上,所以只有接收端会单播回复,返回自己的mac地址。

3、只有对应的两台机器会建立通信通道。

2、跨局域网传输

跨局域网1号机器-发送端:192.168.71.7/24
跨局域网2号机器-接收端:172.16.202.8/24

1、通信之前,arp协议开始⼯作,判断双方是否在一个局域网内。
发送端网络地址:192.168.71.0
发送端网关:192.168.71.1
接收端网络地址:172.16.202.0
结论:双方不在一个局域网内,必须将数据包交给网关实现跨局域⽹通信

2、arp解析网关的mac地址
发送端:发起arp广播,设置接收ip为路由器的网关ip,询问网关mac
- 目标mac填写为:FF:FF:FF:FF:FF:FF(广播)
网关:收到广播,单播回复自己的mac
发送端:拿到网关mac,缓存到arp表

3、发送端将包发给网关
发送端:重新封装数据包,先把数据包发给路由器。
- 源地址:1号机器,1号mac
- 目标地址:2号机器,1号网关mac (ip不变、mac变)

1号路由器:拆开二层帧头查看三层的ip头,然后查询路由表找到目标网段所在的路由器地址(TTL减1),或者通过arp协议获取目标路由器的mac地址,最后路由器重新封装数据包。
- 源地址:1号机器,1号网关mac
- 目标地址:2号机器,2号网关mac (ip不变、mac变)

2号路由器:拆开二层帧头查看三层的ip头,发现目标ip为自己的直连接口,arp询问目标机器的mac,然后重新封装数据包。
- 源地址:1号机器,2号网关mac
- 目标地址:2号机器,2号机器mac (ip不变、mac变)

4、接收端回包
2号主机回程:过程与请求时一样,先丢给2号网关(此时双方有mac地址缓存,直接发送)
- 源地址:2号机器,2号mac
- 目标地址:1号机器,2号网关mac (ip不变、mac变)

2号路由器回程
- 源地址:2号机器,2号网关mac
- 目标地址:1号机器,1号网关mac (ip不变、mac变)

1号路由器回程
- 源地址:2号机器,1号网关mac
- 目标地址:1号机器,1号mac (ip不变、mac变)

同网段通信用 ARP 找对方 MAC;跨网段通信用 ARP 找网关 MAC。IP 地址贯穿始终不变,MAC 地址每经过一个路由节点就会改变。已经通信过的可以直接从arp表中匹配。

每台路由器只关心"下一跳是不是我直连",是直连就用 ARP 要到 MAC 扔过去;至于"下一跳往哪走"这条知识,来自静态路由配置,或者 OSPF/BGP 这类动态路由协议互相告诉对方。

(4)路由

路由器可以静态配置路由和动态路由,路由器上必须有去程路由和回程路由。一旦路由表中无法查询到路由条目,路由器会直接丢包。并返回:

Destination Network Unreachable(ICMP type 3)

如果只有去程路由但没有回程路由,此时目标机器能收到数据包,但目标端的路由器会丢弃应答包。

如果发送端和目标端设备中间经过多层路由器,数据包会一层一层传输,每经过一个路由器,ttl减少1。

注意:如果有多跳,每一跳中必须有明确的路由指向,明确告诉要找哪个网段从哪一台路由器走。

总结:通信的前提⼀定要拿到对⽅的ip地址

mac地址可以⼀个局域⽹独⼀⽆⼆的计算机

ip地址可以⽤来标识独⼀⽆⼆的局域⽹在哪⾥

ip地址+mac地址:就定位到全世界范围内独⼀⽆⼆的计算机,有arp协议的加持:拿到ip对使⽤者来说就相当于拿到ip+mac

3.4 传输层

网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,但是大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,就成为了新问题,解决的方法就是端口,端口即应用程序与网卡关联的编号。

传输层设定了端口这个工具,实现了端口到端口之间的通信。

端口范围明确为:0-65535,并将0-1023分配给系统,1024以上端口分配给应用。

ip+port基于网络通信,在全世界范围内实现应用程序之间的数据传输。传输层通信的本体是应用程序,所以建立了tcp/udp这样的4层协议来保证应用程序之间通信的模式,而凡是基于tcp协议或者udp协议工作的应用程序,都会拥有一个独一无二的端口号(在一个操作系统里端口的范围0-65535)

(1)tcp协议

TCP协议设定了一种可靠的传输方式,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

应用层数据(100KB 的 http相应)--> 切成N块
传输层报文段:段1(tcp头+数据块1)段2(tcp头+数据块2)
网络层数据包:ip数据包1(段1)ip数据包2(段2)--> 切片
以太网帧:帧1,帧2
物理电信号:高低电平1-0

TCP数据包由head 和 data组成,直接放入ip包的data部分。

image-20260624101654362

a、tcp报文段

tcp报文装在ip包的数据部分,负责端到端的可靠传输。ip协议负责送到机器,而tcp协议负责送到机器中具体的某个进程,并且能保证不丢不乱。

image-20260624102457998

  • 固定首部 20 字节,选项最多再 +40 字节,所以 TCP 首部范围 20~60 字节。
  • 端口:也就是进程在网卡上的地址
  • 序号:seq,用于去重和组装数据流。该tcp数据包低一个字节在整个数据流的编号,第一次随机生成如seq=1000,这次发送了500字节,下一个tcp数据包就是seq=1500。
  • 确认号:ack,期望对方发过来的seq序号
    • a:seq=1000,携带500字节
    • b:ack=1500,表示已经收到了1000-1400的字节,下次是从1500开始。
  • 保留位:留着备用,常用来存时间戳之类
  • 6个标志位:高频考点。
    • SYN:建立连接,"我要和你同步序号"
    • ACK:确认号有效
    • FIN:我这边数据发完了,要断连接
    • RST:强制重置连接(异常断开)
    • PSH:催促接收方赶紧把数据交给应用层
    • URG:紧急指针有效(基本不用了)

三次握手:SYN → SYN+ACK → ACK

四次挥手:FIN → ACK → FIN → ACK

  • 窗口大小:告诉发送方发送速率,别超过了,用于流量控制。

  • 校验和:检验tcp首部和数据,出错就丢包,靠重传保可靠。

各个字段解决的问题:

  • seq:表示序号,解决包乱序问题
  • ack:用于确认和重传,解决丢包问题
  • 窗口大小:滑动窗口,流量限制,别发太快撑爆对方
  • 算法:拥塞控制,慢启动等,解决网络拥塞。

注意:真正卡tcp段大小的实际不是ip数据包的总长度,也不是tcp窗口大小。而是MTU。

以太网mtu(以太网协议的data部分)最大1500字节,这是数据链路层的天花板。

  • 去除ip头部,去除tcp头部,剩下的才是tcp数据部分,也就是一个tcp段最多能装多少。
  • 所以一个数据段只要大于mtu,在ip层就一定会被分片。现代网络里tcp自己会在三次握手时协商好MSS(MAX segment size),传输tcp报文段时按照mss的大小分配,将一个很大的http数据分为多个段,从而避免在ip层被分片。ip层分片只要丢一片就会导致整个包重传。

发送时切分:

举个具体数:L1给L2发 1MB数据(比如一张图),链路 MTU 1500,MSS=1460。
TCP 不管"消息边界",它眼里应用数据 =一串连续字节流,从 seq=ISN+1开始编号。

应用数据: [字节 1 ~ 1048576]  (1MB)
切成 TCP 段(每段数据 1460B):
  段1: seq=1,     数据[1~1460]
  段2: seq=1461,  数据[1461~2920]
  段3: seq=2921,  数据[2921~4380]
  ...
  段N: seq=1047417, 数据[1047417~1048576]  (最后一段不够 1460)
一共 ≈ 1048576 / 1460 ≈ 719个 TCP 段。

每一段分别塞进 IP包 → 塞入以太网帧(最后719帧)
每个帧都会在数据链路层独立走路由,有独立的ack。

接收端重组

L2 收到的段可能是乱序的,先发的可能后到。
L2 TCP 栈将会做以下几件事
1、将报文段按 seq 号排序:1, 1461, 2921...
2、将报文段拼成连续的字节流,交给应用层
3、回 ACK:ack = 1048577(表示"1~1048576 我都收齐了,下次从 1048577 开始发")

如果某段丢了,比如段300没到
L2 一直回 ack=300 * 1460+1(重复 ACK)
L1 收到 3 个重复 ACK → 快速重传那段
或者等超时重传

所以"TCP 最大 65535 传大文件"的正确理解是IP 层单包天花板 65535,但实际受 MTU 限制,TCP 按 MSS(1460) 切成 N 段,每段独立编号(seq),接收端按 seq 拼回完整数据。 所谓的"大文件"对 TCP 来说就是一串带序号的字节,跟"多大"没关系。

b、tcp三次握手和四次挥手

image-20260624102232082

这张图展示了TCP协议的全生命周期。

一、建立连接:三次握手
1、客户端:syn seq=x,进入syn-sent状态(正在发同步信号)
2、服务端:syn seq=y ack=x+1,进入syn-rcvd状态(已收到同步信号)
3、客户端:ack=y+1 ,双方进入established,(连接已建立,可以传数据了)

二、传输数据
双方互相发送数据并确认
1、客户端发数据:seq=x+1, ack=y+1(发送的序号,期望接收的序号)
2、服务端收数据:ack=x+2(期望接收的序号)

三、断开连接:四次挥手
优雅关闭,其实更常见的是服务端主动断开,此处我们从客户端讲解
1、客户端:fin seq=x+2 ack=y+1, 进入fin_wait_1状态
2、服务端:ack=x+3, 服务端可能还有数据在传,只返回ack,进入close_wait状态,客户端收到ack=x+3,状态进入fin_wait_2
3、服务端:fin seq=y+1,告诉客户端我也关了,进入last_ack状态
4、客户端:ack=y+2,最终确认,客户端进入time_wait状态,等待一会儿彻底关闭。

几种状态梳理

  • syn-sent、syn-rcvd、established
  • fin_wait_1、close_wait、fin_wait_2、last_ack、time_wait

注意:

  • 在syb/fin过程中,ack的值总是= 对方的seq+1

  • 为什么要四次挥手:因为tcp连接是全双工的,可能一边还在传数据,所以连接需要分两次断开。

    • ack表示断开 客户端到服务端的连接
    • fin表示断开 服务端到客户端的连接
  • 在三次握手时,因为是新建连接,全双工通道不必分开建立,服务端的ack/syn可以合并,所以握手比挥手少一次。

(2)udp协议

UDP协议设定了一种高效传输的方式,”报头”部分一共只有8个字节,总长度不超过65,535字节,也正好放进一个IP数据包。不过udp单报一般不会超过mtu1500,

  • 超过mtu在ip层会被分片,丢一片整个报报废,tcp却可以重传。
  • 所以应用层一般自己控制udp单报<1500(加上头部),不然ip分片

image-20260624101803847

udp数据报跟tcp数据包都是直接塞入ip数据报中的。区别在与udp几乎不做任何可靠性的事情,只干两件事:端口复用,校验和。一切就是为了轻、快。

udp首部特点:没选项、没标志位、没序号、没窗口

机制 tcp udp
连接 三次握手 上来就发
序号/确认 seq/ack 无
重传 丢包重传 无
有序 seq 乱序就乱收
流量控制 滑动窗口 无
拥塞控制 慢启动 无,应用自己抗
首部 20-60 8(固定)

提示:DNS使用的就是udp协议

应用场景

1、dns
2、dhcp
3、实时音视频,不怕卡帧
4、在线游戏:高刷,丢一帧下一帧覆盖即可
5、ntp,snmp

不适合的场景

文件传输、邮件、http1.1、mysql

3.5 应用层

用户使用的应用程序都工作在应用层,互联网是开放的,允许大家开发各种各样的应用程序,数据也是多种多样,而应用层的功能,就是明确数据的组织形式。

tcp可以为程序之间传输数据,但它不关心传输的是电子邮件、网页数据还是ftp数据,只需要满足端到端找端口, 保证数据有序这些。

但是我们使用的数据是有明确业务场景的,于是在应用层设定了一些协议,约定传输内容的格式、含义、交互规则等。

  • 传输层协议:tcp/udp是管道
  • 应用层协议:是管道里的货物格式说明书

应用层是程序员直接接触的这一层,定义数据长什么样子,怎么交互等逻辑。

常见的应用层协议:

1、http家族:用于网页和api接口
http1.1
http2
http3

2、邮件协议
smtp:发邮件
pop3:收邮件
imap:收邮件

3、文件协议
ftp:传文件:21连接,20传数据
sftp:ssh里的ftp,22端口传输,加密,是现在的主流。
tftp:udp版简易文件传输,无认证(比如switch刷固件等)

4、域名解析协议
DNS:域名/ip解析,udp方式为主
mdns:局域网内解析(智能家居常用)

5、远程登陆类协议
ssh:加密远程登陆,当前取代了telnet
telnet:明文远程登陆,基本淘汰

6、应用软件
mysql:3306
redis:6379
这些应用软件也都有自己的应用层协议

7、其他
dhcp:局域网分配ip
ntp:时钟同步
snmp:网络设备监控
websocket:http握手的升级版本,双向长连接
mqtt:物联网

3.6 socket层

在互联网中,我们通过协议+ip+port标识网络中的一个应用程序。

socket是套接字,是在应用层和传输层之间的一个抽象层,它把tcp/ip层复杂的操作抽象为几个简单的接口供应用层调用,从而实现进程中的网络通信。

即socket层是对传输层及其以下的封装,封装完之后提供了一系列简单的功能给上次应用程序去调用,基于网络通信的应用程序基本上都是基于socket开发的,所以又称之为套接字程序。

image-20260624121945971

四、DNS

4.1 域名

网站千千万,ip地址本身没有语义,于是人们发明了域名,将一个有语义的域名跟一个ip地址绑定起来,方便大家记忆和使用。负责把域名解析为ip地址的协议叫做dns(domain name server)。

img

域名的设计是层层分级的,我们以域名:www.baidu.com (180.101.50.242)为例。

  • com:顶级域名
  • baidu:二级域名
  • www:三级域名

域名层层分级的原因

  • 分级以实现更多组合,且每一段都有特定的意义,方便记忆
  • 每一级的解析都可以独立管理,该级别的dns设备只需要记录该级别的解析条目。

强调:域名不能用来通信,最终还是使用ip来进行通信。

  • 由DNS设备解析域名
  • 由路由器、交换机等网络设备进行通信

4.2 dns域名服务器

根域名服务器

全球13台,根域名服务器不直接解析域名,负责管理顶级域名及其所属顶级域名服务器

顶级域名服务器

属于某个顶级域名,负责管理其下的二级域名

主/权限/授权域名服务器(权威域名服务器)

实打实配置来域名解析记录,数据具有权威性。在域名注册之初就绑定好了权威域名服务器;
需要注意的是:其只能解析已经绑定过的域名。

本地域名服务器(缓存域名服务器)

不负责解析,采用递归的方式转发客户端的查询,并返回结果给客户端并缓存查询结果,也叫递归服务器。

4.3 dns解析记录

以下是每种DNS解析记录的配置示例,以及它们的用途:

# 1、A记录(Address Record):将主机名转为IPv4地址。
示例:example.com.   IN   A   192.0.2.1
"example.com." 是在DNS服务器上配置的主机名。
"IN" 表示这是查询Internet(可以忽略)。
"A" 表示这是一个A记录。
"192.0.2.1" 是该主机名对应的IPv4地址。
 
# 2、AAAA记录(IPv6 address records):将主机名转为IPv6地址。
示例:example.com.   IN   AAAA   2001:0db8:85a3:0000:0000:8a2e:0370:7334
 
# 3、CNAME记录(Canonical Name Record):设置域名的别名。
示例:www.example.com.   IN   CNAME   example.com.
 
# 4、MX记录(Mail Exchange Record):指定接收给定域名邮件的邮件服务器。
示例:example.com.   IN   MX 10   mail.example.com.
"10" 是优先级,数值越小优先级越高。
 
# 5、NS记录(Name Server records):指定给定域名的权威DNS服务器。
示例:
example.com.   IN   NS   ns1.example.com.
example.com.   IN   NS   ns2.example.com.
 
# 6、PTR记录(Pointer Record):提供反向DNS查找,将IPv4或IPv6地址映射回主机名。
示例:1.2.0.192.in-addr.arpa.   IN   PTR   example.com.
 
# 7、TXT记录(Text Record):存储任意文本信息,常用于验证域名所有权和配置SPF等。

4.4 dns的查询

递归:本地域名服务器,我不知道,但我帮你拿
迭代:根/顶级/权威域名服务器,我不知道,但是我知道有人知道,你自己去拿

一次完整的查询

1、主机向本地DNS服务器发起一个查询请求,比如查询www.example.com的IP地址。
2、本地DNS服务器首先在自己的缓存查找有没有这个记录,如果有并且没有过期,就直接返回。如果没有,就需要向“根DNS服务器”发起查询。
3、“根DNS服务器”负责管理顶级域(.com, .net等),它会告诉本地DNS服务器,
管理.com的顶级域的权威DNS服务器的地址。
4、本地DNS服务器再次向.com的权威DNS服务器发起查询,.com的权威DNS服务器会告诉本地DNS服务器,管理example.com的权威DNS服务器的地址。
5、本地DNS服务器然后向example.com的权威DNS服务器发起查询,
6、example.com的权威DNS服务器会返回www.example.com的IP地址。
6、最后本地DNS服务器将查询到的IP地址返回给请求的客户端,并将这个记录存入缓存,以备后续的查询。

这个过程虽然看起来有些复杂,但实际上由于大部分的DNS查询结果都会被各级DNS服务器的缓存,所以在实际的网络环境中,DNS解析通常都能在很短的时间内完成。

4.5 dns缓存

DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来。并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。

当然,在超过N小时之后,系统会自动再次去询问DNS服务器获得新的结果。所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了。

dns缓存的优先级—浏览器访问

Chrome DNS 缓存 > HOSTS文件 > 系统DNS缓存 > DNS服务器。

dns缓存的优先级—其他程序访问

HOSTS文件 > 系统DNS缓存 > DNS服务器。

4.6 dns地址

1、国通用DNS地址(国内用户推荐使用,速度较快!)
首先DNS服务器地址添:114.114.114.114 (位于北京人民英雄纪念碑)
备用DNS服务器地址添:114.114.115.115

2、全球通用DNS地址(此DNS地址为谷歌服务器的)
首选DNS服务器地址添:8.8.8.8
备用DNS服务器地址添:8.8.4.4

4.7 dns相关命令

nslookup -type=ns egonlin.com

命令验证查询流程
yum install bind-utils -y
dig +trace egonlin.com

五、网络通信的四种地址

1、想实现网络通信,每台主机必须具备4个地址。

1、本机ip地址
2、子网掩码
3、网关的ip地址
4、dns的ip地址

2、4种地址的获取方法

1、静态获取:手动配置
2、动态获取:dhcp获取,流程如下

3、dhcp的流程

image-20260624125924344

以太网头:由于不知道dhcp服务器的mac地址

发送端:本机mac
接收端:广播地址:FF-FF-FF-FF-FF-FF

ip头:由于本机没有ip地址,也不知道dhcp服务器的ip地址

发送端:0.0.0.0
接收端:255.255.255.255

udp头:dhcp协议默认规定了发送端68端口,接收端67端口

发送端:68
接收端:67

过程:

  • 以太网广播后,所有设备看到接收地址FF-FF-FF-FF-FF-FF,不知道给谁
  • 所有设备继续解包看ip地址,看到发送端0.0.0.0,接收端255.255.255.255,dhcp服务器认识并开始响应。其他设备丢弃。
  • dhcp服务器分配好ip地址,返回一个dhcp响应包,结构类似。
以太网头:dhcp mac, 主机mac
ip头:dhcp ip, 255.255.255.255
udp头:dhcp 67, 主机 68 , data部分存放分配的ip地址及各网络参数
主机收到这个响应包,载入ip,子网掩码,网关,dns等地址
posted @ 2026-06-24 13:10  cuckooyang  阅读(26)  评论(0)    收藏  举报