IP、TCP和DNS协议

153 阅读4分钟

一、IP协议 (负责传输)

主要负责将数据包从源主机发送到目标主机。


而要保证确实传送到对 方那里,则需要满足各类条件。 其中两个重要的条件是IP 地址和MAC地址( Media Access Control Address )

二、TCP协议(确保可靠性)

提供可靠的字节流服务。

字节流服务: 为了方便传输, 将大块数据分割成以报文段(segment )为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之, TCP 协议为了更容易传送大数据才把数据分割,而且TCP 协议能够确认数据最终是否送达到对方。

确保数据能到达目标

三次握手。

TCP不会对传送数据后的情况置之不理,它一定会向对方确认是否成功送达。

握手过程中使用了TCP的标志(flag) — SYN(synchronize)和ACK(acknowledgement).

三、DNS服务(负责域名解析)

DNS (DomainNameSvstem)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

在TCP/IP协议中,DNS查询是在应用层进行的,而具体的数据传输则是在传输层进行的,通常使用UDP协议。

具体流程如下:

  1. 当你的应用程序(比如浏览器)需要解析一个域名时,它会在应用层发起一个DNS查询请求。
  2. 这个请求会被传输层的UDP协议接收,并封装成一个UDP数据包。UDP数据包中会包含DNS查询的详细信息。
  3. UDP数据包会被网络层的IP协议接收,并封装成一个IP数据包。IP数据包中会包含源IP地址(你的电脑的IP地址)和目标IP地址(DNS服务器的IP地址)。
  4. IP数据包会被发送到网络接口层,通过物理网络(例如以太网或Wi-Fi)发送出去。
  5. DNS服务器在接收到你的DNS查询请求后,会进行查找,并将结果封装成一个UDP数据包返回给你。

所以说,DNS查询在TCP/IP协议的应用层发起,通过传输层的UDP协议进行数据传输。

3-1.DNS查询可能会失败

由于UDP协议是一种无连接的协议,它不保证数据包一定能成功到达目的地,因此DNS查询有可能失败。例如,如果网络丢包,或者DNS服务器繁忙无法响应,都可能导致DNS查询失败。

当DNS查询失败时,操作系统通常会尝试重新发送查询请求。这可能会重复几次,直到收到响应,或者达到一定的时间限制或重新查询次数限制。

如果多次查询失败,操作系统可能会尝试查询备用的DNS服务器,如果配置了的话。还有一些系统会使用更复杂的策略来处理DNS查询失败,例如并行查询多个DNS服务器,或者使用先前查询成功的结果,即使它们可能已经过时。

3-2.DNS查询服务器的地址来源

操作系统中通常会有一份DNS服务器的列表,这列表里的服务器就是你的电脑会向它们发送DNS查询请求的目标。这些DNS服务器地址一般由你的网络服务提供商提供,或者由你的网络管理员配置。

当你通过Wi-Fi或以太网连接到一个网络时,你的电脑通常会通过DHCP(动态主机配置协议)自动获取一个IP地址,同时也会获取一个或多个DNS服务器的地址。这些地址就会被添加到你的操作系统的DNS服务器列表中。

你也可以手动设置DNS服务器的地址。例如,你可能想要使用公共的DNS服务器,如Google的8.8.8.8和8.8.4.4,或者Cloudflare的1.1.1.1,因为这些服务器可能比你的网络服务提供商的服务器更快,或者提供更好的隐私保护。在大多数操作系统中,你可以在网络设置里手动添加或修改DNS服务器的地址。

当你的电脑需要进行DNS查询时,它通常会按照一定的顺序,从这个列表中选择一个服务器,并向它发送查询请求。如果这个服务器没有响应,或者返回了一个错误,你的电脑会尝试列表中的下一个服务器,直到找到一个可用的服务器。

image.png