通过互联网流程了解TCP / IP分层?

时间:2017-02-25 12:34:57

标签: networking tcp tcp-ip

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

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

  3. Wiki OSI_model

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

    我的不足之处: -

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

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

    TCP之类的协议(与UDP相比)也将确保数据包以正确的顺序发送,并期望来自接收器的ack。如果确认失败,则重新尝试。太可靠了因此,OS是这里的主要角色。

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

    数据链接层: - 此层将请求映射到正确的计算机,即MAC地址。所以我认为它将驻留在互联网服务提供商的某个地方。其实 我不确定这一层的角色以及谁是主要角色?

    物理层: - 此层处理电磁波等物理数据。像光纤一样,有线电视可以成为这里的主要演员。虽然这被描述为最后一层 关于TCP / IP分层,但我认为它的角色是从传输层开始的。

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

1 个答案:

答案 0 :(得分:3)

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

应用层

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

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

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

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

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

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

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

传输层

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

传输层用于在互联网中某些特定主机中运行的特定应用程序之间发送数据(在广播的情况下为更多但在此不适用)。

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

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

网络层

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

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

网络层的职责与传输层不同,其主要目的是通过路由器在互联网之间的主机之间路由数据包,这是互联网络的复杂网络,使用不同的链路层技术并由不同的组织管理。网络层隐藏较低级别的网络详细信息,并在主机与传输层之间提供数据包传送服务。

网络层数据包,在我们的例子中是IP数据报,包括一个包含源和目标IP地址的标头,用于将数据包路由到Internet中的正确主机。该层的一部分是路由器,专用网络设备,它们互连不同的物理网络,并使用目标地址和使用路由交换协议(如OSPFBGP

动态构建的路由表)在它们之间路由数据包。

IP将TCP段封装到IP数据报中,包括包含protocol = 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的某些网络管理员设置DNS服务器,并将www.google.com的条目映射到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服务器应用程序。 / p>

您可以在浏览器中使用IP地址= 20.0.0.1在主机上输入www.google.com。

您的浏览器使用套接字API,将使用UDP向目标IP = 30.0.0.1和目标端口= 53发送DNS查询。侦听该主机和端口的DNS服务器将接收查询并将其转发给其他人直到谷歌DNS服务器(域名google.com的权限)与DNS服务器联系并响应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发送请求index.html的HTTP请求以及属于该页面的所有资源。套接字API将应用程序数据发送到TCP层。

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

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

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

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

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

默认网关(路由器)和沿途的所有其他路由器将重复此过程:

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

最终主机(运行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。