世界是数字的(三)

互联网

互联网并不是一个巨型网络,更不是一台计算机。他由定义了网络和其中的计算机相互通信规则的标准连接在一起,是一个松散的、非结构化的、混乱、自组织的网络集合

如何才能把光纤网、以太网、无线网等不同的物理属性的网络连接起来,甚至比他们之间相隔很远时也能联通?

我们需要在间接相连的网络之间找到通信路径,需要就信息采用何种格式传输达成协议,需要在错误处理、时延、过载等一些不太容易想到的问题上达成协议。没有这些协议,就很难甚至无法进行通信。

互联网概述

如今的互联网有成千上万个松散连接的独立网络构成,其中的每个网络都连接到另外一个或多个网络。邻近的计算机通过以太网为主的局域网连接,然后网络和网络再连起来。网络链接的设备叫网管或路由器。网关之间相互交换着路由信息,这样他们就至少知道哪些网络与本地网络相连并可以被访问。

家用计算机可以通过无线网卡链接到路由器,然后由路由器通过电缆或DSL链路链接到互联网服务提供商(ISP)。

在互联网上,输送数据的包叫做IP包(IP Internet Protocol,互联网协议)。所有的IP包都是一样的格式。在具体的物理网络上,IP包通过一个或多个物理包来传输。

每个IP包会经过多个网关,每个网关都把这个包传递给离包的最终目的地更近的下一个网关。一个包在网络中的旅程可能会经过20个网关。

IP地址和以太网地址类似。

IP地址的分配机制是,先由一个中心权威机构把连续的IP地址段分配给某个网络的管理员,在由管理员把单个IP地址分配给网络里的主机,这样,每台主机就有一个基于他所在的网络的独一无二的地址,对台式机来说吗,IP可能是固定的,但移动设备会改变。

域名系统(Domain Name System DNS)用于将名字转换成地址。

互联网的核心协议称为IP,该协议为信息传输定义了统一的传输机制和通用格式。

域名和地址

每个网络和每台联网的主机都必须有IP地址,这样才能通信。比如普林斯顿大学有两个地址块,分别是128.122.ddd.ddd和140.180.ddd.ddd。其中ddd是0到255的数字。这里的每个地址块最多允许(2的16次幂)主机分配地址,总共大约有131000个可用地址。

有一种用单个IP地址肩扛多台主机的技术,家用路由器一般都是提供网络地址转换服务(Network address translation,NAT),即用单个外部IP地址为多个内部IP地址提供网络服务。使用NAT之后,家里所有联网设备从外部看都具有相同的IP地址,内外地址的双向转换完全由NAT设备的硬件和软件搞定。

协议

互联网基础的两个协议,一个是互联网协议IP,定义了单个包的格式和传输方式。一个是传输控制协议,定义了IP包如何组成数据流以及如何连接到服务。

互联网协议”不可靠”,顾名思义,就是个“尽力而为”的协议,并不能保证包传送的质量,出错也就出错了。包可能丢失或损坏,接收到的顺序可能和发送的顺序不一致。

IP 包中有个很有趣的部分是TTL(生存时间,Time To Live 的缩写)。TTL 是个单字节字段,由包的发送方设置一个初始值,每经过一跳网关就减1,当减到0 的时候,就丢弃这个包,并给始发者返回一个报错包。互联网中一次典型的传包过程通常会经过15 到20 个网关,所以经过了255 跳的包显然有问题,很可能是走环路了。TTL 并不能消除环路,但能防止个别包在遇到环路时永远转圈。

在互联网协议簇中,高层协议基于IP 层的不可靠服务合成可靠的通信,其中最重要的高层协议就是传输控制协议——TCP。TCP 能为用户提供可靠的双向数据流:向一端放入的数据从另一端流出来,延迟很小,出错率很低,仿佛是一条从一头到另一头的直连线缆。

在TCP 中,字节流切分成片段,放到TCP 包也就是所谓的报文段里。TCP 报文段不仅包含实际数据,还有控制信息构成的头部,其中包括方便接收方知晓收到的包代表数据流中哪部分的顺序号。通过顺序号,就可以发现丢失的报文段并重传之。TCP 报文段的头部还包括错误检测信息。这样,如果报文段出错,就很容易检测出来。每个TCP 报文段都放在一个IP 包里传输。下图展示了TCP 报文段头部的内容,它们与数据一起封装在IP 包里:

