2.1 互联网协议套件
在互联网发展的早期,数据交换并不可靠。通过互联网的前身——美国国防部高级研究计划署网络(ARPANET)发送的第一条信息是一个登录(LOGIN)命令,目的地是斯坦福大学的一台远程计算机。网络发送了前两个字母LO,然后崩溃了。这对美国军方来说是个问题,当时他们正在寻找一种连接远程计算机的方法,这样即使苏联的核打击使网络的各个部分离线,他们也可以继续交换信息。
为了解决这个问题,网络工程师开发了传输控制协议(TCP),以确保计算机之间可靠地交换信息。TCP是大约20种网络协议之一,这些网络协议统称为互联网协议套件。当一台计算机通过TCP将消息发送到另一台计算机时,该消息被拆分为数据包,这些数据包将通过目的地址发送到最终目的地。组成互联网的计算机将每个数据包都推向目的地,而不必处理整个消息。
接收方计算机接收到数据包后,便会根据每个数据包上的序列号将它们重新组合成可用的顺序。接收方每次收到数据包时,都会发送一个收据。如果接收方未能确认收到数据包,那么发送方可能会使用其他网络路径重新发送该数据包。通过这种方式,TCP允许计算机通过预期不可靠的网络来传输数据。
随着互联网的发展,TCP得到了显著的改进。现在发送的数据包带有校验和,允许接收方检测数据是否损坏并确定是否需要重新发送数据包。发送方还可以根据数据的消耗速度预先调整发送数据的速率。(互联网服务器通常比接收其消息的客户端功能强大,因此需要注意客户端的处理能力。)
注意:由于TCP的传输保证机制,它仍然是最常用的协议,但是现在互联网也使用了其他几种协议。例如,用户数据报协议(UDP)是一种较新的协议,该协议有意允许丢弃数据包,以便可以以恒定速率传输数据。UDP通常用于流式实时视频,因为当网络拥塞时,使用者宁愿丢弃一些帧也不愿意延迟其传输。
2.1.1 IP地址
互联网上的数据包被发送到互联网协议(IP)地址,即分配给连接互联网的单个计算机的号码,每个IP地址必须唯一。
最高级别的互联网名称和号码分配机构(ICANN)将IP地址块分配给区域授权机构。这些区域授权机构随后将地址段授予其区域内的互联网服务提供商(ISP)和主机托管公司。当你通过浏览器连接到互联网时,ISP会为你的计算机分配一个IP地址,该IP地址会保持几个月不变(ISP倾向于定期为客户端轮换IP地址)。类似地,在互联网上托管内容的公司也将为其连接到网络的每台服务器分配一个IP地址。
IP地址是二进制数,通常用IP版本4(IPv4)语法编写,有232(4 294 967 296)个地址。例如,谷歌的域名服务器的地址是8.8.8.8。因为IPv4地址正在以一种不可持续的速度被消耗,所以互联网正在转向IP版本6(IPv6)地址,以允许更多的设备进行连接,用八组4个十六进制数字表示,每组数字用冒号分隔(例如,2001:0db8:0000:0042:0000:8a2e:0370:7334)。
2.1.2 域名系统
浏览器和其他连接互联网的软件可以识别并将流量路由到IP地址,但IP地址对人类来说并不是特别容易记住。为了使网站地址对用户更友好,我们使用一个名为域名系统(DNS)的全局目录来翻译成人类可读的域名,如example.com网站翻译成IP地址是93.184.216.119。域名只是IP地址的占位符。域名和IP地址一样,都是唯一的,在使用前必须向域名管理机构注册。
当第一次在浏览器中输入域名时,它们会使用本地域名服务器(通常由ISP托管)进行查找,然后缓存结果,避免将来进行耗时的查找。这种缓存行为意味着新域名或对现有域名的更改需要一段时间才能在互联网上传播。传播的确切时间由生存时间(TTL)变量控制,该变量在DNS记录上设置,并指示DNS缓存应该何时让记录过期。DNS缓存带来了一种称为DNS投毒的攻击,即故意破坏本地DNS缓存,以便将数据路由到攻击者控制的服务器。
域名服务器除了返回特定域的IP地址外,还保存可通过规范名称(CNAME)记录描述域别名的记录,该记录允许多个域名指向同一IP地址。DNS还可以通过使用邮件交换(MX)记录来路由电子邮件。我们将在第16章中研究DNS记录如何用来对抗垃圾邮件。