【译】- 网络是如何工作的?

1,091 阅读23分钟

学习链接

web.stanford.edu/class/msand…

Contents - 内容

  • Introduction - 介绍
  • Where to Begin? Internet Addresses - 从哪里开始?互联网地址
  • Protocol Stacks and Packets - 协议堆栈和数据包
  • Networking Infrastructure
  • Internet Infrastructure
  • The Internet Routing Hierarchy - 互联网路由层次结构
  • Domain Names and Address Resolution - 域名和地址解析
  • Internet Protocols Revisited - 重新审视互联网协议
  • Application Protocols: HTTP and the World Wide Web - 应用协议。HTTP和万维网
  • Application Protocols: SMTP and Electronic Mail - 应用协议。SMTP和电子邮件
  • Transmission Control Protocol - 传输控制协议
  • Internet Protocol - IP协议
  • Wrap Up - 总结
  • Resources - 资源
  • Bibliography - 书目

Introduction - 介绍

互联网是如何工作的?问得好! 互联网的增长已经成为爆炸性的,似乎不可能逃脱在电视上不断看到的www.com 的轰炸,在广播中听到的,在杂志中看到的。

由于互联网已经成为我们生活中的一个重要部分,因此需要很好地理解,以便最有效地使用这个新工具。

本白皮书解释了使互联网发挥作用的基本基础设施和技术。它并不深入,但涵盖了每个领域的足够内容,使人们对所涉及的概念有一个基本了解。

Where to Begin? Internet Addresses - 从哪里开始?互联网地址

因为互联网是一个由计算机组成的全球网络,每台连接到互联网的计算机必须有一个唯一的地址

互联网地址的形式是nnn.nnn.nnn.nnn,其中nnn必须是0-255的数字

这个地址被称为IP地址。(IP代表互联网协议;稍后会有更多介绍)。

下图显示了两台连接到互联网的计算机;你的计算机的IP地址为1.2.3.4,另一台计算机的IP地址为5.6.7.8。互联网被表示为介于两者之间的一个抽象对象。(随着本文的进展,图1中的互联网部分将被解释,并随着互联网细节的暴露而多次重新绘制)。

image.png

如果你通过互联网服务提供商(ISP)连接到互联网,通常会在拨号期间为你分配一个临时IP地址

如果你从一个局域网(LAN)连接到互联网,你的计算机可能有一个永久的IP地址,或者它可能从DHCP(动态主机配置协议)服务器获得一个临时的IP地址。

在任何情况下,如果你连接到互联网上,你的计算机就有一个唯一的IP地址

如果你使用的是微软的视窗系统或Unix系统,并能连接到互联网,有一个方便的程序可以查看互联网上的计算机是否活着。它被称为ping,可能是根据老式潜艇声纳系统发出的声音。如果你使用的是Unix系统,请进入一个命令提示符窗口。输入 ping www.yahoo.com。 ping程序将向指定的计算机发送一个 "ping"(实际上是一个ICMP(互联网控制消息协议)回波请求消息)。被ping的计算机将作出答复。ping程序将计算过期的时间,直到回复回来(如果它回来的话)。另外,如果你输入一个域名(即www.yahoo.com) 而不是IP地址,ping程序将解析域名并显示该计算机的IP地址。以后会有更多关于域名和地址解析的内容。

Protocol Stacks and Packets - 协议堆栈和数据包

因此,你的计算机已经连接到互联网,并有一个独特的地址。它如何与其他连接到互联网的计算机 "对话"?

这里举个例子。假设你的IP地址是1.2.3.4,你想向5.6.7.8的计算机发送一条信息。你想发送的信息是 "你好,计算机5.6.7.8!"。

显然,该信息必须通过连接你的计算机和互联网的任何一种线路来传输

比方说,你从家里拨入你的ISP,信息必须通过电话线传输。因此,信息必须从字母文本翻译成电子信号,在互联网上传输,然后再翻译成字母文本

这是如何完成的呢?通过使用一个协议栈。每台计算机都需要一个协议栈来在互联网上进行通信,它通常内置于计算机的操作系统中(例如,Windows、Unix等)。互联网上使用的协议栈被称为TCP/IP协议栈,因为使用了两个主要的通信协议。TCP/IP协议栈看起来像这样。

image.png

如果我们沿着 "Hello computer 5.6.7.8!"的信息从我们的计算机到IP地址为5.6.7.8的计算机的路径,就会发生这样的事情。

