使用 TLS,传输层是不是出现在 DNS 之后,并且在数据准备好添加 TCP 标头之后再次出现?
Posted
技术标签:
【中文标题】使用 TLS,传输层是不是出现在 DNS 之后,并且在数据准备好添加 TCP 标头之后再次出现?【英文标题】:With TLS, Does the Transport layer comes after the DNS and again after the data is ready to add the TCP header?使用 TLS,传输层是否出现在 DNS 之后,并且在数据准备好添加 TCP 标头之后再次出现? 【发布时间】:2022-01-17 03:30:58 【问题描述】:我知道 TLS 需要可靠的传输,但遵循 TCP/IP 模型,在发送数据/请求的情况下,第一层将是应用层......在建立连接并且数据准备好后,它会移动到下一层是要添加的 TCP 标头的传输层。 那么 DNS 之后的第一步是 TCP 握手,然后是 TLS 握手,然后再到 TCP 以添加 TCP 标头?或者我在这里遗漏了什么?
【问题讨论】:
TLS 在 TCP/IP 模型中的应用层。 TCP 不关心应用程序的有效负载,因此没有上到 TLS 和下到 TCP。 DNS 与它完全分离。 DNS 与 TLS 的关系非常松散。 DNS 恰好将名称映射到 IP(大致),然后才开始 TCP/IP,然后开始 TLS 握手。但是当您在这里时,之前在 DNS 级别发生的事情就会丢失。 TCP/IP 仅适用于 IP 地址(和端口)。然后 DNS 重新发挥作用,因为 TLS 经常使用证书,因此名称重新发挥作用,像 SAN 或 OCSP/Certificate 日志使用 URL 和名称以及 SNI 等扩展也是如此。跨度> @SteffenUllrich 但是我们仍然从 TCP 开始建立连接。因此,TCP 打开流,然后在添加 TCP 标头后,应用层中发生的任何事情都会将其带到另一端。这让我感到困惑,我们从传输层而不是应用层开始。或者说得对,传输层包裹在应用层周围,它不会在它之后启动。 @t2149573:您将 TCP/IP 模型与计时行为混合在一起。模型是针对特定目的的抽象,您将其用于非设计目的。该模型没有从特定层开始然后移动到另一层的概念。想象一下像这样抽象汽车:运输层是轮胎,电机和应用层是乘客座椅。您不会开始驾驶带轮胎的汽车,然后移动到乘客座位。这些只是同一辆移动汽车的不同方面。 关于你的计时东西:一个应用程序,比如一个网络浏览器,并不“关心” TCP/IP 细节。它具有要发送到某个端点的 HTTP 内容。它为此找到IP地址,然后要求操作系统打开一个“套接字”,并在收到它工作的确认后,然后在它“内部”发送HTTP内容。所以事情发生在不同的地方。如果您愿意,“应用程序”只会看到并关心应用程序层,而操作系统则关心最低级别。当然,这过于简单化了,TLS 和最近的 QUIC 都不太清楚。 【参考方案1】:层模型的问题在于,层数过多或不足的情况太多。理解层的概念以及我们为什么需要层是很重要的。但是恕我直言,这两个层模型实际上都不是代表互联网。
正如在 cmets 中所说,从您所描述的角度来看,DNS 是一个单独的“应用程序”。因此,DNS 是否发生并不影响接下来会发生什么。
我认为此图显示了其中包含 TLS 的层模型 (source)。
应用程序正在将其数据传递给 TLS 层。该层通常实现为与应用程序链接的库,因此它也是“高于”套接字。
TLS 工作在 TCP 之上,即 TLS 将加密流连同它自己的信令数据包一起提供给 TCP,TCP 像处理任何其他数据包一样处理它们。
所以,基本上就是你的描述。首先,建立 TCP 连接。之后,TCP 只发送 TLS 提供给它的任何数据流,并且该流以 TLS 握手开始。
但有一个细微差别。 TCP 是一种基于流的协议。它在一侧接受流并在另一侧返回流。将流分成数据包是在 TCP 本身中发生的。也就是说,TLS 正在使用任何大小的“记录”,这些“记录”对 TLS 来说是方便的。记录不必与数据包相对应。
【讨论】:
同上评论:所以我们仍然从 TCP 开始建立连接。 TCP 打开流,然后在添加 TCP 标头后,应用层中发生的任何事情都将其带到另一端。这让我感到困惑,我们从传输层而不是应用层开始。或者说得对,传输层包裹在应用层周围,它不会在它之后启动。 我们将从打开套接字到另一个应用程序(使用 ip:port)对的应用程序开始。这涉及到应用程序告诉 tcp 层它希望连接到所述 ip:port。坦率地说,我不确定应用程序是否直接告诉 tcp 层,然后将其数据通过 tls 或将其告诉 tls,然后 tls 将其告诉 tcp。但这是操作系统/库实现细节。应用程序需要先创建套接字,然后才会发生一些事情。以上是关于使用 TLS,传输层是不是出现在 DNS 之后,并且在数据准备好添加 TCP 标头之后再次出现?的主要内容,如果未能解决你的问题,请参考以下文章