接收方必须对收到的每个报文段返回确认应答或否认应答。我给你发的每一个报文段,你都要返回一个应答以表明你收到了。如果在适当间隔之后我还没收到应答,那我就认为这个报文段已丢失,然后重新发送。同样,如果你预期会收到某个特定的报文段却没收到,那就得给我发送否认应答(比如“未收到27 号报文段”),这样我就会重新发送。

显然,如果应答报文本身丢失了,情况就会更复杂。TCP 使用若干计时器来检测此类错误,如果计时器超时,就认为出错。如果某个操作耗时过长,就会启动纠错程序。最终,某个连接可能会因为“超时”而被终止。你也许见过失去响应的网站,那就是遇到了这种情况。这些都是TCP 协议的一部分。

TCP 协议同样还包含提高传输效率的机制。比如,发送方可以在未收到上个包的应答信息时就继续发送下个包,接收方也可以为接收到的一组包回送一个应答。在通信顺畅的时候,这样做可以降低应答带来的开销。而当网络发生拥塞、开始出现丢包现象时,发送方就迅速回退到低速率,直到慢悠悠地一送一达。

在两台计算机主机之间建立TCP 连接时,不仅要指定计算机,还要指定计算机上的端口。每个端口表示一个独立的会话。端口用两字节(即16 位)二进制数表示,于是就有65 536 个可用端口。这样,在理论上每台主机可以同时承载65 536 个TCP 会话。

有一百多个众所周知的端口预留给了标准服务。比如,Web 服务器使用80 端口,邮件服务器使用25 端口。这样,用浏览器访问yahoo.com 网站时,浏览器会建立一个到雅虎服务器80 端口的TCP 连接,而邮件程序则使用25 端口来访问雅虎邮箱①。源端口和目标端口是TCP 头部的一部分,头部与数据一起构成TCP 报文段。

高层协议

TCP 提供双向通信方式,可使数据在两台计算机之间可靠地来回传输。互联网服务和应用程序使用TCP 作为传输机制,但在完成具体任务时还要使用自己特定的协议。例如,超文本传输协议(HyperText Transfer Protocol,HTTP)就是万维网浏览器和服务器使用的非常简单的协议。我在页面中点击亚马逊网站链接的时候,浏览器会打开一个TCP/IP 连接,连接至服务器amazon.com 的80 端口,然后发送一条简短的消息请求某个网页。下图中,左边最顶端的客户端应用程序是浏览器。消息沿着协议链向下层走,跨越互联网(通常是经过更多步传递),到了远端之后回到协议上层,
传给相应的服务器应用程序。服务器响应的返回路径不一定和传输客户端请求的路径一样。

亚马逊服务器准备好客户端请求的页面,然后把它和一小段附加数据(比如关于页面编码方式的信息)一起发送回去。浏览器读到返回结果后,据此显示出页面内容。你可以亲自尝试用Telnet 来摸索这个过程。Telnet 是用来跟别的计算机建立远程登录会话的TCP 服务,通常使用23 端口,但也可以指定其他端口。

现在,除了不讲究安全的场合,Telnet已经很少用了,原因之一就是它毫无安全性可言。而Telnet 的继任者SSH(Secure Shell的缩写)则因为双向加密了全部通信而得到广泛使用,可以用来安全地交换信息。SSH使用22 端口。

SMTP 用来在不同系统之间交换邮件。具体步骤是,先建立一条连接到收件人的邮件服务器25 端口的TCP/IP 连接,使用SMTP 协议指明发件人和收件人,然后传送邮件内容。SMTP 是基于文本的协议,理论上可以用Telnet 连接到邮件服务器的25 端口观察其运行过程。

IP 协议本身并不能保障带宽。实际上,作为“尽力而为”型的服务,它甚至都没有承诺信息一定会送达,更不要说有多么快了。

网页浏览器也缓存信息,所以如果你最近刚访问过某个页面或图像,再次打开它的时候,你所看到的页面或图像很可能来自本机缓存而不是网络。
摘自《世界是数字的》

你可能感兴趣的:(世界是数字的)