image.png

  1. 该信息将从你的计算机上的协议栈的顶部开始,然后向下运行
  2. 如果要发送的消息很长,消息经过的每个堆栈层都可能将消息分解成较小的数据块。这是因为在互联网(和大多数计算机网络)上发送的数据是以可管理的块状发送的。在互联网上,这些数据块被称为数据包
  3. 这些数据包将经过应用层,并继续到TCP层每个数据包都被分配一个端口号。端口将在后面解释,但只需说许多程序可能使用TCP/IP协议栈并发送消息。我们需要知道目的地计算机上的哪个程序需要接收信息,因为它将在一个特定的端口上监听
  4. 在通过TCP层后,数据包进入IP层。这就是每个数据包收到它的目标地址5.6.7.8的地方
  5. 现在,我们的信息包有一个端口号和一个IP地址,它们已经准备好在互联网上发送。硬件层负责将包含我们信息的字母文本的数据包变成电子信号,并通过电话线传输。
  6. 在电话线的另一端,你的ISP有一个直接连接到互联网。ISP的路由器检查每个数据包中的目标地址,并决定将其发送到何处。通常,数据包的下一站是另一个路由器。以后会有更多关于路由器和互联网基础设施的内容。
  7. 最终,这些数据包到达计算机5.6.7.8。在这里,数据包从目标计算机的TCP/IP堆栈的底部开始,向上运行。
  8. 当数据包向上通过堆栈时,发送计算机的堆栈添加的所有路由数据(如IP地址和端口号)被从数据包中剥离
  9. 当数据到达堆栈顶部时,数据包已被重新组装成原始形式,"你好,计算机5.6.7.8!"

Networking Infrastructure

所以,现在你知道数据包是如何在互联网上从一台计算机传到另一台计算机的。但这中间有什么呢?实际上是什么构成了互联网?让我们看看另一张图。

image.png

在这里,我们看到图1以更多的细节重新绘制。通过电话网络与互联网服务提供商的物理连接可能很容易猜到,但除此之外可能需要一些解释。

互联网服务供应商(ISP)为他们的拨号客户维护一个调制解调器池。这是由某种形式的计算机(通常是专用的)管理的,它控制从调制解调器池到主干线或专用线路由器的数据流。

这种设置可以被称为端口服务器,因为它 "服务 "于对网络的访问。计费和使用信息通常也在这里收集。

在你的数据包穿过电话网络和你的ISP的本地设备后,它们被路由到ISP的主干网或ISP购买带宽的主干网从这里开始,数据包通常会经过几个路由器和几个骨干网(😨)、专用线路和其他网络,直到找到它们的目的地,即地址为5.6.7.8的计算机。但是,如果我们知道我们的数据包在互联网上的确切路线,那不是很好吗?事实证明,有一种方法...

如果你使用微软视窗或Unix系统,并有互联网连接,这里有另一个方便的互联网程序。这个程序叫做traceroute,它显示你的数据包到一个特定的互联网目的地的路径。像ping一样,你必须在命令提示符下使用traceroute。在Windows中,使用tracert www.yahoo.com 。在Unix提示符下,输入traceroute www.yahoo.com 。像ping一样,你也可以输入IP地址而不是域名。Traceroute将打印出所有路由器、计算机和任何其他互联网实体的列表,你的数据包必须经过这些实体才能到达目的地

如果你使用traceroute,你会注意到你的数据包必须经过许多东西才能到达目的地。大多数有很长的名字,如sjc2-core1-h2-0-0.atlas.digex.net和fddi0-0.br4.SJC.globalcenter.net。这些是互联网路由器,决定将你的数据包发送到哪里。图3中显示了几个路由器,但只是少数。图3是为了显示一个简单的网络结构。互联网要复杂得多

Internet Infrastructure

互联网骨干网是由许多大型网络组成的,这些网络相互连接。这些大型网络被称为网络服务提供商NSP。一些大型NSP是UUNet、CerfNet、IBM、BBN Planet、SprintNet、PSINet以及其他。这些网络相互对等,交换数据包流量。每个NSP都需要连接到三个网络接入点或NAPs。在NAPs,数据包流量可以从一个NSP的骨干网跳到另一个NSP的骨干网。NSP还在城域网交换中心(MAE)进行互连。MAEs的作用与NAPs相同,但属于私人所有。NAPs是最初的互联网互连点。NAPs和MAEs都被称为互联网交换点或IXs。NSP也向小型网络出售带宽,如ISP和小型带宽供应商。下面是一张显示这种分层基础设施的图片。

image.png

