一、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协议。
具体流程如下:
- 当你的应用程序(比如浏览器)需要解析一个域名时,它会在应用层发起一个DNS查询请求。
- 这个请求会被传输层的UDP协议接收,并封装成一个UDP数据包。UDP数据包中会包含DNS查询的详细信息。
- UDP数据包会被网络层的IP协议接收,并封装成一个IP数据包。IP数据包中会包含源IP地址(你的电脑的IP地址)和目标IP地址(DNS服务器的IP地址)。
- IP数据包会被发送到网络接口层,通过物理网络(例如以太网或Wi-Fi)发送出去。
- 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查询时,它通常会按照一定的顺序,从这个列表中选择一个服务器,并向它发送查询请求。如果这个服务器没有响应,或者返回了一个错误,你的电脑会尝试列表中的下一个服务器,直到找到一个可用的服务器。