# Internet 地址
连接到 Internet 的每台计算机都必须具有唯一的地址。Internet 地址的格式为 nnn.nnn.nnn.nnn,其中 nnn 必须是 0 - 255 之间的数字。这 地址称为 IP 地址。
下图显示了连接到 Internet 的两台计算机;您的 IP 地址为 1.2.3.4 的计算机和另一台 IP 地址为 IP 的计算机 5.6.7.8. 互联网被表示为介于两者之间的抽象对象。

两种不同的互联网连接方式以及它们如何分配 IP 地址:
- 通过互联网服务提供商(ISP)的连接:
当您通过 ISP 连接到互联网时,通常在拨号或建立连接的过程中,ISP 会分配给您一个临时的 IP 地址。这个 IP 地址仅在您的会话期间有效,一旦您断开连接,这个 IP 地址可能会被回收并分配给其他用户。 - 局域网(LAN)连接到互联网:
如果您是通过局域网(例如公司或学校的网络)连接到互联网,您的计算机可能会有一个固定的 IP 地址,也就是永久的 IP 地址。但是,更常见的情况是,计算机会从 DHCP 服务器获取一个临时的 IP 地址。DHCP(动态主机配置协议)是一种网络管理协议,它允许网络管理员自动分配 IP 地址和其他网络配置给网络中的设备。
无论您通过哪种方式连接到互联网,只要您的设备已经连接上,它就会有一个唯一的 IP 地址。这个 IP 地址是互联网上用来识别和定位您的设备的唯一标识符。这样,数据包就可以准确地发送到正确的目的地。
# Ping
进入命令提示符。输入 ping www.yahoo.com。Ping 程序将向指定的计算机发送一个 “ping”(实际上是一个 ICMP(互联网控制消息协议)回显请求消息)。被 ping 的计算机将以回复响应。Ping 程序将计算回复回来之前经过的时间(如果有回复的话)。此外,如果你输入一个域名(即 www.yahoo.com)而不是 IP 地址,Ping 将解析域名并显示计算机的 IP 地址。

# 协议栈和数据包
假设你的 IP 地址是 1.2.3.4,你想向 IP 地址为 5.6.7.8 的电脑发送一条消息。你想发送的消息是 “你好,电脑 5.6.7.8!”。显然,这条消息必须通过连接你的电脑到互联网的某种线路来传输。假设你从家里拨号连接到你的 ISP,那么这条消息必须通过电话线传输。因此,这条消息必须从字母文本转换为电子信号,通过互联网传输,然后再转换回字母文本。这是如何实现的呢?通过使用协议栈。每台电脑都需要一个协议栈来进行互联网通信,它通常内置在电脑的操作系统中(例如 Windows、Unix 等)。在互联网上使用的协议栈被称为 TCP/IP 协议栈,因为它使用了两个主要的通信协议。
应用层(Application Protocols Layer):
应用层是网络模型的最高层,它包含特定于应用程序的协议,如万维网(WWW)、电子邮件、文件传输协议(FTP)等。这些协议定义了应用程序如何通过网络进行通信和数据交换。传输层(Transmission Control Protocol Layer):
传输层负责确保数据的可靠传输。传输控制协议(TCP)使用端口号将数据包定向到计算机上的特定应用程序。端口号使得多个应用程序能够在同一台计算机上同时运行,而不会相互干扰。网络层(Internet Protocol Layer):
网络层负责将数据包从源头路由到目的地。互联网协议(IP)通过 IP 地址将数据包定向到特定的计算机。这一层处理数据包在整个网络中的路由和转发。物理层(Hardware Layer):
物理层是网络模型的最低层,它负责将二进制数据包转换为网络信号,以及将网络信号转换回二进制数据。物理层包括各种硬件设备,例如以太网网卡、电话线调制解调器等,它们负责在物理介质上传输数据。

消息会从你的电脑的协议栈顶部开始,然后向下工作。
如果待发送的消息很长,每一层协议栈在消息通过时都可能将消息分解成更小的数据块。这是因为通过互联网(以及大多数计算机网络)发送的数据都是以可管理的块来发送的。在互联网上,这些数据块被称为数据包。
数据包会经过应用层,继续到达传输层(TCP 层)。每个数据包都被分配一个端口号。我们需要知道目标计算机上的哪个程序需要接收消息,因为它将在特定的端口上监听。
通过 TCP 层后,数据包继续前往网络层(IP 层)。在这里,每个数据包接收到它的目的地地址,即 5.6.7.8。
现在,我们的消息数据包有了端口号和 IP 地址,它们已经准备好通过互联网发送。物理层负责将包含我们消息的字母文本的数据包转换为电子信号,并通过电话线传输它们。
在电话线的另一端,你的 ISP 有一个直接连接到互联网的路由器。ISP 的路由器检查每个数据包的目的地地址,并确定将其发送到哪里。通常,数据包的下一站是另一个路由器。
最终,数据包到达计算机 5.6.7.8。在这里,数据包从目标计算机的 TCP/IP 协议栈底部开始向上工作。
当数据包通过协议栈向上移动时,发送计算机的协议栈添加的所有路由数据(如 IP 地址和端口号)都被从数据包中剥离。
当数据到达协议栈的顶部时,数据包已经被重新组装成它们原来的形式,“你好,电脑 5.6.7.8!”
# 网络基础设施