这并不是互联网实际片断的真实表现。图4只是为了演示NSPs如何与对方和较小的ISPs互连。图4中没有显示任何物理网络组件,因为它们在图3中显示。这是因为单个NSP的骨干基础设施本身就是一张复杂的图纸。大多数NSP在其网站上公布了其网络基础设施的地图,可以很容易地找到。由于互联网的规模、复杂性和不断变化的结构,要画出一张实际的互联网地图几乎是不可能的

The Internet Routing Hierarchy - 互联网路由层次结构

那么,数据包是如何在互联网上找到它们的路径的呢?每台连接到互联网的计算机都知道其他计算机的位置吗?数据包是否只是被 "广播 "到互联网上的每台计算机?

前面两个问题的答案都是 "不"。没有计算机知道其他计算机的位置,数据包也不会被发送到每台计算机。用于将数据包送到目的地的信息包含在连接到互联网的每个路由器所保存的路由表中

路由器是数据包交换机。路由器通常连接在网络之间,在它们之间路由数据包。每个路由器都知道它的子网络和它们使用的IP地址。

路由器通常不知道它 "上面 "有哪些IP地址。请看下面的图5。连接主干网的黑盒子是路由器。顶部较大的NSP骨干网在NAP处连接。在它们下面有几个子网络,在它们下面还有更多的子网络。在底部是两个连接着计算机的局域网。

image.png

当一个数据包到达路由器时,路由器会检查发端计算机上的IP协议层所提供的IP地址

路由器检查它的路由表。如果发现含有该IP地址的网络,数据包就被发送到该网络。

如果没有找到含有该IP地址的网络,那么路由器将数据包按默认路由发送,通常是沿着骨干网的层次结构发送到下一个路由器。

希望下一个路由器会知道将数据包发送到哪里。如果它不知道,数据包再次向上路由,直到它到达NSP骨干网。

连接到NSP骨干网的路由器拥有最大的路由表,在这里,数据包将被路由到正确的骨干网,在那里,它将通过越来越小的网络开始其 "向下 "的旅程,直到找到它的目的地。

Domain Names and Address Resolution - 域名和地址解析

但是,如果你不知道你想连接的计算机的IP地址怎么办?如果你需要访问一个被称为www.anothercomputer.com 的网络服务器呢?你的网络浏览器如何知道这台电脑在互联网上的位置

所有这些问题的答案是域名服务或DNS

DNS是一个分布式数据库,它记录了互联网上的计算机名称和它们相应的IP地址

许多连接到互联网的计算机承载着DNS数据库的一部分和允许其他人访问它的软件。这些计算机被称为DNS服务器。没有DNS服务器包含整个数据库;它们只包含其中的一个子集。如果一个DNS服务器不包含另一台计算机请求的域名,DNS服务器会将请求的计算机重新定向到另一个DNS服务器

域名服务的结构是一个类似于IP路由层次结构的层次。要求进行名称解析的计算机将被重新定向到 "上层",直到找到能够解析请求中的域名的DNS服务器。

image.png

图6说明了该层次结构的一部分。在树的顶端是域名的根。一些较早的、较常见的域名在顶部附近。没有显示的是世界上众多的DNS服务器,它们构成了层次结构的其余部分。 当设置互联网连接时(例如,为局域网或Windows中的拨号网络),一个主要的和一个或多个次要的DNS服务器通常作为安装的一部分被指定。这样一来,任何需要域名解析的互联网应用都能正常运行。

例如,当你在网络浏览器中输入一个网页地址时,浏览器首先连接到主DNS服务器在获得你输入的域名的IP地址后,浏览器就会连接到目标计算机并请求你想要的网页。

如果你使用Windows 95/NT并访问互联网,你可以查看你的DNS服务器,甚至可以禁用它们。 如果你使用 "拨号网络"。 打开你的拨号网络窗口(可以在Windows资源管理器中的CD-ROM驱动器下和 "网上邻居 "上方找到)。在你的互联网连接上点击右键,然后点击属性。在连接属性窗口的底部,点击TCP/IP设置...按钮。 如果你有一个永久的互联网连接。 右键单击 "网上邻居 "并单击 "属性"。点击TCP/IP属性。选择顶部的DNS配置标签。** 你现在应该看到的是你的DNS服务器的IP地址**。在这里,你可以禁用DNS或将你的DNS服务器设置为0.0.0.0(先写下你的DNS服务器的IP地址。你可能还需要重新启动Windows)。现在在你的网络浏览器中输入一个地址。浏览器将无法解析该域名,你可能会收到一个讨厌的对话框,解释说找不到DNS服务器。但是,如果你输入相应的IP地址而不是域名,浏览器将能够检索到所需的网页。(在禁用DNS之前使用ping来获得IP地址。)其他微软操作系统也是如此。

