了解 TCP/Ip 通过互联网流量分层?
Understanding TCP/Ip layering through internet flow?
我阅读了以下资源,获得了高层次的理解,但无法将通过 TCP/IP 的数据流映射到现实世界中通过 Internet 的数据流?
假设我输入 www.google.com 并按下回车键,请求和响应将如何流经 TCP/IP 层
我的理解:-
应用层:- 浏览器会将请求编码为正确的格式,以使其在网络上兼容。同样,它将为浏览器解码响应
所以浏览器是这里的主角。
传输层:-操作系统(OS)将附加本地port/socket以便它可以映射回响应。它还将用一些 headers 和处理来丰富数据
它基于底层协议,如 TCP 或 UDP。同样,OS 会将响应映射回正确的端口。可能它也做 DNS 解析并附加
要请求的 IP。它还将建立与服务器的连接,以便可以将更多数据发送到服务器。
TCP 等协议(与 UDP 对比)也将确保数据包以正确的顺序发送并期望接收方的确认。如果 ack 失败,则重新尝试。如此可靠。所以,OS才是主角。
网络层:- ISP 将进一步转发数据到互联网骨干网(IB)。 IB 也可能会决定什么是最短路径和其他一些东西。
同样的回应。
所以 ISP 和 IB 是这里的两个主要参与者。
数据link层:-该层将请求映射到正确的计算机,即MAC地址。所以我认为它将驻留在互联网服务提供商的某个地方。实际上
我不确定这一层的作用,谁是主要演员?
物理层:- 该层处理电磁波等物理数据。像光纤//电缆可以成为这里的主要角色。虽然这被描述为最后一层
关于 TCP/IP 分层,但我认为它的作用是从传输层开始的。
我的理解是否正确。如果没有,有人可以更正吗?
我将给出一个(基本的?)解释,省略一些细节。
应用层
您的示例中的应用层包括:浏览器和服务于 www.google.com 的 Web 服务器、DNS 系统和协议以及 HTTP 协议。
每个网络应用程序都被编程为使用特定的传输层和网络层,这意味着您的浏览器应用程序和 Web 服务器被设计和编码为使用 TCP/IP。应用程序使用操作系统提供的 TCP/IP 和 API (OS)。这个 API 在大多数情况下(如果不是全部的话)就是所谓的 Berkeley Sockets API(从现在开始是套接字 API)。使用此 API,Web 服务器可以指示 OS 在特定端口(80 用于 HTTP 或 443 用于 HTTPS)上侦听客户端连接,并在建立新连接时,OS将 "pass" 它发送到 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 建立新的 TCP 连接到之前获得的 IP 地址和端口 443(如果使用 HTTPS)。建立连接后,浏览器将通过该连接向Web 服务器发送HTTP 请求,以获取网页、图像、音频等资源,Web 服务器将使用同一连接将回复发送回浏览器。 HTTP 是您的浏览器和网络服务器之间使用的应用层协议。
从网络的角度来看,应用层的职责是:
- 使用套接字通过 UDP 使用 DNS 应用层协议将主机名转换为 IP 地址 API。
- 使用套接字 API 建立 TCP 连接到为 www.google.com 获得的 IP 地址,端口 443。
- 使用 HTTP 应用层协议通过此连接发送请求和接收响应(通过套接字发送和接收数据)。同样,HTTP 是浏览器和 Web 服务器之间用于请求资源(网页、图像等)并接收响应的协议。
应用层构建应用层协议消息或数据,并通过套接字与传输层进行交互 API。使用此 API 应用程序指示 TCP 建立到远程主机和端口的新连接,并发送和接收数据 to/from 连接另一端的应用程序。
传输层
您示例中的传输层包括源主机和目标主机中的 UDP 和 TCP 协议 运行,不包括中间主机。
传输层用于在 Internet 中某些特定主机中的两个(或多个广播但此处不适用)特定应用程序 运行 之间发送数据。
传输层还有你提到的其他职责:在 TCP 的情况下,连接建立和断开、错误检测和重传、有序传递、流量控制和拥塞控制等。TCP 中的一些字段header 用于这些目的。
TCP 和 UDP 将应用程序数据(在本例中为 DNS 或 HTTP 请求和响应)封装到包含 header 字段的数据包中,字段包括源端口号和目标端口号,并将它们传递给 IP 层以进行处理提供了目标 IP 地址。
网络层
您的示例中的网络层包括源主机和目标主机中的 IP 协议 运行,以及通往目标主机的每一跳的 IP 协议层 运行最终目的地。这些中间跃点是用于互连 Internet 中不同网络的路由器。
IP 协议是一种无连接、尽力而为传输(无重传、无纠错、无重复检测)协议,用于在 Internet 中的两个特定主机之间发送数据包。
网络层的职责与传输层不同,其主要目的是在 Internet 之间路由主机之间的数据包,Internet 是一个复杂的 inter-network 互连网络,通过路由器使用不同的 link层技术并由不同的组织管理。网络层隐藏了较低级别的网络细节,并在网络之间提供数据包传递服务主机到传输层。
网络层数据包,在我们的例子中是 IP 数据报,包括 header 以及用于将数据包路由到 Internet 中正确主机的源和目标 IP 地址。这一层的一部分是路由器,特殊用途的网络设备,它们将不同的物理网络互连起来,并使用目标地址和路由 table 在它们之间路由数据包,这些路由使用 OSPF and BGP
等路由交换协议动态构建
IP 将 TCP 段封装到 IP 数据报中,包括一个 header,其字段包括 protocol = TCP(目标 IP 层使用此字段将数据报的内容传送到 TCP 或 UDP)、源IP 地址和目标 IP 地址,并将它们传递到 link 层,以传递到到达目标路径的下一跳。
Link层
您示例中的 link 层可能包含多个协议。在您的本地网络中,可能是 WI-FI(IEEE 802.11 之类)and/or 以太网(IEEE 802.3 之类),但还包括在不同网络中您的家庭和 ISP 之间使用的 link 层协议您的 ISP 和广域网用于到达目标 ISP 或公司,最后到达目标主机。您可能还使用的一些 link 层协议是:PPP and Frame Relay.
link层仅在主机连接的本地网段(link)上运行,link层数据包不会路由到其他网络。该层的职责是使用物理层在连接到同一网络的两台主机之间传输数据。 这一层是唯一在两台不同机器之间实际传输位的层。
link 层将 IP 数据报封装到帧中,其中包含一个 header 字段,其中包含 EtherType = IP(该字段由目标 link 层用于传递帧到正确的网络层),源 link 层地址和目标 link 层地址(例如 MAC 地址)。
物理层
您示例中的物理层可能包含多个协议。在您的本地网络中,可能有一些 Ethernet physical layers but also includes the physical layer protocol used between your home and your ISP like DSL, inside different networks of your ISP and in wide area networks used to reach the target ISP or company and finally the destination host. In wide area networks the most used physical layer is 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 Web 服务器使用套接字 API 侦听来自 IP 10.0.0.1 和端口 443 的客户端(浏览器)的连接。Web 服务器主机 OS 将转发每个新的 TCP连接到 10.0.0.1:443 到 Web 服务器应用程序。
您在 IP 地址 = 20.0.0.1 的主机的浏览器中键入 www.google.com。
您的浏览器使用套接字 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 连接。您的 OS 将为此分配一个随机本地端口连接,假设端口 = 10000。现在我们有一个由本地和目标端点标识的 TCP 连接,这在我们的示例中 (20.0.0.1:10000, 10.0.0.1:443)。
获得 www.google.com 的 IP 地址后,您的浏览器将再次使用套接字 API 发送 HTTP 请求,请求 index.html 以及属于该页面的所有资源。套接字 API 将应用程序数据发送到 TCP 层。
您主机中的 TCP 层 运行 会将应用程序数据封装到本地端口 = 10000 和目标端口 = 443 的段中,并要求 IP 层将这些段发送到目标 IP = 10.0.0.1。
您主机中的 IP 层 运行 将使用本地路由 table 和目标 IP 地址为这些数据报找到下一跳。下一跳将是 t在您的主机中配置的默认网关。
您主机中的 IP 层 运行 将使用名为 ARP 的协议找到下一跳(默认网关)的 MAC 地址。此协议用于为位于同一本地网络中的给定目标 IP 地址查找 MAC 地址。
IP 层会将 TCP 段封装成协议 = TCP、源 IP = 20.0.0.1 和目标 IP = 10.0.0.1 的 IP 数据报,并要求 link 层将这些 IP 数据报发送到下一个跳.
下一跃点 IP 地址映射到安装在您机器上的网络接口。因此,link 层会将 IP 数据报封装到 EtherType = IP、源 MAC =(映射本地网络接口的MAC 地址)和目标 MAC =(MAC 使用 ARP 获得的默认网关地址)并通过正确的网络接口发送它们。
默认网关(路由器)和沿途的所有其他路由器将重复此过程:
- Link 层将接收发往某些本地网络接口的 MAC 地址的帧。
- Link 层将检查帧字段 EtherType 并且由于值为 IP 会将数据报传递到 IP 层。
- IP 层将检查目标 IP 地址,并且由于目标 IP 地址不是任何本地 IP 地址,它将使用本地路由 table 找到此数据报的下一跳,依此类推,直到最终目标主机.
最终主机(运行 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。
我阅读了以下资源,获得了高层次的理解,但无法将通过 TCP/IP 的数据流映射到现实世界中通过 Internet 的数据流?
假设我输入 www.google.com 并按下回车键,请求和响应将如何流经 TCP/IP 层
我的理解:-
应用层:- 浏览器会将请求编码为正确的格式,以使其在网络上兼容。同样,它将为浏览器解码响应 所以浏览器是这里的主角。
传输层:-操作系统(OS)将附加本地port/socket以便它可以映射回响应。它还将用一些 headers 和处理来丰富数据 它基于底层协议,如 TCP 或 UDP。同样,OS 会将响应映射回正确的端口。可能它也做 DNS 解析并附加 要请求的 IP。它还将建立与服务器的连接,以便可以将更多数据发送到服务器。
TCP 等协议(与 UDP 对比)也将确保数据包以正确的顺序发送并期望接收方的确认。如果 ack 失败,则重新尝试。如此可靠。所以,OS才是主角。
网络层:- ISP 将进一步转发数据到互联网骨干网(IB)。 IB 也可能会决定什么是最短路径和其他一些东西。 同样的回应。 所以 ISP 和 IB 是这里的两个主要参与者。
数据link层:-该层将请求映射到正确的计算机,即MAC地址。所以我认为它将驻留在互联网服务提供商的某个地方。实际上 我不确定这一层的作用,谁是主要演员?
物理层:- 该层处理电磁波等物理数据。像光纤//电缆可以成为这里的主要角色。虽然这被描述为最后一层 关于 TCP/IP 分层,但我认为它的作用是从传输层开始的。
我的理解是否正确。如果没有,有人可以更正吗?
我将给出一个(基本的?)解释,省略一些细节。
应用层
您的示例中的应用层包括:浏览器和服务于 www.google.com 的 Web 服务器、DNS 系统和协议以及 HTTP 协议。
每个网络应用程序都被编程为使用特定的传输层和网络层,这意味着您的浏览器应用程序和 Web 服务器被设计和编码为使用 TCP/IP。应用程序使用操作系统提供的 TCP/IP 和 API (OS)。这个 API 在大多数情况下(如果不是全部的话)就是所谓的 Berkeley Sockets API(从现在开始是套接字 API)。使用此 API,Web 服务器可以指示 OS 在特定端口(80 用于 HTTP 或 443 用于 HTTPS)上侦听客户端连接,并在建立新连接时,OS将 "pass" 它发送到 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 建立新的 TCP 连接到之前获得的 IP 地址和端口 443(如果使用 HTTPS)。建立连接后,浏览器将通过该连接向Web 服务器发送HTTP 请求,以获取网页、图像、音频等资源,Web 服务器将使用同一连接将回复发送回浏览器。 HTTP 是您的浏览器和网络服务器之间使用的应用层协议。
从网络的角度来看,应用层的职责是:
- 使用套接字通过 UDP 使用 DNS 应用层协议将主机名转换为 IP 地址 API。
- 使用套接字 API 建立 TCP 连接到为 www.google.com 获得的 IP 地址,端口 443。
- 使用 HTTP 应用层协议通过此连接发送请求和接收响应(通过套接字发送和接收数据)。同样,HTTP 是浏览器和 Web 服务器之间用于请求资源(网页、图像等)并接收响应的协议。
应用层构建应用层协议消息或数据,并通过套接字与传输层进行交互 API。使用此 API 应用程序指示 TCP 建立到远程主机和端口的新连接,并发送和接收数据 to/from 连接另一端的应用程序。
传输层
您示例中的传输层包括源主机和目标主机中的 UDP 和 TCP 协议 运行,不包括中间主机。
传输层用于在 Internet 中某些特定主机中的两个(或多个广播但此处不适用)特定应用程序 运行 之间发送数据。
传输层还有你提到的其他职责:在 TCP 的情况下,连接建立和断开、错误检测和重传、有序传递、流量控制和拥塞控制等。TCP 中的一些字段header 用于这些目的。
TCP 和 UDP 将应用程序数据(在本例中为 DNS 或 HTTP 请求和响应)封装到包含 header 字段的数据包中,字段包括源端口号和目标端口号,并将它们传递给 IP 层以进行处理提供了目标 IP 地址。
网络层
您的示例中的网络层包括源主机和目标主机中的 IP 协议 运行,以及通往目标主机的每一跳的 IP 协议层 运行最终目的地。这些中间跃点是用于互连 Internet 中不同网络的路由器。
IP 协议是一种无连接、尽力而为传输(无重传、无纠错、无重复检测)协议,用于在 Internet 中的两个特定主机之间发送数据包。
网络层的职责与传输层不同,其主要目的是在 Internet 之间路由主机之间的数据包,Internet 是一个复杂的 inter-network 互连网络,通过路由器使用不同的 link层技术并由不同的组织管理。网络层隐藏了较低级别的网络细节,并在网络之间提供数据包传递服务主机到传输层。
网络层数据包,在我们的例子中是 IP 数据报,包括 header 以及用于将数据包路由到 Internet 中正确主机的源和目标 IP 地址。这一层的一部分是路由器,特殊用途的网络设备,它们将不同的物理网络互连起来,并使用目标地址和路由 table 在它们之间路由数据包,这些路由使用 OSPF and BGP
等路由交换协议动态构建IP 将 TCP 段封装到 IP 数据报中,包括一个 header,其字段包括 protocol = TCP(目标 IP 层使用此字段将数据报的内容传送到 TCP 或 UDP)、源IP 地址和目标 IP 地址,并将它们传递到 link 层,以传递到到达目标路径的下一跳。
Link层
您示例中的 link 层可能包含多个协议。在您的本地网络中,可能是 WI-FI(IEEE 802.11 之类)and/or 以太网(IEEE 802.3 之类),但还包括在不同网络中您的家庭和 ISP 之间使用的 link 层协议您的 ISP 和广域网用于到达目标 ISP 或公司,最后到达目标主机。您可能还使用的一些 link 层协议是:PPP and Frame Relay.
link层仅在主机连接的本地网段(link)上运行,link层数据包不会路由到其他网络。该层的职责是使用物理层在连接到同一网络的两台主机之间传输数据。 这一层是唯一在两台不同机器之间实际传输位的层。
link 层将 IP 数据报封装到帧中,其中包含一个 header 字段,其中包含 EtherType = IP(该字段由目标 link 层用于传递帧到正确的网络层),源 link 层地址和目标 link 层地址(例如 MAC 地址)。
物理层
您示例中的物理层可能包含多个协议。在您的本地网络中,可能有一些 Ethernet physical layers but also includes the physical layer protocol used between your home and your ISP like DSL, inside different networks of your ISP and in wide area networks used to reach the target ISP or company and finally the destination host. In wide area networks the most used physical layer is 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 Web 服务器使用套接字 API 侦听来自 IP 10.0.0.1 和端口 443 的客户端(浏览器)的连接。Web 服务器主机 OS 将转发每个新的 TCP连接到 10.0.0.1:443 到 Web 服务器应用程序。
您在 IP 地址 = 20.0.0.1 的主机的浏览器中键入 www.google.com。
您的浏览器使用套接字 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 连接。您的 OS 将为此分配一个随机本地端口连接,假设端口 = 10000。现在我们有一个由本地和目标端点标识的 TCP 连接,这在我们的示例中 (20.0.0.1:10000, 10.0.0.1:443)。
获得 www.google.com 的 IP 地址后,您的浏览器将再次使用套接字 API 发送 HTTP 请求,请求 index.html 以及属于该页面的所有资源。套接字 API 将应用程序数据发送到 TCP 层。
您主机中的 TCP 层 运行 会将应用程序数据封装到本地端口 = 10000 和目标端口 = 443 的段中,并要求 IP 层将这些段发送到目标 IP = 10.0.0.1。
您主机中的 IP 层 运行 将使用本地路由 table 和目标 IP 地址为这些数据报找到下一跳。下一跳将是 t在您的主机中配置的默认网关。
您主机中的IP 层 运行 将使用名为 ARP 的协议找到下一跳(默认网关)的 MAC 地址。此协议用于为位于同一本地网络中的给定目标 IP 地址查找 MAC 地址。
IP 层会将 TCP 段封装成协议 = TCP、源 IP = 20.0.0.1 和目标 IP = 10.0.0.1 的 IP 数据报,并要求 link 层将这些 IP 数据报发送到下一个跳.
下一跃点 IP 地址映射到安装在您机器上的网络接口。因此,link 层会将 IP 数据报封装到 EtherType = IP、源 MAC =(映射本地网络接口的MAC 地址)和目标 MAC =(MAC 使用 ARP 获得的默认网关地址)并通过正确的网络接口发送它们。
默认网关(路由器)和沿途的所有其他路由器将重复此过程:
- Link 层将接收发往某些本地网络接口的 MAC 地址的帧。
- Link 层将检查帧字段 EtherType 并且由于值为 IP 会将数据报传递到 IP 层。
- IP 层将检查目标 IP 地址,并且由于目标 IP 地址不是任何本地 IP 地址,它将使用本地路由 table 找到此数据报的下一跳,依此类推,直到最终目标主机.
最终主机(运行 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。