【问题标题】:Understanding TCP/Ip layering through internet flow?通过 Internet 流了解 TCP/Ip 分层?
【发布时间】:2017-02-25 12:34:57
【问题描述】:

我浏览了以下资源,获得了高层次的理解,但无法将通过 TCP/IP 的数据流映射到现实世界中通过互联网的数据流?

  1. TCP/IP layering video
  2. HTTP vs TCP/IP, send data to a web server

  3. Wiki OSI_model

假设我输入 www.google.com 并回车,请求和响应将如何流经 TCP/IP 层

我的理解:-

应用层:- 浏览器会将请求编码为正确的格式,以使其在网络上兼容。同样,它将解码浏览器的响应 所以浏览器是这里的主角。

传输层:- 操作系统(OS)将附加本地端口/套接字,以便将响应映射回来。它还将使用一些标题和流程来丰富数据 它基于底层协议,如 TCP 或 UDP。同样,操作系统会将响应映射回正确的端口。可能它还进行 DNS 解析并附加 要请求的 IP。它还将建立与服务器的连接,以便将进一步的数据发送到服务器。

像 TCP(与 UDP 相比)这样的协议也将确保数据包以正确的顺序发送并期待接收者的 ack。如果 ack 失败,则重新尝试。如此可靠。所以,操作系统是这里的主要参与者。

网络层:- ISP 将进一步将数据转发到互联网骨干网(IB)。 IB也可能会决定最短路径和其他一些东西。 类似的响应。 所以 ISP 和 IB 是这里的两个主要参与者。

数据链路层:- 该层会将请求映射到正确的计算机,即 MAC 地址。所以我认为它将驻留在互联网服务提供商的某个地方。实际上 我不确定这一层的作用,谁是主要参与者?

物理层:- 该层处理物理数据,如电磁波。像光纤//电缆可以是这里的主要参与者。虽然这被描述为最后一层 关于 TCP/IP 分层,但我认为它的作用是从传输层开始的。

我的理解是否正确。如果没有,有人可以明智地纠正它吗?

【问题讨论】:

  • 这是一个很好的问题,我一直在问自己。
  • 您所描述的一切都发生在本地计算机内。 ISP 和 Internet 骨干网与此无关。 DNS 解析由浏览器在连接之前执行,而不是由传输层执行。离题。
  • @EJP 你是说网络层和数据链路层的工作也在本地计算机上执行,而不是在网络级别(一旦数据离开本地计算机)?

标签: networking tcp tcp-ip


【解决方案1】:

我将给出一个(基本的?)解释,省略一些细节。

应用层

您示例中的应用层包括:浏览器和服务于 www.google.com 的网络服务器、DNS 系统和协议以及 HTTP 协议。

每个网络应用程序都被编程为使用特定的传输和网络层,这意味着您的浏览器应用程序和网络服务器被设计和编码为使用 TCP/IP。应用程序通过操作系统 (OS) 提供的 TCP/IP 和 API 使用。在大多数(如果不是全部)情况下,这个 API 就是所谓的Berkeley Sockets API(从现在开始就是套接字 API)。使用此 API,Web 服务器可以指示操作系统在特定端口(HTTP 的 80 或 HTTPS 的 443)上侦听客户端连接,当建立新连接时,操作系统会将其“传递”给 Web 服务器应用程序。使用相同的 API 浏览器建立与 Internet 中远程 Web 服务器的新连接并发送和接收数据。

当您键入 www.google.com 时,浏览器需要做的第一件事就是查找 www.google.com 的 IP 地址,因为 Internet 中的通信不使用主机名。这是使用Domain Name System 或DNS 执行的。省略细节,浏览器使用套接字 API 使用 UDP 向配置的 DNS 服务器 IP 地址和端口 53 发送 DNS 查询,以获取 www.google.com 的 IP 地址。 DNS 服务器也会使用 UDP 向浏览器发送回复。

一旦浏览器获得 www.google.com 的 IP 地址,它将使用套接字 API 与之前获得的 IP 地址和端口 443(如果使用 HTTPS)建立新的 TCP 连接。建立连接后,浏览器会通过该连接向 Web 服务器发送 HTTP 请求,以获取网页、图像、音频等资源,Web 服务器将使用同一连接将回复发送回浏览器。 HTTP 是您的浏览器和 Web 服务器之间使用的应用程序级协议。

从网络的角度来看,应用层的职责是:

  • 使用套接字 API 通过 UDP 上的 DNS 应用层协议将主机名转换为 IP 地址。
  • 使用套接字 API 与为 www.google.com 获得的 IP 地址、端口 443 建立 TCP 连接。
  • 使用 HTTP 应用层协议通过此连接发送请求和接收响应(通过套接字发送和接收数据)。同样,HTTP 是浏览器和网络服务器之间用于请求资源(网页、图像等)并接收响应的协议。