Internet Protocols Revisited - 重新审视互联网协议

正如前面关于协议栈的部分所暗示的那样,人们可能会猜想,在互联网上有许多协议被使用。这是真的;有许多通信协议需要互联网来运作。这些协议包括TCP和IP协议、路由协议、介质访问控制协议、应用级协议等。以下各节描述了互联网上一些比较重要和常用的协议。首先讨论高层协议,其次是低层协议

Application Protocols: HTTP and the World Wide Web - 应用协议。HTTP和万维网

互联网上最常用的服务之一是万维网(WWW)。

使网络工作的应用协议是超文本传输协议或HTTP。不要将其与超文本标记语言(HTML)混淆。HTML是用于编写网页的语言。HTTP是网络浏览器和网络服务器用来在互联网上相互通信的协议。

它是一个应用层面的协议,因为它位于协议栈中的TCP层之上被特定的应用程序用来相互交谈。在这种情况下,这些应用程序是网络浏览器和网络服务器。

HTTP是一个基于文本的无连接协议。客户端(网络浏览器)向网络服务器发送请求,以获取网页和图像等网络元素。

在服务器为请求提供服务后,客户端和服务器之间在互联网上的连接被断开。每次请求都必须建立一个新的连接。大多数协议是面向连接的。这意味着相互通信的两台计算机在互联网上保持连接开放。然而,HTTP不是这样。在客户端提出HTTP请求之前,必须与服务器建立一个新的连接

当你在网络浏览器中输入一个URL时,就会发生这样的情况。

  1. 如果URL包含一个域名,浏览器首先连接到一个域名服务器,并检索网络服务器的相应IP地址
  2. 网络浏览器连接到网络服务器,并发送HTTP请求(通过协议栈)以获取所需的网页
  3. 网络服务器收到请求并检查所需的页面。如果该页面存在,网络服务器会将其发送如果服务器找不到请求的页面,它将发送一个HTTP 404错误信息。(404的意思是 "未找到页面",任何浏览过网络的人都可能知道。)
  4. 网络浏览器接收到该页面的回传,并关闭连接
  5. 然后,浏览器解析页面,寻找它所需要的其他页面元素来完成网页。这些元素通常包括图像、小应用程序等
  6. 对于每一个需要的元素,浏览器为每个元素向服务器发出额外的连接和HTTP请求
  7. 当浏览器加载完所有图像、小程序等后,页面将在浏览器窗口中完全加载

Telnet是互联网上使用的一种远程终端服务。它的使用最近有所减少,但它是研究互联网的一个非常有用的工具。在Windows中找到默认的telnet程序。它可能位于Windows目录中,名为telnet.exe。打开后,拉下终端菜单,选择首选项。在偏好窗口中,选中本地回声。(这是为了让你在输入HTTP请求时能看到它。)现在拉下连接菜单,选择远程系统。在主机名称中输入www.google.com在端口中输入80。(网络服务器通常默认听80端口。)按连接。现在输入 GET / HTTP/1.0 并按两次回车键这是一个简单的HTTP请求,要求网络服务器提供它的根页面。你应该看到一个网页闪过,然后弹出一个对话框,告诉你连接失败了。如果你想保存检索到的网页,在Telnet程序中打开登录功能。然后你可以浏览该网页,并看到用于编写该网页的HTML。

大多数互联网协议是由被称为Request For Comments或RFCs的互联网文件规定的。RFCs可以在互联网上的几个地方找到。请参阅下面的资源部分,了解适当的URL。HTTP 1.0版本由RFC 1945规定

Application Protocols: SMTP and Electronic Mail - 应用协议。SMTP和电子邮件

另一个常用的互联网服务是电子邮件。电子邮件使用一种称为 "简单邮件传输协议 "或SMTP的应用级协议。SMTP也是一个基于文本的协议,但与HTTP不同,SMTP是面向连接的。SMTP也比HTTP更复杂。与HTTP相比,SMTP有更多的命令和注意事项

当你打开你的邮件客户端阅读你的电子邮件时,通常会发生这样的情况。

  1. 邮件客户端(Netscape Mail、Lotus Notes、Microsoft Outlook等)与它的默认邮件服务器建立连接。邮件服务器的IP地址或域名通常是在安装邮件客户端时设置的。
  2. 邮件服务器将始终传送第一条信息来识别自己
  3. 客户端将发送一个SMTP HELO命令,服务器将以250 OK消息回应。
  4. 根据客户是否在检查邮件、发送邮件等,适当的SMTP命令将被发送到服务器,服务器将作出相应的反应。
  5. 这个请求/响应事务将持续到客户端发送SMTP QUIT命令。然后,服务器将说再见,连接将被关闭。