ISP 维护着一个为拨号客户准备的调制解调器池。这是由某种计算机(通常是专用的)管理的,它控制着从调制解调器池到骨干网或专用线路路由器的数据流。这种设置可能被称为端口服务器,因为它提供了对网络的访问。计费和使用信息通常也在这里收集。
你的数据包穿过电话网络和 ISP 的本地设备后,它们会被路由到 ISP 的骨干网或 ISP 购买带宽的骨干网上。从这里,数据包通常会经过几个路由器,经过几个骨干网、专用线路和其他网络,直到找到它们的目的地,即地址为 5.6.7.8 的计算机。
# traceroute
跟踪路由(traceroute),它显示了你的数据包到达给定互联网目的地的路径。像 ping 一样,你必须从命令提示符使用跟踪路由。在 Windows 中,使用 tracert www.yahoo.com。在 Unix 提示符下,输入 traceroute www.yahoo.com。像 ping 一样,你也可以输入 IP 地址而不是域名。跟踪路由将打印出所有路由器、计算机以及数据包必须经过的任何其他互联网实体的列表。

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

# Internet 路由层次结构
没有一台计算机知道其他任何一台计算机在哪里, 数据包不会发送到每台计算机。用于将数据包送达目的地的信息包含在每个连接到互联网的路由器所维护的路由表中。
路由器是数据包交换机。每个路由器都知道它的子网络以及它们使用的 IP 地址。路由器通常不知道 “上面” 的 IP 地址是什么。
当一个数据包到达路由器时,路由器会检查由源计算机上的 IP 协议层放置的 IP 地址。路由器会检查它的路由表。如果找到了包含 IP 地址的网络,数据包就会被发送到那个网络。如果没有找到包含 IP 地址的网络,那么路由器会将数据包通过默认路由发送出去,通常是向上层骨干网络发送到下一个路由器。希望下一个路由器会知道将数据包发送到哪里。如果它不知道,数据包将再次向上路由,直到它到达一个 NSP 骨干网。连接到 NSP 骨干网的路由器拥有最大的路由表,在这里数据包将被路由到正确的骨干网,然后它将开始通过越来越小的网络向下行进,直到找到它的目的地。

# 域名和地址解析
但是,如果你不知道你想连接的计算机的 IP 地址怎么办?如果你需要访问一个被称为 www.anothercomputer.com 的 Web 服务器怎么办?你的 Web 浏览器是如何知道这台计算机在互联网上的哪个位置的?
所有这些问题的答案都是域名服务或 DNS。DNS 是一个分布式数据库,它跟踪互联网上计算机的名称及其相应的 IP 地址。
许多连接到互联网的计算机托管了 DNS 数据库的一部分以及允许其他人访问的软件。这些计算机被称为 DNS 服务器。没有一个 DNS 服务器包含整个数据库;它们只包含它的一个子集。如果一个 DNS 服务器不包含另一台计算机请求的域名,该 DNS 服务器会将请求计算机重定向到另一个 DNS 服务器。

