© 2002 Rus Shuler @ Pomeroy IT Solutions, all rights reserved
介绍
互联网是如何工作的?这是个好问题!互联网已经开始爆炸性的增长,我们每个人似乎都不可能逃脱www.com
的轰炸,你会经常在电视上、收音机里和杂志上看到。由于互联网已经成为我们生活中很大的一部分,要最有效地使用这一新工具,需要对其有很好的理解。
本文解释了使 Internet 工作的底层基础设施和技术。它并没有很深入,但涵盖了足够的每个领域,以便对所涉及的概念有一个基本的了解。
从哪里开始?互联网地址
因为 Internet
是一个全球计算机网络,连接到 Internet
的每台计算机都必须有一个唯一的地址。 Internet
地址的格式为 nnn.nnn.nnn.nnn
,其中 nnn
必须是 0 到 255 之间的数字。此地址称为 IP 地址
。 (IP
代表 Internet
协议)
下图说明了两台连接到 Internet
的计算机;您的 IP
地址为 1.2.3.4
的计算机和另一台 IP
地址为 5.6.7.8
的计算机。互联网被表示为介于两者之间的抽象对象。
如果您通过 Internet
服务提供商 (ISP
) 连接到 Internet
,通常会在拨入会话期间为您分配一个 临时 IP 地址 。如果您从局域网 (LAN
) 连接到 Internet
,您的计算机可能有一个永久 IP 地址,或者它可能从 DHCP
(动态主机配置协议)服务器获得一个临时地址。在任何情况下,如果您连接到 Internet
,您的计算机就有一个唯一的 IP 地址。
如果您使用的是 Microsoft Windows
或 linux
并且连接到 Internet
,那么有一个方便的程序可以查看 Internet
上的计算机是否 ”在线“ 。它被称为 ping
,名字可能来自旧潜艇声纳系统发出的声音。启动命令提,键入 ping www.yahoo.com
。 ping
程序将向指定的计算机发送 “ping”(实际上是 ICMP(Internet 控制消息协议)回显请求消息)。被 ping
的计算机将回复。 ping
程序将计算过期时间,直到回复返回(如果确实如此)。此外,如果您输入域名(即 www.yahoo.com
)而不是 IP
地址,ping
将解析域名并显示计算机的 IP
地址。稍后将详细介绍域名和地址解析。
协议栈和数据包
因此,您的计算机已连接到 Internet
并具有唯一的ip地址。它如何与连接到 Internet
的其他计算机“对话”?此处应提供一个示例:
假设您的 IP
地址是 1.2.3.4
,并且您想向计算机 5.6.7.8
发送消息。您要发送的消息是“Hello computer 5.6.7.8!”。显然,必须通过将计算机连接到 Internet
的线路来传输消息。假设您已从家里拨入您的 ISP
,消息必须通过电话线传输。因此,消息从字母文本翻译成电子信号,通过 Internet
传输,然后再翻译回字母文本。这是如何实现的?通过使用协议栈
。每台计算机都需要一台在 Internet
上进行通信,并且它通常内置于计算机的操作系统(即 Windows
、Unix
等)中。由于使用了两种主要的通信协议,因此 Internet
上使用的协议栈被称为 TCP/IP
协议栈。 TCP/IP
堆栈如下所示:
协议层 | 解释 |
---|---|
应用程序协议 | 特定于应用程序(如 WWW、电子邮件、FTP 等)的协议层协议 |
传输控制协议层 | TCP 使用端口号将数据包定向到计算机上的特定应用程序。 |
互联网协议层 | IP 使用 IP 地址将数据包定向到特定计算机。 |
硬件层 | 将二进制数据包数据转换为网络信号并返回。(例如以太网网卡、电话线调制解调器等) |
如果我们要按照消息 “Hello computer 5.6.7.8!” 从我们的计算机传输到 IP 地址为 5.6.7.8 的计算机的路径,则会发生如下情况:
- 该消息将从计算机上协议栈的顶部开始,然后向下工作。
- 如果要发送的消息很长,则消息通过的每个堆栈层可能会将消息分解为较小的数据块。这是因为通过 Internet(以及大多数计算机网络)发送的数据是以可管理的块形式发送的。在互联网上,这些数据块被称为
数据包
。 - 数据包将通过应用层并继续到 TCP 层。每个数据包都分配有一个端口号。稍后将解释端口,但足以说明许多程序可能正在使用 TCP/IP 堆栈并发送消息。我们需要知道目标计算机上的哪个程序需要接收消息,因为它将侦听特定
端口
。 - 通过
TCP
层后,数据包将进入IP
层。这是每个数据包接收其目标地址 (5.6.7.8) 的位置。 - 现在,我们的消息数据包具有
端口号
和IP 地址
,它们已准备好通过Internet
发送。硬件层负责将包含消息字母文本的数据包转换为电子信号,并通过电话线传输它们。 - 在电话线的另一端,您的
ISP
直接连接到互联网。ISP
路由器检查每个数据包中的目标地址,并确定将其发送到何处。通常,数据包的下一站是另一个路由器。 - 最终,数据包到达计算机 5.6.7.8。在这里,数据包从目标计算机的
TCP/IP
堆栈的底部开始,向上工作。 - 当数据包向上通过堆栈时,发送计算机堆栈添加的所有路由数据(如 IP 地址和端口号)将从数据包中剥离。
- 当数据到达堆栈顶部时,数据包已重新组装成其原始形式,“您好计算机5.6.7.8!
网络基础设施
所以现在您知道数据包如何通过互联网从一台计算机传输到另一台计算机。但两者之间有什么呢?互联网到底是什么?让我们看另一个图表:
ISP
为其拨入客户维护调制解调器池。这由某种形式的计算机(通常是专用计算机)管理,该计算机控制从调制解调器池到骨干网或专用线路路由器的数据流。此设置可以称为端口服务器,因为它“服务”对网络的访问。通常也在此处收集计费和使用信息。
数据包遍历电话网络和 ISP
的本地设备后,它们将路由到 ISP
的主干网或 ISP
从中购买带宽的主干网。从这里开始,数据包通常会通过多个路由器和多个骨干网,专用线路和其他网络,直到找到目的地,地址为5.6.7.8的计算机。但是,如果我们知道数据包在互联网上的确切路线,那不是很好吗?事实证明,有一种方法...
如果您使用的是 Microsoft Windows
或 linux
,并且连接到Internet
,那么这是另一个方便的Internet
程序。这个称为traceroute
,它显示了您的数据包到给定Internet
目的地的路径。与 ping
一样,必须从命令提示符处使用跟踪路由。在 Windows
中,使用 tracert www.yahoo.com
。在 Unix 提示符下,键入 traceroute www.yahoo.com
。与ping
一样,您也可以输入IP地址而不是域名。Traceroute
将打印出数据包必须经过才能到达目的地的所有路由器、计算机和任何其他 Internet
实体的列表。
如果使用跟踪路由,您会注意到数据包必须经过许多操作才能到达目的地。大多数都有很长的名字,如 sjc2-core1-h2-0-0.atlas.digex.net
和 fddi0-0.br4.SJC.globalcenter.net
。这些是决定将数据包发送到何处的互联网路由器。
互联网基础设施
互联网骨干网由许多相互互连的大型网络组成。这些大型网络称为网络服务提供商( Network Service Providers )
又称 NSP
。一些大型NSP
是UUNet
,CerfNet
,IBM
,BBN Planet
,SprintNet
,PSINet
以及其他。这些网络相互对等以交换数据包流量。每个 NSP
都需要连接到三个网络接入点(Network Access Points)
又称NAP
。在NAP
上,数据包流量可能从一个NSP
的骨干网跳转到另一个NSP
的骨干网。NSP
还在Metropolitan Area Exchanges
又称MAE
互连。MAE
与NAP
具有相同的目的,但为私人所有。NAP
是最初的互联网互连点。NAP
和 MAE
都称为互联网交换点
又称 IX
。NSP
还向较小的网络出售带宽,例如ISP
和较小的带宽提供商。下图显示了此分层基础结构。
当数据包到达路由器时,路由器会检查原始计算机上的 IP
协议层放在那里的 IP
地址。路由器检查其路由表。如果找到包含 IP
地址的网络,则将数据包发送到该网络。如果找不到包含 IP
地址的网络,则路由器会通过默认路由发送数据包,通常沿主干层次结构向上发送到下一个路由器。希望下一个路由器会知道将数据包发送到哪里。如果没有,则再次向上路由数据包,直到它到达 NSP
主干网。连接到NSP
骨干网的路由器拥有最大的路由表,在这里,数据包将被路由到正确的主干网,在那里它将通过越来越小的网络开始“向下”的旅程,直到找到它的目的地。
域名和地址解析
但是,如果您不知道要连接到的计算机的IP地址怎么办?如果您需要访问称为 www.anothercomputer.com
的 Web 服务器,该怎么办?您的网络浏览器如何知道这台计算机在互联网上的什么位置?所有这些问题的答案是域名服务
或DNS
。DNS是一个分布式数据库,它跟踪计算机的名称及其在互联网上的相应IP地址。
许多连接到 Internet
的计算机都托管 DNS
数据库的一部分以及允许其他人访问它的软件。这些计算机称为 DNS 服务器
。没有DNS服务器
包含整个数据库;它们只包含它的一个子集。如果 DNS 服务器不包含另一台计算机请求的域名,则 DNS 服务器会将请求计算机重定向到另一台 DNS 服务器。
域名服务的结构类似于 IP
路由层次结构。请求名称解析的计算机将被重新定向到层次结构的“上移”,直到找到可以解析请求中的域名的 DNS
服务器。图 6 说明了层次结构的一部分。树的顶部是域根。一些较旧的,更常见的域在顶部附近看到。没有显示的是世界各地构成层次结构其余部分的众多DNS服务器。
当设置互联网连接时(例如,对于Windows中的LAN或拨号网络),通常将一个主DNS服务器和一个或多个辅助DNS服务器指定为安装的一部分。这样,任何需要域名解析的互联网应用程序都能够正常运行。例如,当您在 Web 浏览器中输入 Web 地址时,浏览器首先连接到主 DNS 服务器。获取您输入的域名的IP地址后,浏览器将连接到目标计算机并请求所需的网页。
如果您使用的是Windows 95 / NT并访问Internet,则可以查看您的DNS服务器,甚至禁用它们。
如果使用拨号网络: 打开“拨号网络”窗口(可在 Windows 资源管理器中的 CD-ROM 驱动器下和“网上邻居”上方找到该窗口)。右键单击您的互联网连接,然后单击属性。在连接属性窗口底部附近,按 TCP/IP 设置...按钮。
如果您有永久连接到互联网: 右键单击“网上邻居”,然后单击“属性”。单击“TCP/IP 属性”。选择顶部的“DNS 配置”选项卡。
您现在应该查看DNS服务器的IP地址。在这里,您可以禁用DNS或将DNS服务器设置为0.0.0.0。(首先记下 DNS 服务器的 IP 地址。您可能还必须重新启动Windows。现在,在 Web 浏览器中输入地址。浏览器将无法解析域名,您可能会看到一个令人讨厌的对话框,说明找不到DNS服务器。但是,如果您输入相应的IP地址而不是域名,浏览器将能够检索所需的网页。(在禁用 DNS 之前,使用 ping 获取 IP 地址。其他微软操作系统也类似。 :::
重新审视互联网协议
正如前面关于协议栈的部分所暗示的那样,人们可能会推测互联网上使用了许多协议。这是事实。互联网运行需要许多通信协议。这些协议包括TCP
和IP
协议,路由协议
,中型访问控制协议
,应用程序级协议
等。以下各节介绍互联网上一些更重要和最常用的协议。首先讨论较高级别的协议,然后讨论较低级别的协议。
应用协议:HTTP和万维网
互联网上最常用的服务之一是万维网(WWW
)。使Web工作的应用程序协议是超文本传输协议
或HTTP
。不要将其与超文本标记语言 (HTML
) 混淆。HTML
是用于编写网页的语言,而HTTP
是Web浏览器和Web服务器用来通过Internet
相互通信的协议。它是一种应用程序级协议,因为它位于协议栈中TCP层的顶部,并且被特定应用程序用于相互通信。在这种情况下,应用程序是Web浏览器和Web服务器。
HTTP
是一种基于文本的无连接协议。客户端(Web 浏览器)向 Web 服务器发送 Web 元素(如网页和图像)的请求。在请求由服务器提供服务后,Internet
上的客户端和服务器之间的连接将断开连接。必须为每个请求建立新的连接。大多数协议都是面向连接的。这意味着两台计算机相互通信,使连接通过 Interne
t 保持打开状态。但是,HTTP
不会在客户端发出 HTTP
请求之前,必须与服务器建立新连接。
当您在 Web 浏览器中键入 URL 时,将发生以下情况:
- 如果
URL
包含域名,浏览器首先连接到域名服务器,并检索 Web 服务器的相应IP
地址。 - Web浏览器连接到Web服务器并发送所需网页的
HTTP
请求(通过协议栈)。 - Web 服务器接收请求并检查所需的页面。如果该页面存在,Web 服务器将发送该页面。如果服务器找不到请求的页面,它将发送
HTTP 404
错误消息。(404的意思是“页面未找到”,因为任何在网上冲浪的人都可能知道。 Web
浏览器接收回页面并关闭连接。- 然后,浏览器解析页面并查找完成网页所需的其他页面元素。这些通常包括图像,小程序等。
- 对于所需的每个元素,浏览器会为每个元素向服务器发出其他连接和
HTTP
请求。 - 当浏览器完成加载所有图像,小程序等时,页面将完全加载到浏览器窗口中。
Telnet
是互联网上使用的远程终端服务。它的使用最近有所下降,但它是研究互联网的非常有用的工具。在 Windows 中查找默认的 telnet 程序。它可能位于名为 telnet.exe
的 Windows 目录中。打开后,下拉“终端”菜单,然后选择“首选项”。在首选项窗口中,选中本地回显。(这样,您就可以在键入 HTTP 请求时看到它。现在下拉“连接”菜单,然后选择“远程系统”。输入 www.google.com
作为主机名,输入 80
作为端口。(默认情况下,Web 服务器通常侦听端口 80
。按连接。现在键入
GET / HTTP/1.0
,然后按两次 Enter
键。这是对 Web 服务器的根页面的简单 HTTP 请求。您应该看到一个网页闪过,然后应该弹出一个对话框,告诉您连接已丢失。如果要保存检索到的页面,请在 Telnet
程序中打开日志记录。然后,您可以浏览网页并查看用于编写它的HTML
。
大多数互联网协议由称为 RFC
的互联网文档指定。RFC
可以在互联网上的多个位置找到。
应用协议:SMTP 和电子邮件
另一个常用的互联网服务是电子邮件。电子邮件使用称为简单邮件传输协议(Simple Mail Transfer Protocol)又称 SMTP
的应用程序级协议。SMTP
也是一种基于文本的协议,但与HTTP
不同,SMTP
是面向连接的。SMTP
也比HTTP
更复杂。SMTP
中的命令和注意事项比 HTTP
中的命令和注意事项多得多。
当您打开邮件客户端以阅读电子邮件时,通常会发生这种情况:
- 邮件客户端(Netscape Mail,Lotus Notes,Microsoft Outlook等)打开与其默认邮件服务器的连接。邮件服务器的
IP
地址或域名通常在安装邮件客户端时设置。 - 邮件服务器将始终传输第一条消息以标识自身。
- 客户端将发送
SMTP HELO
命令,服务器将使用250 OK
消息响应该命令。 - 根据客户端是否正在检查邮件、发送邮件等,相应的
SMTP
命令将发送到服务器,服务器将做出相应的响应。 - 此请求/响应事务将继续,直到客户端发送
SMTP QUIT
命令。然后,服务器将说再见,连接将关闭。
SMTP
客户端和 SMTP
服务器之间的简单“对话”如下所示。
R:表示服务器(接收方)发送的消息,
S:表示客户端(发送方)发送的消息。
This SMTP example shows mail sent by Smith at host USC-ISIF, to
Jones, Green, and Brown at host BBN-UNIX. Here we assume that
host USC-ISIF contacts host BBN-UNIX directly. The mail is
accepted for Jones and Brown. Green does not have a mailbox at
host BBN-UNIX.
-------------------------------------------------------------
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
S: MAIL FROM:<Smith@USC-ISIF.ARPA>
R: 250 OK
S: RCPT TO:<Jones@BBN-UNIX.ARPA>
R: 250 OK
S: RCPT TO:<Green@BBN-UNIX.ARPA>
R: 550 No such user here
S: RCPT TO:<Brown@BBN-UNIX.ARPA>
R: 250 OK
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Blah blah blah...
S: ...etc. etc. etc.
S: .
R: 250 OK
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
此 SMTP 事务取自 RFC 821
,它指定 SMTP。
传输控制协议
Transmission Control Protocol(TCP)
协议栈中的应用层下是 TCP
层。当应用程序打开与 Internet
上另一台计算机的连接时,它们发送的消息(使用特定的应用程序层协议)将沿着堆栈传递到 TCP
层。TCP 负责将应用程序协议路由到目标计算机上的正确应用程序。 为此,请使用端口号。可以将端口视为每台计算机上的单独通道。例如,您可以在阅读电子邮件时上网冲浪。这是因为这两个应用程序(Web 浏览器和邮件客户端)使用不同的端口号。当数据包到达计算机并在协议栈中向上移动时,TCP
层会根据端口号
决定哪个应用程序接收数据包。
TCP的工作原理如下:
- 当
TCP
层从上面接收到应用层协议数据时,它会将其分割成可管理的“块”,然后将具有特定TCP
信息的TCP标头
添加到每个“块”中。TCP 标头
中包含的信息包括需要将数据发送到的应用程序的端口号。 - 当
TCP
层从其下方的IP
层接收到数据包时,TCP
层会从数据包中剥离TCP
标头数据,根据需要执行一些数据重建,然后使用从TCP
标头获取的端口号将数据发送到正确的应用程序。
这就是 TCP
如何将通过协议栈移动的数据路由到正确的应用程序。
TCP
不是文本协议。TCP 是一种面向连接的可靠字节流服务。面向连接意味着使用 TCP
的两个应用程序在交换数据之前必须首先建立连接。TCP
是可靠的,因为对于收到的每个数据包,都会向发送方发送确认以确认传递。TCP
还在其标头中包含校验和,用于对接收的数据进行错误检查。TCP
标头如下所示:
请注意,TCP
标头中没有 IP
地址的位置。这是因为TCP
对IP
地址一无所知。TCP
的工作是可靠地从一个应用程序到另一个应用程序获取应用程序级数据。从一台计算机到另一台计算机获取数据的任务是IP
的工作。
下面列出的是一些更常用的互联网服务的端口号。 FTP | 20/21 :---:|:---: Telnet| 23 SMTP |25 HTTP |80 Quake III Arena |27960
Internet Protocol 协议
与 TCP
不同,IP是一种不可靠的无连接协议。IP
不关心数据包是否到达其目的地。IP
也不知道连接和端口号。IP 将数据包发送和路由到其他计算机。IP 数据包是独立的实体,可能无序到达或根本没有到达。TCP
的工作是确保数据包到达并按正确的顺序。IP
与TCP
的唯一共同点是它接收数据并将自己的IP标头信息添加到TCP数据中的方式。IP 标头如下所示:
在上面,我们在IP标头
中看到了发送和接收计算机的IP地址
。下面是数据包通过应用层
、TCP 层
和 IP 层
后的外观。应用层数据在TCP层进行分段,添加TCP报头,继续向IP层,添加IP报头,然后通过Internet传输数据包。
Wrap Up
Now you know how the Internet works. But how long will it stay this way? The version of IP currently used on the Internet (version 4) only allows 232 addresses. Eventually there won't be any free IP addresses left. Surprised? Don't worry. IP version 6 is being tested right now on a research backbone by a consortium of research institutions and corporations. And after that? Who knows. The Internet has come a long way since it's inception as a Defense Department research project. No one really knows what the Internet will become. One thing is sure, however. The Internet will unite the world like no other mechanism ever has. The Information Age is in full stride and I am glad to be a part of it.
—— Rus Shuler, 1998 —— Updates made 2002
名词:
- ISP:
Internet
服务提供商 - LAN:局域网
- DHCP:动态主机配置协议
- ICMP:Internet 控制消息协议
- NSP:网络服务提供商,Network Service Providers
- NAP:网络接入点,Network Access Points
- MAE:大都市区交易所,Metropolitan Area Exchanges
NAP
和MAE
都称为互联网交换点
又称IX
扩展阅读: