sco*_*les 5 networking tcp tcp-ip
我已经阅读了以下资源,有较高的了解,但无法将通过TCP / IP的数据流映射到现实世界中通过Internet的数据流?
假设我输入www.google.com,然后按Enter,请求和响应将如何流经TCP / IP层
我的不足:
应用层:-浏览器会将请求编码为正确的格式,以使其在网络上兼容。同样,它将解码响应返回给浏览器,因此浏览器是此处的主要参与者。
传输层:-操作系统(OS)将附加本地端口/套接字,以便它可以将响应映射回去。它还将使用一些标头丰富数据,并根据基础协议(例如TCP或UDP)对其进行处理。同样,操作系统会将响应映射回正确的端口。可能还会进行DNS解析,并将IP附加到请求中。它还将与服务器建立连接,以便可以将更多数据发送到服务器。
诸如TCP(与UDP的对比)之类的协议还可以确保以正确的顺序发送数据包,并期望接收方发出确认。如果ack失败,请重试。如此可靠。因此,OS是这里的主要参与者。
网络层: -ISP将进一步将数据转发到Internet骨干(IB)。IB可能会决定最短路径是什么,以及其他一些东西。同样的反应。因此,ISP和IB是这里的两个主要参与者。
数据链路层:-该层将请求映射到正确的计算机,即MAC地址。因此,我认为它将驻留在Internet服务提供商的某个位置。其实我不确定这层角色,谁是主要演员?
物理层:-该层处理诸如电磁波之类的物理数据。像光纤//电缆在这里可以是主要角色。尽管这被描述为TCP / IP分层的最后一层,但我认为它的作用始于传输层。
我的理解正确吗?如果不能,那么有人可以纠正它吗?
我将给出一个(基本的?)解释,省略一些细节。
应用层
您示例中的应用程序层包括:浏览器和为 www.google.com 提供服务的 Web 服务器、DNS 系统和协议以及 HTTP 协议。
每个网络应用程序都被编程为使用特定的传输和网络层,这意味着您的浏览器应用程序和 Web 服务器被设计和编码为使用 TCP/IP。应用程序通过操作系统 (OS) 提供的 API 和 TCP/IP 使用。在大多数情况下(如果不是全部)这个 API 就是所谓的Berkeley Sockets API(从现在开始称为套接字 API)。使用此 API,Web 服务器可以指示操作系统侦听客户端连接的特定端口(HTTP 为 80 或 HTTPS 为 443),当建立新连接时,操作系统会将其“传递”给 Web 服务器应用程序。浏览器使用相同的 API 与 Internet 中的远程 Web 服务器建立新连接并发送和接收数据。
当您键入 www.google.com 时,浏览器需要做的第一件事是为 www.google.com 查找 IP 地址,因为 Internet 中的通信不使用主机名。这是使用域名系统或 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 与传输层交互。应用程序使用此 API 指示 TCP 建立到远程主机和端口的新连接,并在连接的另一端向/从应用程序发送和接收数据。
传输层
您示例中的传输层包括在源主机和目标主机中运行的 UDP 和 TCP 协议,不包括中间主机。
传输层用于在 Internet 内某些特定主机上运行的两个(或多个,在广播的情况下,但不适用此处)特定应用程序之间发送数据。
传输层还有你提到的其他职责:在 TCP 的情况下,连接建立和拆除、错误检测和重传、有序交付、流量控制和拥塞控制等。 TCP 标头中的一些字段用于这些目的.
TCP 和 UDP 将应用程序数据(在这种情况下为 DNS 或 HTTP 请求和响应)封装到数据包中,该数据包包括一个包含源端口号和目标端口号字段的报头,并将它们传递到 IP 层以交付目标 IP 地址。
网络层
您示例中的网络层包括在源主机和目标主机中运行的 IP 协议以及在通往最终目的地的每一跳上运行的 IP 协议层。这些中间跃点是用于互连 Internet 内不同网络的路由器。
IP 协议是一种无连接、尽力而为的传送(无重传、无纠错、无重复检测)协议,用于在 Internet 内的两个特定主机之间发送数据包。
网络层与传输层的职责不同,其主要目的是在 Internet 之间的主机之间路由数据包,Internet 是一个复杂的互连网络互连网络,通过路由器使用不同的链路层技术并由不同的组织管理。网络层隐藏较低级别的网络细节,并在主机到传输层之间提供数据包传递服务。
网络层数据包,在我们的例子中是 IP 数据报,包括一个带有源和目标 IP 地址的标头,用于将数据包路由到 Internet 中的正确主机。该层的一部分是路由器,专用网络设备,用于互连不同的物理网络并使用目标地址和路由表在它们之间路由数据包,这些路由表是使用路由交换协议(如OSPF和BGP)动态构建的
IP 将 TCP 段封装到 IP 数据报中,包括一个报头,其中的字段包括协议 = TCP(目标 IP 层使用该字段将数据报的内容传送到 TCP 或 UDP)、源 IP 地址和目标 IP 地址并传递它们到链路层,沿到达目的地的路径传送到下一跳。
链路层
您示例中的链路层可能包括多个协议。在您的本地网络中,可能是 WI-FI(IEEE 802.11 某种东西)和/或以太网(IEEE 802.3 某种东西),但还包括您的家庭和 ISP 之间、ISP 的不同网络内部和广域网中使用的链路层协议用于到达目标 ISP 或公司,最后到达目标主机。您可能还会使用的一些链路层协议是:PPP和Frame Relay。
链路层仅在主机连接的本地网段(链路)上运行,链路层数据包不会路由到其他网络。该层的职责是使用物理层在连接到同一网络的两台主机之间传输数据。这一层是唯一在两台不同机器之间实际传输比特的层。
链路层将 IP 数据报封装成帧,其中包括一个报头,其中的字段包括 EtherType = IP(目标链路层使用该字段将帧的内容传送到适当的网络层)、源链路层地址和目标链路层地址(例如 MAC 地址)。
物理层
您示例中的物理层可能包括多个协议。在您的本地网络中,可能是某些以太网物理层,但也包括在您的家庭和 ISP 之间使用的物理层协议(如DSL )、在您的 ISP 的不同网络内以及用于到达目标 ISP 或公司的广域网中以及最后是目标主机。在广域网中,最常用的物理层是SDH 或 SONET
物理层使用不同的数字调制方法将比特转换为电信号或光脉冲,并通过物理介质传输这些信号,无论是铜线、微波还是光纤。物理层包括构建网络所需的每一件硬件,如连接器、电线、设备、天线、中继器等。
一个具体的例子
假设 Google Web 服务器的 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 服务器主机操作系统会将每个新的 TCP 连接转发到 10.0.0.1:443 到 Web 服务器应用程序。
您在主机的浏览器中输入 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 和属于该页面的所有资源。套接字 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 地址)的帧,并通过正确的网络接口发送它们.
默认网关(路由器)和沿途的所有其他路由器将重复此过程:
最终主机(运行 Google Web 服务器)将执行相同的步骤,但由于现在目标 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。