应用层构建应用层协议消息或数据,并通过套接字 API 与传输层进行交互。使用此 API,应用程序指示 TCP 建立与远程主机和端口的新连接,并在连接的另一端向/从应用程序发送和接收数据。

传输层

您示例中的传输层包括在源主机和目标主机中运行的 UDP 和 TCP 协议,不包括中间主机。

传输层用于在 Internet 中某些特定主机中运行的两个(或多个在广播的情况下,但此处不适用)特定应用程序之间发送数据。

传输层还有你提到的其他职责:在TCP的情况下,连接建立和断开、错误检测和重传、有序传递、流量控制和拥塞控制等。使用了TCP头中的一些字段用于这些目的。

TCP 和 UDP 将应用程序数据(在这种情况下为 DNS 或 HTTP 请求和响应)封装成数据包,其中包含包含源端口号和目标端口号字段的标头,并将它们传递给 IP 层以传递目标 IP 地址。

网络层

您的示例中的网络层包括在源主机和目标主机中运行的 IP 协议以及在通往最终目的地的每一跳上运行的 IP 协议层。这些中间跃点是用于互连 Internet 内不同网络的路由器。

IP 协议是一种无连接、尽力而为的交付(无重传、无纠错、无重复检测)协议,用于在 Internet 中的两个特定主机之间发送数据包。

网络层与传输层的职责不同,它的主要目的是在互联网上的主机之间路由数据包,互联网是一个复杂的互联网络,通过路由器使用不同的链路层技术并由不同的组织管理。网络层隐藏了较低层的网络细节,并为传输层提供主机之间的数据包传递服务。

网络层数据包(在我们的例子中是 IP 数据报)包含一个标头,其中包含用于将数据包路由到 Internet 中正确主机的源 IP 地址和目标 IP 地址。这一层的一部分是路由器,一种特殊用途的网络设备,用于互连不同的物理网络,并使用目标地址和路由表在它们之间路由数据包,这些路由表使用路由交换协议(如OSPFBGP)动态构建

IP 将 TCP 段封装成 IP 数据报,包括一个包含协议 = TCP 字段的标头(此字段由目标 IP 层用于将数据报的内容传递给 TCP 或 UDP)、源 IP 地址和目标 IP 地址并将它们传递给链路层,以便沿着到达目的地的路径传递到下一跳。

链接层

您示例中的链路层可能包含多个协议。在您的本地网络中,可能是 WI-FI(IEEE 802.11 标准)和/或以太网(IEEE 802.3 标准),但也包括家庭和 ISP、ISP 的不同网络和广域网之间使用的链路层协议用于到达目标 ISP 或公司,最后到达目标主机。您可能还使用的一些链路层协议是:PPPFrame Relay

链路层只在主机连接的本地网段(链路)上运行,链路层数据包不会路由到其他网络。该层的职责是使用物理层在连接到同一网络的两台主机之间传输数据。 这一层,是唯一在两台不​​同机器之间实际传输比特的层。

链路层将 IP 数据报封装成帧,其中包含一个包含 EtherType = IP 字段的标头(该字段由目标链路层用于将帧的内容传递到适当的网络层)、源链路层地址和目标链路层地址(例如 MAC 地址)。

物理层

您示例中的物理层可能包含多个协议。在您的本地网络中,可能是Ethernet physical layers 的一部分,但也包括在您的家庭和您的 ISP 之间使用的物理层协议,例如DSL,在您的 ISP 的不同网络内以及用于到达目标 ISP 的广域网或公司,最后是目的地主机。在广域网中,最常用的物理层是SDH or SONET

物理层使用不同的digital modulation methods将比特转换为电信号或光脉冲,并通过物理介质传输这些信号,无论是铜线、微波还是光纤。物理层包括构建网络所需的每一块硬件,如连接器、电线、设备、天线、中继器等。

一个具体的例子

假设 Google 网络服务器的 IP 地址 = 10.0.0.1,而您的主机的 IP 地址 = 20.0.0.1。还假设 Google 的某个网络管理员使用 www.google.com 的条目设置 DNS 服务器以映射到 10.0.0.1。还假设您的主机配置为使用 IP = 30.0.0.1 的 DNS 服务器。

Google 网络服务器使用套接字 API 来侦听来自 IP 10.0.0.1 和端口 443 的客户端(浏览器)的连接。网络服务器主机操作系统会将每个新的 TCP 连接转发到 10.0.0.1:443 到网络服务器应用程序。

您在主机的浏览器中键入 www.google.com,IP 地址 = 20.0.0.1。

