UDP 和 TCP 的区别

网络工程 ipv4 通讯协议 UDP 第4层
2021-07-23 03:49:29
http://www.dummies.com/how-to/content/the-tcpip-networking-protocol-suite.html

我正在阅读两者之间的区别,并以 TCP 为例:

例如,当运行 Web 浏览器的用户请求页面时,浏览器使用 HTTP 通过 TCP 向 Web 服务器发送请求。当 Web 服务器收到请求时,它使用 HTTP 再次通过 TCP 将请求的网页发送回浏览器。

UDP 示例:

最著名的使用 UDP 的应用层协议是 DNS,即域名系统。当应用程序需要访问www.dummies.com 等域名时,DNS 会向DNS 服务器发送UDP 数据包以查找该域。当服务器找到该域时,它会在另一个 UDP 数据包中返回该域的 IP 地址。

两者中的哪一个最初发生?与网站的连接最终是如何发生的?

2个回答

我将尝试直接回答您的问题,而不会对 TCP v UDP 进行大量的咆哮。

基本上,您需要了解 HTTP 和 DNS 都是完全独立的应用程序/协议。有时您需要实际向 DNS 服务器发送 DNS 查询,有时则不需要(如果 DNS 记录本地缓存在您的 PC/服务器上)。

  1. 我们没有缓存 DNS 记录。

    • 在浏览器中输入http://google.com
    • 您的 PC 检查本地 DNS 缓存,发现它没有 google.com 的记录
    • UDP DNS 查询被发送到 DNS 服务器,在这种情况下,它很可能是您 ISP 的 DNS 服务器。
    • DNS 服务器发送回 UDP 响应。
    • 您现在可以通过 IP 地址的形式获得答案,现在您可以启动与 google.com 的 TCP 连接
    • 3 次握手发生在您和 google.com 之间(SYN、SYN/ACK、ACK) - 如果您不知道这是什么,您可以搜索“TCP 3 次握手”并找到一些好的信息。
    • 握手完成后,HTTP 将以您最喜欢的搜索引擎的形式呈现。
  2. 我们有一个缓存的 DNS 记录。这里有一个非常小的差异,但我将包括整个内容,以便您可以看到比较。

    • 在浏览器中输入http://google.com
    • 您的 PC 检查本地 DNS 缓存,并看到它以 IP 地址的形式缓存了一条记录。
    • 您现在拥有 google.com 的 IP 地址,现在您可以启动与 google.com 的 TCP 连接
    • 您和 google.com 之间发生了 3 次握手(SYN、SYN/ACK、ACK)
    • 握手完成后,HTTP 将以您最喜欢的搜索引擎的形式呈现。

因此,仅仅因为您尝试访问网页,您不必发送 UDP DNS 查询。DNS 是独立的,访问网页并不是您需要使用 DNS 的唯一时间。如果您需要澄清,请随时发表评论。

将 UDP 视为发送常规邮资的信件,而将 TCP 视为带有跟踪号码和投递通知的发送。请记住,UDP 和 TCP 只是传递方法,它们并不关心数据包中的内容或接收它的应用程序对数据包的处理方式。

DNS 是一个愚蠢的例子,向某人展示 TCP 和 UDP 之间的区别。SNMP(尤其是陷阱)更好。下面让我试试。请注意,示例略有简化。

当路由器通过 UDP 向 SNMP 服务器发送 SNMP 陷阱(诸如“嘿,我刚刚重新启动,认为您应该知道”的警报)时,它会这样做:它将数据包发送到服务器,仅此而已。如果服务器被编程为发送回一些东西,UDP 不在乎。UDP 传送了它的数据包,现在它要去酒吧喝一品脱。

那么 TCP 会发生什么呢?那么,路由器世界将包含陷阱消息的数据包发送到服务器。经过一定的超时时间后,它会再次发送数据包……再一次……再一次……直到服务器最终以确认数据包响应。这就是 TCP 关心的全部。它不关心服务器可能(或可能不需要)发回的数据包。TCP 将传送它的数据包并返回一个确认,或者尝试(或多或少)。

您可能需要查看 OSI 模型,记住每一层都封装了它上面的一层。也就是说,每一层都包装它从上层收到的东西,并以专业的对内容不感兴趣的方式携带它。