第一章——概述
协议的第一定义:国家事务或外交场合的正式程序或规则系统
1.1 体系结构原则
因特网在计算机之间提供了消息通信能力,万维网是使用因特网来通信的具体应用(比如web)
1.1.1 分组、连接和数据报
二十世纪六十年代之前,网络的概念主要用于电话通信,一次通话中双方之间需要建立一条线路(最初是一条物理线路,随着科技的发展,电话通信中的物理线路逐渐演变为电路交换网络。电路交换网络通过自动交换机实现电话之间的连接,从而避免了需要物理线路直接连接的限制),这条线路为用户提供一定的贷带宽或容量,以便传输信息。
二十世纪六十年代出现的一个重要概念——分组交换思想。分组交换中,包含一定字节数的数字信息“块”(分组)独立通过网络,在传输过程中可以在进行组合然后分解——(多路)复用。分组在到达目的地过程中会在交换设备之间传输,并且路径可变。这样做有两个优点:网络更有弹性;基于统计复用可以更好的利用网络链路和交换设备。
基于统计复用(Statistical Multiplexing)是一种网络通信技术,旨在更好地利用网络链路和交换设备的资源。
通过统计复用,当网络上的连接不同时刻具有不均匀的数据传输需求时,可以更好地利用可用的带宽。它利用了通信流量的统计特性,根据连接的实际数据传输情况,动态地分配带宽资源。这样,在空闲或低负载时,资源可以被其他连接共享,提高了网络的整体效率。
1.1.2 端到端论点和命运共享
设计一个大系统的时候,很重要的一个问题是在什么位置实现某个功能。
影响TCP/IP协议族设计的的一个重要原则称为端到端论点,与之相关的还有一个称为命运共享的相关原则:
-
"端到端论点"(End-to-End Principle)是一种设计原则,提出了在网络通信中的数据处理应该尽可能地在通信的端点进行,而不是在中间的网络节点进行。这一原则强调网络应该尽量简化,将更多的智能和控制权交给端点设备,而不是依赖于中央控制。这个原则认为重要功能(例如差错控制、加密、交付确认)通常不会在大型体统的低层实现,但是低层可以提供方便端系统工作的功能。
根据端到端论点,网络中的中间节点(如路由器、交换机等)应该保持简单,只提供基本的转发和传输功能,而具体的数据处理和协议应该由端点设备来完成。这样做的目的是提高网络的可靠性、灵活性和可扩展性。同时,端到端论点还强调保持端点的自治性,使得端点设备能够根据自身需求和特定应用进行自主决策和处理。
-
"命运共享"(Sharing Fate)是一个与端到端论点相关的概念。它指的是在网络通信中,数据传输的质量和结果是由通信的端点设备共同决定的,而不仅仅依赖于网络中的中间节点。换句话说,发送方和接收方共同承担了通信的成功和失败的风险。
命运共享认为,由于网络是一个复杂和不确定的环境,中间节点无法完全控制和保证数据传输的可靠性。因此,发送方和接收方应该共同参与和协作,以确保通信的成功。这可以通过错误检测和纠正、重传机制、流量控制等方式实现。
1.1.3 差错控制和流量控制
端到端论点和命运共享建议在应用程序附近或内部实现差错控制。
一个可靠的文件传输应用并不关心交付的文件数据块的顺序,最终将所有块无差错的交付并按照原来的顺序重新组合即可。
1.2 设计和实现
实现协议族的常用方案——分层
1.2.1 分层
1.2.2 分层实现中的复用、分解和封装
分层结构的一个主要优点就是协议复用的能力。
封装的本质 ➡️ 每层都将来自上层的数据看成不透明的、无需解释的信息。
互联网的目标之一 ➡️ 对应用隐藏所有关于物理布局(拓扑)和底层协议的异构性的细节。
1.3 TCP/IP协议族结构和协议
1.3.1 ARPANET 参考模型
ARPANET参考模型的分层最终被TCP/IP协议族采纳,它的结构比OSI模型更简单,但在实现中包括一些特定的协议,并且不适合于常规层次的简化。
尽管TCP/IP模型相对于OSI模型更简单,但它并不适合于常规层次的简化,因为它是根据具体的需求和实践发展而来的。TCP/IP模型的设计重点是互联网的可扩展性和适应性,因此在实践中进行了一些针对性的调整和改进,以满足实际应用的需求。
TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。
- 链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。
- 网络层:负责路由以及把分组报文发送给目标网络或主机。
- 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。
- 应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。
1.3.2 TCP/IP中的复用、分解和封装
下图模拟了如何在在一台Internet主机上对一个PDU进行分解
Demux:"Demux"是"Demultiplex"的简写,它是指在通信或数据处理中,将合并在一起的多路信号或数据流分解为单独的组件或通道的过程。
1.3.3 端口号
在TCP/IP协议族中, 端口号是通过16位无符号整数表示,取值范围从0到65535。
端口号被分为三个范围:
- 熟知端口(Well-known Ports):范围从0到1023。这些端口号通常被分配给一些常见的网络服务,例如HTTP(端口号80)、FTP(端口号21)、SSH(端口号22)等。熟知端口具有预留的特殊用途,并且在大多数情况下需要管理员权限才能使用。
- 注册端口(Registered Ports):范围从1024到49151。这些端口号可以被应用程序或服务注册并使用,但没有特定的预留用途。许多常见的应用程序和服务都使用注册端口号,例如MySQL数据库(端口号3306)、SMTP(端口号25)等。
- 动态/私有端口(Dynamic/Private Ports):范围从49152到65535。这些端口号可以被动态地分配给客户端应用程序或服务,用于临时的通信会话。动态端口通常在操作系统级别自动分配,并且在通信会话结束后释放。
tips:早起的网络服务大多使用奇数的端口号,这是有历史原因的,这些端口号是从NCP(NCP是网络控制协议,在TCP之前作为APRANET的传输层协议)端口号派生而来的。NCP虽然简单,但不是全双工的,因此每个应用需要两个连接,并为每个应用保留奇偶成对的端口号。当TCP和UDP称为称为标准传输层协议时,每个应用只需要一个端口号,因此来自NCP的奇数端口号被使用。
1.3.4 名称、地址和DNS
- 名称(Name):在计算机网络中,名称是用来标识特定实体的可识别文本。在互联网上,最常见的名称就是域名(Domain Name)。域名是由一串有层次结构的标签组成,用于标识特定的网站、服务器或网络资源。例如,"example.com"就是一个域名。名称的使用方便于人们记忆和使用,比如使用易于理解和记忆的名称而不是复杂的数字地址。
- 地址(Address):地址用于在计算机网络中唯一标识设备或网络资源的位置。在互联网上,最常见的地址类型是IP地址(Internet Protocol Address)。IP地址是一个由数字组成的标识符,用于在网络中准确定位设备或网络节点。IP地址可以是IPv4地址(如192.168.0.1)或IPv6地址(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。地址的作用是确保数据可以正确路由到目标设备或资源。
- DNS(Domain Name System):DNS是一种分布式的命名系统,用于将域名转换为对应的IP地址。它充当了域名和IP地址之间的转换器。当用户输入一个域名时,计算机会向DNS服务器发起查询,获取该域名对应的IP地址。DNS服务器会返回与域名相对应的IP地址,以便进行网络通信。DNS的作用是将人类友好的域名映射到计算机网络中的具体地址,使得网络资源更容易被访问。
总结起来,名称(如域名)是用于人们识别和记忆特定实体的文本标识,地址(如IP地址)是用于在网络中准确定位设备或资源的数字标识,而DNS是用于将名称转换为对应地址的系统,使得网络资源可以被准确访问。
1.4 Internet、「内联网(Intranet)」和「外联网(Internet)」
小写字母开头的internet表示使用常见的协议族互联的几个网络。大写字母开头的Internet表示可使用TCP/IP通信的世界范围内的主机集合。Internet是一个internet,但反过来说是错误的。
-
内联网(Intranet)是指在一个组织或机构内部建立的私有网络。它利用互联网技术和协议来构建局域网(LAN)或广域网(WAN),用于组织内部的通信和资源共享。内联网通常基于TCP/IP协议,并采用类似于互联网的技术和工具,如Web浏览器、电子邮件、文件传输等。内联网提供了一种安全、受控的网络环境,供组织内部的成员共享信息、协作和访问内部资源,但对外部用户来说通常不可访问。
-
外联网(Internet)则指的是全球范围的公共网络,由各种网络和连接设备相互连接而成。它是一个开放的、分布式的网络结构,通过互联网协议(TCP/IP)进行通信。外联网允许全球范围的计算机和网络设备相互连接,用户可以通过互联网访问各种资源,如网站、应用程序、服务等。外联网是一个公共网络,允许全球用户之间的交流和数据传输。
因此,内联网是指组织或机构内部的私有网络,用于内部通信和资源共享;外联网则指的是全球范围的公共网络,用于连接全球用户和资源。内联网和外联网在性质、范围和使用方式上有明显的区别。
1.5 设计应用
网络应用的典型结构基于少数几种模式,最常见的模式是客户端/服务器模式和对等模式。
1.5.1 客户端/服务器
在客户端/服务器模式中,确实大多数网络应用被设计为一端是客户端,另一端是服务器。服务器为客户端提供某种服务,如数据存储、计算、访问文件等。
根据服务器处理客户端请求的方式,可以将服务器分为两类:迭代服务器(Iterative Server)和并发服务器(Concurrent Server)。
- 迭代服务器(Iterative Server):迭代服务器按顺序处理客户端请求。当一个客户端发送请求时,服务器会依次处理该请求,直到完成并返回结果,然后才能处理下一个客户端的请求。在这种模式下,服务器一次只处理一个客户端,其他客户端的请求必须等待。迭代服务器通常采用简单的循环或递归方式处理客户端请求。
- 并发服务器(Concurrent Server):并发服务器可以同时处理多个客户端请求。它使用并发处理的技术,允许多个客户端同时连接并发送请求,服务器可以并行地处理这些请求。并发服务器通常通过多线程、多进程或异步事件处理等机制实现。这种模式下,服务器能够同时为多个客户端提供服务,提高了系统的并发性能和响应能力。
1.5.2 对等
对等网络或P2P(Peer-to-Peer)是一种网络应用模式,其中网络中的节点彼此平等,可以相互通信和交换资源,而不依赖中心化的服务器。
在对等网络中,每个节点既充当客户端,也充当服务器的角色。节点可以主动发起连接和请求,也可以响应其他节点的请求。对等网络的优点之一是它的分布式性质,每个节点都具有相似的功能和能力,没有单点故障。
在P2P应用中,节点之间可以共享各种资源,例如文件、计算能力、存储空间等。典型的P2P应用包括文件共享系统(如BitTorrent)、点对点聊天(如Skype)、分布式计算(如BOINC)等。在这些应用中,每个节点既可以请求资源,也可以提供资源,从而形成一个相互合作的网络。
对等网络的优势在于去中心化的特性,它具有较好的可扩展性和鲁棒性。每个节点的贡献都有助于整个网络的性能和可用性。然而,对等网络也面临一些挑战,如节点发现、资源管理、安全性等问题,需要采取适当的协议和机制来解决。
1.5.3 应用程序编程接口
无论是P2P或客户机/服务器,都需要表述其所需的网络操作(例如建立一个连接、写 人或读取数据)。这通常由主机操作系统使用一个网络应用程序编程接口(API)来实现。
最流行的API被称为套接字或Berkeley套接字,套接字(Socket)是一种网络通信的编程接口,它提供了一组函数和数据结构,允许应用程序通过网络进行数据传输和通信。套接字API是基于Berkeley套接字接口的标准化实现,因此也被称为Berkeley套接字。
1.6 标准化进程
在TCP/IP协议族的制定和标准化过程中,有一些组织扮演着重要的角色。其中,最为关注的组织是互联网工程任务组(Internet Engineering Task Force,IETF)。
以下是与IETF相关的组织和其职责的简要说明:
- 互联网工程任务组(IETF):IETF是一个开放的论坛,致力于开发和推进互联网相关的协议标准。它通过每年举行的三次会议,让全球的技术专家聚集在一起,讨论、开发和通过互联网的核心协议标准。常见的协议如IPv4、IPv6、TCP、UDP和DNS都是在IETF中开发和标准化的。
- 互联网架构委员会(Internet Architecture Board,IAB):IAB是IETF的领导组织之一,负责提供对IETF活动的指导,并执行其他任务,如任命其他标准制定组织(SDO)的联络员等。
- 互联网工程指导组(Internet Engineering Steering Group,IESG):IESG是IETF的另一个领导组织,具有决策权力。它负责修改现有的标准,制定和批准新的标准。
- IETF工作组(IETF Working Groups):IETF工作组是执行繁重或细致工作的实体。工作组由志愿者组成,负责协调和执行与特定主题相关的任务。工作组主席协调志愿者的工作。
除了IETF之外,还有两个与IETF紧密合作的重要组织:
- 互联网研究任务组(Internet Research Task Force,IRTF):IRTF是一个研究组织,旨在讨论和研究尚未成熟到可以形成标准的协议、体系结构和程序。IRTF的主席是IAB的列席成员。
- 互联网协会(Internet Society,ISOC):ISOC与IAB共同影响和促进全球范围内关于互联网技术和使用的政策和培训。它支持IETF的工作,并与其他组织合作推动互联网的发展和使用。
这些组织一起推动着TCP/IP协议族的标准化和发展,通过讨论、研究和协作,确保互联网的稳定性、安全性和可扩展性。他们的工作对于互联网的运行和全球互联互通至关重要。
1.6.1 RFC
RFC(Request for Comments)是一种用于描述互联网协议、技术规范和相关主题的文件格式。RFC不仅仅是一种文档格式,而是一种开放的、协作的过程,用于制定和标准化互联网相关的协议和标准。
- RFC的创建和发布:RFC可以通过多种方式创建,包括由IETF、IAB、IRTF和独立提交者编写。在成为RFC之前,文档通常作为临时的互联网草案存在,并接受意见和公开审查。一旦被接受并发布为RFC,它成为互联网标准的一部分。
- RFC的类别:不是所有的RFC都是标准。RFC根据其类别进行分类,包括标准跟踪类别、当前最佳实践(BCP)、信息、实验和历史。只有标准跟踪类别的RFC被认为是官方标准。
- RFC的编号:每个RFC都有一个唯一的数字标识,例如RFC 1122。新的RFC被分配更高的数字。RFC的大小各不相同,可以从几页到几百页不等。
- 获取RFC:许多RFC可以从一些网站免费获取,如www.rfc-editor.org。然而,由于历史原因,下载的RFC通常是基本的文本文件,尽管有些RFC已经采用了更先进的格式和排版方式。
- RFC的重要性:许多RFC具有特殊意义,它们总结、澄清或解释其他一些重要的标准。例如,一些RFC定义了官方标准的一组文件。RFC 5000定义了一组被视为官方标准的其他RFC(这些RFC最近正在编写中)。
RFC在互联网技术的发展和标准化中起着重要的作用。它们记录了互联网协议和相关标准的演变,并为技术专家和研究人员提供了一个共享和讨论的平台。通过RFC的制定和发布,互联网的发展得以有序推进,确保了不同系统和设备之间的互操作性和兼容性。
1.6.2 其他标准
除了IETF,还有其他一些重要的标准制定组织(SDO)负责定义和标准化协议,这些组织也值得我们关注。以下是一些相关组织的简要介绍:
- 电气和电子工程师学会(Institute of Electrical and Electronics Engineers,IEEE):IEEE是一个专注于电气和电子工程领域的国际性组织。在网络领域,IEEE关注第三层以下的网络协议,如Wi-Fi和以太网等。IEEE负责制定与物理层和数据链路层相关的标准。
- 万维网联盟(World Wide Web Consortium,W3C):W3C是一个致力于开发Web标准的国际组织。W3C的关注点主要在应用层协议,特别是涉及Web技术的标准化,如基于HTML的语法和其他Web相关的技术。
- 国际电信联盟(International Telecommunication Union,ITU):ITU是一个联合国专门机构,负责协调全球电信和通信领域的标准和政策。ITU下属的ITU-T(原为CCITT)制定了许多与电话和蜂窝网络等通信领域相关的协议标准。随着互联网的发展,ITU-T也越来越关注互联网相关的标准化工作。
这些组织在各自领域的标准化工作中起着重要的作用。它们与IETF之间通常存在合作和协调,确保不同层次和方面的协议能够相互配合和互操作。这样的合作有助于推动互联网技术的发展和全球互联互通的实现。
1.7 实现和软件分发
早期TCP/IP协议的标准实现来自加州大学伯克利分校计算机系统研究组(CSRG)。他们通过4.xBSD系统发布了TCP/IP的实现,并且在20世纪90年代中期才出现了BSD网络发布版。这个源代码成为了许多其他实现的基础。现在,每个流行的操作系统都有自己的TCP/IP实现。
下图显示了各种BSD版本的年代列表,列出了涉及TCP/IP的重要特点:
1.8 与Intemet体系结构相关的攻击
在互联网体系结构中存在各种攻击和漏洞,其中一些已在设计或实现的讨论中提到。尽管很少有攻击直接针对整个互联网体系结构,但需要注意的是,互联网体系结构传递IP数据报是基于目标IP地址的。这意味着恶意用户可以在他们发送的每个IP数据报的源地址字段中插入任何IP地址,这种行为被称为IP地址欺骗。生成的数据报将被交付到目的地,但很难确定其真实来源。也就是说,很难或无法确定从互联网接收的数据报的真实来源。
IP地址欺骗可以与互联网上出现的各种攻击相结合。拒绝服务(DoS)攻击通常涉及消耗大量关键资源,以使合法用户无法访问服务。例如,向服务器发送大量的IP数据报,使其花费所有时间处理接收的数据包和执行其他无用的工作,这是一种DoS攻击的类型。某些DoS攻击可能涉及使用大量流量堵塞网络,使其无法发送其他数据包。这通常需要使用许多计算机来发送数据包,并形成分布式拒绝服务(DDoS)攻击。
未经授权的访问攻击涉及以未经授权的方式访问信息或资源。它可以采用多种技术来实现,例如利用协议实现中的错误来控制系统(称为占领系统,并将其变成僵尸)。它还可以涉及伪装,例如攻击者代理冒充合法用户(例如使用用户证书)。更严重的攻击涉及使用恶意软件(恶意软件)控制许多远程系统,并以协调和分布式的方式(称为僵尸网络或僵尸网络)使用它们。那些出于非法获利或其他恶意目的而有意开发恶意软件和利用系统的程序员通常被称为黑帽。另一方面,白帽利用相同的技术,但是他们只是通知系统存在漏洞,而不是利用这些漏洞。
在互联网体系结构方面,值得注意的是,最初的互联网协议没有进行任何加密,加密可用于支持认证、完整性和保密性。因此,恶意用户通过分析网络中的数据包通常可以获得私人信息。如果他们具有修改传输中的数据包的能力,他们可以冒充用户或更改消息内容。尽管加密协议显著减少了这些问题,但旧的或设计不当的协议有时在面对简单的窃听攻击时仍然容易受到攻击。由于无线网络的普及,“嗅探”他人发送的数据包变得相对容易,因此应避免使用旧的或不安全的协议。请注意,尽管可以在某个层级(例如Wi-Fi网络的链路层)启用加密,但只有主机到主机的加密(在IP层或更高层次)才能保护通过多个网络段传递的IP数据报,以及可能采用遍历路径到达最终目的地的数据报。