您的浏览器使用套接字 API 将使用 UDP 向目标 IP = 30.0.0.1 和目标端口 = 53 发送 DNS 查询。侦听该主机和端口的 DNS 服务器将接收查询并将其转发给其他一些DNS 服务器,直到 Google DNS 服务器(域 google.com 的权威机构)被联系,并以 DNS 响应进行响应,告知 www.google.com 位于 10.0.0.1。请参阅下面的详细信息以了解这些查询如何使用 UDP 传递到 DNS 服务器应用程序并将响应发送回应用程序,在此详细信息级别上与 UDP 的唯一区别是在发送数据之前没有建立连接。

您的浏览器,再次使用套接字 API,将建立一个到目标 IP = 10.0.0.1 和目标端口 = 443 的 TCP 连接。您的操作系统将为此连接分配一个随机本地端口,假设端口 = 10000。现在我们有一个由本地和目标端点标识的 TCP 连接,在我们的示例中是 (20.0.0.1:10000, 10.0.0.1:443)。

在获得 www.google.com 的 IP 地址后,您的浏览器将再次使用套接字 API 发送 HTTP 请求,请求 index.html 和该页面的所有资源。 Sockets API 会将应用数据发送到 TCP 层。

在您的主机中运行的 TCP 层会将应用程序数据封装到本地端口 = 10000 和目标端口 = 443 的段中,并要求 IP 层将这些段发送到目标 IP = 10.0.0.1。

在您的主机中运行的 IP 层将使用本地路由表和目标 IP 地址为这些数据报找到下一跳。下一跳将是您主机中配置的默认网关。

在您的主机中运行的 IP 层将使用名为 ARP 的协议查找下一跳(默认网关)的 MAC 地址。此协议用于查找位于同一本地网络中的给定目标 IP 地址的 MAC 地址。

IP 层将 TCP 段封装成协议 = TCP、源 IP = 20.0.0.1 和目标 IP = 10.0.0.1 的 IP 数据报,并要求链路层将这些 IP 数据报发送到下一跳。

下一跳 IP 地址映射到您机器中安装的网络接口。因此,链路层将 IP 数据报封装成 EtherType = IP、源 MAC =(映射的本地网络接口的 MAC 地址)和目标 MAC =(使用 ARP 获得的默认网关的 MAC 地址)的帧,并通过正确的网络接口发送它们.

默认网关(一个路由器)和沿途的所有其他路由器都会重复这个过程:

  • 链路层将接收发往某些本地网络接口的 MAC 地址的帧。
  • 链路层将检查帧字段 EtherType,并且由于值为 IP,因此会将数据报传递给 IP 层。
  • IP 层将检查目标 IP 地址,由于目标 IP 地址不是任何本地 IP 地址,因此它将使用本地路由表为该数据报找到下一跳,依此类推,直到最终目标主机。

最终主机(运行 Google 网络服务器)将执行相同的步骤,但由于现在目标 IP 地址与该主机的本地 IP 地址之一匹配,IP 层将检查 IP 数据报的协议字段,因为它是TCP 会将这些段传递给 TCP 层。 TCP 层将检查 TCP 段中的目标端口(本例中为 443),并将应用程序层数据通过套接字 API 传递给侦听端口 443 上的应用程序(本例中为 Google Web 服务器)。请记住,此套接字绑定到特定的远程 IP 和端口 (20.0.0.1:10000),因此当 Web 服务器通过此套接字发送回响应时,该过程将重复,但现在源 IP = 10.0.0.1,源端口 = 443,目标 IP = 20.0.0.1,目标端口 = 10000。

【讨论】:

  • TLS也在应用层。
  • @Luciano Afranllie 我对网络和链路层的角色感到困惑。对于链路层,您说The responsibility of this layer is to transfer data using the physical layer between two hosts connected to the same network 是否意味着当数据通过wifi 发送到我的家庭路由器,然后wifi 路由器发送到ISP 时,它的作用就出现了,因为所有这些都在同一个网络中。如果是这种情况,为什么链路层确实先于网络层。此外,如果那是链路层的角色,网络角色何时开始。何时开始通过网络在两个不同的 ISP 之间路由数据?
  • 网络层的作用是将数据报端到端地从您的主机传送到最终目的地。当 IP 数据报离开您的主机时,报头中的目标地址是目标主机的 IP 地址,并且不会沿路由更改。链路层不能将数据包发送到本地网络之外。因此,它通常在通往最终目的地的路径上包括不同的物理网络和协议:wifi、DSL、帧中继等。在这些网络中的每一个中,帧头都有一个下一跳的目标地址,总是位于同一主机上的主机物理网络。 IP 将这些细节隐藏到上层。
  • 非常感谢卢西亚诺
猜你喜欢
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2021-12-16
  • 1970-01-01
  • 2014-06-05
  • 2011-02-27
相关资源
最近更新 更多