域名服务(Domain Name Service, DNS)的结构类似于 IP 路由层级结构。请求名称解析的计算机将被重定向到层级的 “上方”,直到找到一个能够解析请求中域名的 DNS 服务器。上图展示了层级的一部分。在树的顶端是域名根。一些较老、较常见的域靠近顶端。没有显示出来的是世界各地构成层级其余部分的众多 DNS 服务器。
当设置互联网连接时(例如,在 Windows 中为局域网或拨号网络设置),通常在安装过程中指定一个主要的和一个或多个次要的 DNS 服务器。这样,任何需要域名解析的互联网应用程序都将能够正确运行。例如,当你在 Web 浏览器中输入一个网址时,浏览器首先连接到你的主要 DNS 服务器。在获得你输入的域名的 IP 地址后,浏览器然后连接到目标计算机并请求你想要访问的网页。
# 重新审视互联网协议
# 应用程序协议:HTTP 和万维网
互联网上最常用的服务之一是万维网(WWW)。使网络工作的应用协议是超文本传输协议(HTTP)。不要将其与超文本标记语言(HTML)混淆。HTML 是用于编写网页的语言。HTTP 是 Web 浏览器和 Web 服务器通过互联网相互通信的协议。它是一个应用层协议,因为它位于协议栈的 TCP 层之上,并被特定应用程序用来相互通信。在这种情况下,应用程序是 Web 浏览器和 Web 服务器。
HTTP 是一个无连接的基于文本的协议。客户端(Web 浏览器)向 Web 服务器发送请求,请求网页和图像等网络元素。服务器处理完请求后,客户端和服务器之间的互联网连接将被断开。每个请求都必须重新建立连接。大多数协议是面向连接的。这意味着彼此通信的两台计算机在互联网上保持连接打开。然而,HTTP 不是这样。在客户端可以进行 HTTP 请求之前,必须与服务器建立新连接。
当你在 Web 浏览器中输入一个 URL 时,会发生以下情况:
- 如果 URL 包含域名,浏览器首先连接到域名服务器并检索 Web 服务器的相应 IP 地址。
- Web 浏览器连接到 Web 服务器,并通过协议栈发送 HTTP 请求(请求所需的网页)。
- Web 服务器接收请求并检查所需页面。如果页面存在,Web 服务器会发送它。如果服务器找不到请求的页面,它会发送一个 HTTP 404 错误消息。(404 意味着 “页面未找到”,任何浏览过网页的人可能都知道。)
- Web 浏览器接收页面并关闭连接。
- 然后浏览器解析页面,并查找它需要完成网页的其他页面元素。这些通常包括图像、小程序等。
- 对于每个需要的元素,浏览器都会额外连接并针对每个元素向服务器发送 HTTP 请求。
- 当浏览器加载完所有图像、小程序等时,页面将在浏览器窗口中完全加载。
# 应用协议:SMTP 和电子邮件
应用协议:SMTP 和电子邮件
互联网上另一个常用的服务是电子邮件。电子邮件使用一种称为简单邮件传输协议(SMTP)的应用层协议。SMTP 也是一种基于文本的协议,但与 HTTP 不同,SMTP 是面向连接的。SMTP 也比 HTTP 更复杂。在 SMTP 中有更多的命令和考虑因素,而 HTTP 中则较少。
当你打开邮件客户端阅读电子邮件时,通常会发生以下情况:
邮件客户端(Netscape Mail、Lotus Notes、Microsoft Outlook 等)打开一个连接到其默认邮件服务器。邮件服务器的 IP 地址或域名通常在安装邮件客户端时设置。
邮件服务器始终会首先传输消息以标识自己。
客户端将发送一个 SMTP HELO 命令,服务器将以 250 OK 消息响应。
根据客户端是检查邮件、发送邮件等,将向服务器发送相应的 SMTP 命令,服务器将相应地做出回应。
这个请求 / 响应交易将持续进行,直到客户端发送一个 SMTP QUIT 命令。然后服务器将告别,连接将被关闭。
# 传输控制协议
在协议栈的应用层下面是 TCP 层。当应用程序打开到互联网上另一台计算机的连接时,它们发送的消息(使用特定的应用层协议)会沿着协议栈传递到 TCP 层。TCP 负责将应用协议路由到目标计算机上正确的应用程序。为了实现这一点,使用端口号。端口可以被看作是每台计算机上独立的通道。
例如,你可以在查看电子邮件的同时浏览网页。这是因为这两个应用程序(Web 浏览器和邮件客户端)使用了不同的端口号。当一个数据包到达计算机并向上通过协议栈时,TCP 层根据 TCP 头中的端口号决定哪个应用程序接收该数据包。
TCP 的工作原理如下:
当 TCP 层从上层接收到应用层协议数据时,它会将其分割成可管理的 “块”,然后为每个 “块” 添加一个包含特定 TCP 信息的 TCP 头。TCP 头中包含的信息包括数据需要发送到的应用程序的端口号。
当 TCP 层从下面的 IP 层接收到一个数据包时,TCP 层会从数据包中剥离 TCP 头数据,如果需要,进行一些数据重构,然后使用从 TCP 头中取出的端口号将数据发送到正确的应用程序。
这就是 TCP 如何将通过协议栈移动的数据路由到正确的应用程序的方式。
TCP 不是一个文本协议。TCP 是一个面向连接的、可靠的、字节流服务。
面向连接意味着使用 TCP 的两个应用程序在交换数据之前必须首先建立连接。TCP 是可靠的,因为对于每个接收到的数据包,都会向发送者发送一个确认以确认交付。
请注意,在 TCP 头中没有 IP 地址的位置。这是因为 TCP 对 IP 地址一无所知。TCP 的工作是可靠地将应用层数据从一个应用程序传输到另一个应用程序。将数据从一个计算机传输到另一个计算机的任务是由 IP 来完成的。
# IP 协议
与 TCP 不同,IP 是一个不可靠、无连接的协议。IP 不关心数据包是否到达目的地。同样,IP 也不知道连接和端口号。IP 的工作是发送和路由数据包到其他计算机。
IP 数据包是独立的实体,可能会乱序到达或根本不到达。确保数据包到达并且顺序正确的工作是由 TCP 来完成的。IP 与 TCP 唯一的共同点是接收数据并在 TCP 数据上添加自己的 IP 头信息的方式。