一个SMTP客户端和SMTP服务器之间的简单 "对话 "如下所示。R:表示由服务器(接收方)发送的信息,S:表示由客户端(发送方)发送的信息。

image.png

这个SMTP事务取自RFC 821,它规定了SMTP。

Transmission Control Protocol - 传输控制协议

在协议栈中的应用层之下是TCP层。当应用程序打开与互联网上另一台计算机的连接时,它们发送的信息(使用特定的应用层协议)会沿着协议栈传递到TCP层

TCP负责将应用协议路由到目的地计算机上的正确应用。为了实现这一目标,需要使用端口号端口可以被认为是每台计算机上独立的通道

例如,你可以一边浏览网页,一边阅读电子邮件。这是因为这两个应用程序(网络浏览器和邮件客户端)使用不同的端口号。

当一个数据包到达一台计算机并在协议栈上运行时,TCP层根据端口号决定哪个应用程序接收该数据包

TCP是这样工作的。

  • 当TCP层收到来自上面的应用层协议数据时,它将其分割成可管理的 "块"然后在每个 "块 "中添加一个包含特定TCP信息的TCP头。TCP头中包含的信息包括数据需要被发送到的应用程序的端口号
  • 当TCP层收到来自它下面的IP层的数据包时,TCP层从数据包中剥离TCP头数据,必要时进行一些数据重建,然后使用从TCP头中获取的端口号将数据发送到正确的应用程序

这就是TCP如何将通过协议栈移动的数据路由到正确的应用程序。

TCP不是一个文本协议。TCP是一种面向连接的、可靠的、字节流服务。面向连接的意思是,使用TCP的两个应用程序在交换数据之前必须首先建立一个连接。TCP是可靠的,因为对于每一个收到的数据包,都会向发送方发送一个确认函,以确认发送情况。TCP还在它的头中包括一个校验和,用于检查收到的数据的错误。TCP的头看起来像这样。

image.png

请注意,在TCP头中没有IP地址的位置。这是因为TCP对IP地址一无所知。TCP的工作是在应用程序之间可靠地获取应用程序级别的数据。从计算机到计算机获取数据的任务是IP的工作

image.png

Internet Protocol - IP协议

与TCP不同,IP是一个不可靠的、无连接的协议IP并不关心一个数据包是否到达目的地。IP也不知道连接和端口号。IP的工作是发送和路由数据包到其他计算机。IP数据包是独立的实体,可能不按顺序到达,也可能根本没有。TCP的工作是确保数据包按正确的顺序到达。IP与TCP的唯一共同点是它接收数据的方式,并将它自己的IP头信息添加到TCP数据中。IP头看起来像这样。

image.png

上面我们看到IP头中发送和接收计算机的IP地址。下面是一个数据包通过应用层、TCP层和IP层后的样子。应用层的数据在TCP层被分割,加入TCP头数据包继续到IP层,加入IP头,然后数据包在互联网上传输。

image.png

Wrap up - 总结

现在你知道互联网是如何运作的。但这种方式还能保持多久?

目前在互联网上使用的IP版本(版本4)只允许232个地址。最终,将不会有任何免费的IP地址留下。惊讶吗?

别担心。IP版本6现在正由一个研究机构和公司组成的财团在研究骨干网上进行测试。

在那之后呢?谁知道呢。自从互联网作为国防部的一个研究项目诞生以来,它已经走过了漫长的道路。

没有人真正知道互联网将成为什么。然而,有一件事是肯定的。互联网将以前所未有的方式将世界团结起来。信息时代正在大步前进,我很高兴能成为其中的一员。


2002年的文章,很有收获!

  • 本文主要内容是协议栈和数据包
  • 协议栈指的是发送数据,会从上到下经过不同层的协议,接受数据,从下到上经过不同协议。
  • 数据包指的是经过每一层协议,都会对数据进行处理,最终抵达目标主机。
  • HTTP(80) - 应用层协议 - 无连接、每次都必须建立连接 - 用于发送请求数据
  • SMTP(25)- 应用层协议 - 连接 - 简单的邮件传输协议
  • TCP - 传输层协议 - 连接、可靠、字节流 - 确定端口,将数据拆分,发送时添加头部、接收时剥离头部信息
  • IP - 网络层协议 - 无连接、不可靠 - 用于查找目标主机
  • 还有一些面试题。。输入url会发生什么?如何发送数据到目标主机?TCP工作内容。。。

春色三分,二分尘土,一分流水。——苏轼《水龙吟》