第1章 概述 [TCP/IP详解 卷1:协议]
一系列相关协议的集合称为一个协议族,指定一个协议族中的各种协议之间的相互关系并划分需要需要完成的任务的设计,称为协议族的体系结构或参考模型。
TCP/IP是一个实现Internet体系结构的协议族,它来源于ARPANET参考模型(ARM)。
TCP/IP体系结构来源于实际工作,用于满足多种不同的分组交换计算机网络的互联需求。这由一组网关(后来称为路由器)来实现,网关可以在互不兼容的网络之间提供翻译功能。
TCP/IP协议族允许计算机、智能手机和嵌入式设备之间通信,它们可以采用各种尺寸、来自不同计算机生产商和运行各种软件。
我们通常认为因特网在计算机之间提供了消息通信能力,而万维网是一种使用因特网来通信的具体应用。
20世纪60年代出现的一个重要概念是分组交换思想。在分组交换中,包含一定字节数的数字信息“块”(分组)独立通过网络。来自不同来源或发送方的块可以组合,而且以后可以分解,这称为“(多路)复用”。
影响TCP/IP协议族设计的一个重要原则称为端到端论点:只有在通信系统端角度的应用知识的帮助下,才能完全和正确地实现问题中提到的功能。因此,作为通信自身的一个特点,不可能提供有疑问的功能。(有时,通信系统提供的一个功能不完整的版本可能用于提高性能。)
命运共享建议将所有必要的状态放在通信端点,这些状态用于维护一个活动的通信关联(例如虚拟链接)。由于这个原因,导致通信失效的情况也会导致一个或更多端点失效,这样显然会导致整个通信的失败。
在网络中存在数据损坏或丢失的情况。这可能出于各种原因,例如硬件问题、数据传输中被修改、在无线网络中超出范围,以及其他因素。对这种错误的处理称为差错控制,
它可以在构成网络基础设施的系统、链接到网络的系统或其他组合中实现。显然,端到端论点和命运共享建议在应用程序附近或内部实现差错控制。
针对网络中可靠、按顺序交付的实现开销,帧中继和Internet协议采用一种称为尽力而为交付的服务。如果尽力而为的交付成功,发送方能以超过接收方处理能力的速度生成信息。在尽力而为的IP网络中,降低发送方的发送速度可通过流量控制机制实现。
通过分层,每层只负责通信的一个方面。采用多层是有益的,这是因为分层设计允许开发人员分别实现系统的不同部分,它们通常由在不同领域的专业人员完成。
最常提到的协议分层概念基于一个称为开放系统互联标准(OSI)的模型,该模型是有国际标准化组织(ISO)定义的。
(七层:物理层、链路层、网络层、传输层、会话层、表示层、应用层)
1.物理层定义了一种通过某种通信介质(例如一条电话线或光纤电缆)传输数字信息的方法。
2.链路层或数据链路层包含为共享相同介质的邻居建立连接的协议或方法。有些链路层网络(例如DSL数字用户线)只连接两个邻居,当超过一个邻居可以访问共享网络时,这个网络称为多接入网络。Wi-Fi和以太网是这种多接入链路层网络的例子,特定协议用于协调多个站在任何时间访问共享介质。
3.网络层或互联网络层对于分组网络(例如TCP/IP)提供了一种可交互操作的分组格式,可通过不同的链路层网络来连接。本层也包括针对主机的地址方案和用于决定将分组从一台主机发送到另一台主机的路由算法。
4.传输层提供了一个会话之间的数据流,而且可能相当复杂,这取决于它提供的服务类型(例如分组网络的可靠交付可能会丢弃数据)。
5.会话表示运行中的应用(例如,cookies用于Web浏览器的Web登录会话过程中)之间的交互,会话层协议可提供例如连接初始化和重新启动、增加检查点(保存到目前为止已完成的工作)等功能。
6.表示层负责信息的格式转换和标准化编码。正如我们所看到的,Interent协议不包括正式的会话层或表示层,如果需要的话,这些功能由应用程序来实现。
7.应用层,最高层,各种应用通常会实现自己的应用层协议,它们对用户来说是最容易看到的。目前已存在大量的应用层协议,并且程序员仍在不断开发新协议。因此,应用层是创新最多,以及新功能开发和部署的地方。
尽管OSI模型建议的7个逻辑层在协议体系结构的模块化实现中是可取的,但是通常认为TCP/IP体系结构包含5层。
分层体系结构的一个主要优点是具有协议复用的能力。这种复用形式允许多种协议共存于同一基础设施中。它也允许相同协议对象(例如连接)的多个实例同时存在,并且不会被混淆。
复用可以发生在不同层,并且在每层都有不同类型标识符,用于确定信息属于哪个协议或信息流。当某层的一个称为协议数据单元(PDU)的对象(分组、消息等)被低层携带时,这个过程称为在相邻低层的封装(作为不透明数据)。因此,第N层的多个对象可以通过第N-1层的封装而复用。
针对一个特定的协议族,可以区分为端系统(两边的两台主机)和中间系统(中间的路由器)。网络层之上的各层使用端到端协议。在我们的描述中,只有端系统需要这些层次。但是,网络层提供了一种逐跳协议,它用于两个端系统和每个中间系统。通常不认为交换机或桥接是一个中间系统,这是由于它们没有使用互联网络协议的地址格式来编址,并在很大程度上以透明于网络协议层的方式运行。从路由器和端系统的角度来看,交换机或网桥实际是不可见的。
顾名思义,路由器有两个或更多的网络接口(由于它连接两个或多个网络)。有多个接口的系统称为多宿主。
【路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。 路由器是互联网络的枢纽,"交通警察"。
路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。
交换机是将不同IP地址的电脑连在一起,共享一根网线;路由器是将同一个IP给不同的电脑使用,就像一条大路分成很多条小路。】
互联网络的目标之一是对应用隐藏所有关于物理布局(拓扑)和低层协议的异构性的细节。
ARPANET参考模型,(链路层、网络层、传输层、应用层)
1.链路层是一个“非正式”的层,有几个协议工作在这层,一个最古老和最重要的协议是地址解析协议(ARP)。它是IPv4的专用协议,只用于多接入链路层协议(例如以太网和Wi-Fi),完成IP层使用的地址和链路层使用的地址之间的转换。
2.网络层中可以看到IP,它是TCP/ICP中最重要的网络层协议,IP发送给链路层协议的PDU称为IP数据报,它的大小是64KB(IPv6将它扩大为4GB),在很多情况下,当使用的上下文是清晰的,我们将会使用简化的术语“分组”来表示IP数据报。大的分组放入链路层PDU(帧)时需要进行缩小处理,这个过程称为分片,它通常由IP主机和某些路由器在必要时执行。在分片的过程中,大数据报的一部分被放入多个称为分片的小数据报中,并在到达目的地后组合(称为重组)。
在本书中,我们使用术语IP表示IP版本4和6,使用IPv6表示IP版本6,并使用IPv4表示IP版本4,它是当前最流行的版本。由于每个IP分组都是一个数据报,所以都包含发送方和接收方的第3层地址。这些地址称为IP地址,即32位的IPv4地址或128位的IPv6地址,IP地址长度不同是IPv4和IPv6之间的最大差别。每个数据报的目的地址用于决定将该数据报发送到哪里,而做出此决定和发送数据报到下一跳的过程称为转发。路由器和主机都能进行转发,但更多的是由路由器实现转发。这里有3种类型的IP地址,地址类型决定如何进行转发:单播(目的地是一台主机)、广播(目的地是一个指定网络中的所有主机)和组播(目的地是属于一个组播组中的一组主机)。
Internet控制消息协议(ICMP)是IP的一个辅助协议,IP层使用它与其他主机或路由器的IP层之间交换差错消息和其他重要信息。ICMP有两个版本:IPv4使用的ICMPv4,IPv6使用的ICMPv6。ICMPv6是相当复杂的,包括地址自动配置和邻居发现等功能,它们在IPv4网络中由其他协议(例如ARP)处理。虽然ICMP主要由IP使用,但它也能被其他应用使用。事实上,两个流行的诊断工具(ping和traceroute)都使用ICMP。ICMP消息被封装在IP数据报中,采用与传输层PDU相同的封装方式。
Internet组管理协议(IGMP)是IPv4的另一个辅助协议。它采用组播寻址和交付来管理作为组播组成员的主机(一组接收方接收一个特定目的地址的组播流量)。
3.在传输层中,常见的两种Internet传输协议有很大区别,广泛使用的传输控制协议(TCP)会处理数据包丢失、重复和重新排序等IP层不处理的问题。它采用面向连接(VC)的方式,并且不保留消息边界。相反,用户数据报协议(UDP)仅提供比IP协议稍多的功能。UDP允许应用发送数据报并保留消息边界,但不强制实现速率控制或差错控制。
TCP在两台主机之间提供可靠的数据流传输,TCP发送到IP的PDU(协议数据单元)称为TCP段。
另一方面,UDP为应用层提供一种更简单的服务,它允许将数据报从一台主机发送到另一台主机,但不保证数据报能到达另一端。任何可靠性都需要由应用层提供。事实上,UDP所做的是提供一套端口号,用于复用、分解数据和校验数据的完整性。正如我们所看到的,即使UDP和TCP在同一层次,它们也是完全不同的。
这里很有两个传输层协议,它们相对比较新,并被用于某些系统中。它们的使用还不是很广泛,但值得注意。首先是数据报拥塞控制协议(DCCP),它提供了一种介于TCP和UDP之间的服务类型:面向连接、不可靠的数据报交换,但具有拥塞控制功能。拥塞控制包括发送方控制发送速率的多种技术,以避免流量堵塞整个网络。
另一个是流控制传输协议(SCTP),是用于某些特定系统的传输协议。SCTP提供类似于TCP的可靠交付,但不要求严格保持数据的顺序,它还允许多个数据流逻辑上在同一连接上传输,并提供了一个消息抽象,这是它与TCP的主要区别。SCTP用于在IP网络上携带信令消息,这类似于某些电话网络中的用途。
4.在传输层之上,应用层负责处理特定应用的细节。有很多常见的应用,几乎每个应用的 实现都是基于TCP/IP的,应用层与应用的细节有关,但与网络中的数据传输无关。较低的三层则相反:它们对具体应用一无所知,但需要处理所有的通信细节。
已经讨论了协议复用、分解和封装的基础内容。每层都会有一个标识符,允许接收方决定哪些协议或数据流可复用在一起。每层通常也有地址信息,它用于保证一个PDU被交付到正确的地方。
以太网帧包含一个48位的目的地址(又称为链路层或介质访问控制(MAC)地址)和一个16位的以太网类型字段。0x0800(十六进制)表示这个帧包含IPv4数据报,0x0806和0x86DD分别表示ARP和IPv6。假设目的地址与接收方的一个地址匹配,这个帧将被接收并校验差错,以太网类型字段用于选择处理它的网络层协议。
如果接受到的帧包含一个IP数据报,以太网头部和尾部信息将被清除,并将剩余字节(包含帧的有效载荷)交给IP来处理。IP检测一系列的字段,包括数据报中的目的IP地址。如果目的地址与自己的一个IP地址匹配,并且数据报头部(IP不检测有效载荷)没有错误,则检测8位的IPv4协议字段(在IPv6中称为下一个头部字段),以决定接下来调用哪个协议来处理。常见的值包括1(ICMP)、2(IGMP)、4(IPv4)、6(TCP)和17(UDP)。数值4(和41,表示IPv6)的含义是有趣的,因为它表示一个IP数据报可能出现在另一个IP数据报的有效载荷中。它违反了分层和封装的原有概念,但是作为隧道技术的基础。
如果网络层(IPv4或IPv6)认为传入的数据报有效,并且已经确定正确的传输层协议,则将数据报(必要时由分片重组而成)交给传输层处理。在传输层中,大部分协议(包括TCP和UDP)通过端口号将复用分解到适当的应用。
端口号是16位的非负整数(范围是0~65535)。这些数字是抽象的,在物理上没有任何东西。相反,每个IP地址有65536个可用的端口号,每个传输协议可使用这些端口号(在大多数情况下),它们被用于确定正确的接收数据的具体服务。对于客户机/服务器应用,一台服务器首先“绑定”到一个端口号,然后一个或多个客户机可使用某种特定的传输协议与一台服务器上的端口号建立连接。从这个意义上来说,端口号的功能更像电话号码的扩展,差别是它们通常是由某个标准来分配。
标准的端口号由Interent号码分配机构(IANA)分配。这组数字被划分为特定范围,包括熟知端口号(0~1023)、注册端口号(1024~49151)和动态/私有端口号(49152~65535)。
熟知端口用于识别很多众所周知的服务,例如安全外壳协议(SSH,端口22)、FTP(端口20和21)、Telnet远程终端协议(端口23)、电子邮件/简单邮件传输协议(SMTP,端口25)、域名系统(DNS,端口53)、超文本传输协议或Web(HTTP和HTTPS,端口80和443)、交互式邮件访问协议(IMAP和IMAPS,端口143和993)、简单网络管理协议(SNMP,端口161和162)、轻量级目录访问协议(LDAP,端口389),以及其他几种服务。拥有多个端口的协议(例如HTTP和HTTPS)通常使用不同的端口号,这取决于是否将传输层安全(TLS)与基础的应用层协议共同使用。
在TCP/IP中,每台计算机(包括路由器)的每个链路层接口至少有一个IP地址。IP地址足以识别主机但不方便被人们记忆或操作。在TCP/IP环境中,DNS是一个分布式数据库,提供主机名和IP地址之间的映射(反之亦然)。域名建立是有层次的,以.com、.org、.gov、.in、.uk、和.edu等域结尾。DNS是一个应用层协议,因此它的运行依赖于其他协议。
执行域名操作的应用可以调用一个标准的API函数,将需要查找的IP地址(或地址)对应到一个主机名。同样,另一个函数提供反向查找功能,为一个给定的IP地址查找对应的主机名。
Internet(因特网)已发展成为由很多网络互联起来的网络集合。internet表示使用常见协议族互联的多个网络。Internet表示可使用TCP/IP通信的世界范围的主机集合,Internet是一个internet,反过来说是错误的。
网络互联最容易的方式是构造一个由路由器连接两个或多个网络的互联网络。路由器通常是连接网络的一台专用设备,其优点是提供很多不同物理网络的连接,例如以太网、Wi-Fi、点到点链路、DSL、电缆Internet服务等。
【路由器又被称为IP路由器,但我们将使用路由器这个术语。这些设备在历史上曾被称为网关,这个术语用于很多比较旧的TCP/IP文献中。当前的网关术语用于表示应用层网关(ALG),它为一个特定应用(通常是电子邮件或文件传输)连接两个不同的协议族(TCP/IP的IBM的SNA)。】
内联网是一个用于描述专用互联网络的术语,它通常由一个商业机构或其他企业来运行。大多数情况下,内联网提供的网络资源只供特定企业的成员使用。用户可使用虚拟专用网(VPN)连接到例如企业内联网。VPN有助于保证内联网中潜在的敏感信息资源只供授权用户访问,它通常使用前面提到的隧道概念。
很多情况下,一个企业或商业机构可能希望建立一个网络,其中包含可供合作伙伴或其他相关公司通过Internet访问的服务器。这种涉及VPN的网络通常被称为外联网,由连接在提供服务的企业防火墙之外的计算机组成。
我们需要使用网络应用来提供服务或执行计算。网络应用的典型结构基于少数几种模式。最常见的模式是客户机/服务器模式和对等模式。
客户机/服务器模式:
大多数网络应用被设计为一端是客户机,而另一端是服务器。服务器为客户机提供某类服务,例如访问服务器主机中的文件。我们可以将服务器分为两类:迭代和并发。
迭代服务器经过以下步骤:等待客户机请求到达、处理客户机请求、将响应发送给请求的客户机、回到等待客户机请求到达。
并发服务器经过以下步骤:等待客户机请求到达、启用一个新服务器实例来处理客户机请求、回到等待客户机请求到达。
对等模式:
有些应用以更分布式的形式设计,其中没有专门的服务器。这种应用称为对等或P2P应用,一组P2P应用共同形成一个应用网络,也称为覆盖网络。P2P网络的一个主要问题是发现服务。
无论是P2P或客户机/服务器,都需要表述其所需的网络操作(例如建立一个连接、写入或读取数据)。这通常由主机操作系统使用一个网络应用程序编程接口(API)来实现。
Internet体系结构交付IP数据报是基于目的地址,因此,恶意用户能在自己发送的每个IP数据报的源地址字段中插入任何IP地址,这种行为称为欺骗。生成的数据报被交付到目的地,但难以确定它的真实来源。
拒绝服务(DoS)攻击通常涉及消耗大量的重要资源,以致导致合法用户被拒绝服务。例如,向一台服务器发送大量IP数据报,使它花费所有时间处理接收的分组和执行其他无用的工作,这是一种类型的DoS攻击。有些DoS攻击可能涉及很多流量堵塞网络,导致其无法发送其他分组。这通常需要使用很多计算机来发送,并形成一个分布式DoS(DDoS)攻击。
未授权访问攻击涉及以未授权方式访问信息或资源。
虽然可在某层(例如Wi-Fi网络的链路层)启用加密,但只有主机到主机的加密(IP层或以上)能保护穿过多个网段,以及可能采用遍历方式到达最终目的地的IP数据报。
【总结:】
在TCP/IP中,网络层和传输层之间的区别至关重要:网络层(IP)提供了一个不可靠的数据报服务,必须由Internet中所有可寻址的系统来实现,而传输层(TCP和UDP)为端主机上运行的应用程序提供了端到端服务。主要的传输层协议有根本性的差异。TCP提供了带流量控制和拥塞控制的有序、可靠的流交付。除了用于多路分解的端口号和错误检测机制之外,UDP提供的功能基本没有超越IP。但是,与TCP不同,UDP支持组播交付。
每层都使用地址和分解标识符,用以避免混淆不同协议或相同协议的不同关联/连接。链路层多接入网络通常使用48位地址;IPv4使用32位地址,IPv6使用128位地址。TCP和UDP传输协议使用一系列不同的端口号。有些端口号由标准来分配,有些端口号是临时使用的,通常由客户端与服务器通信时使用。端口号并不代表任何实际内容,它们只是作为应用程序与对方通信的一种方式。
虽然端口号和IP地址通常足以识别Internet中的一个服务,但它们不方便人们记忆或使用(特别是IPv6地址)。因此,Internet使用了一种层次结构的主机名,可以通过DNS将主机名转换为IP地址(或者反过来),而DNS是一个运行在Interent上的分布式数据库应用程序。DNS已成为Interent基础设施中的重要组成部分,我们应尽力使它以更安全的方式运行。
互联网络(interent)是一个网络集合,其中最常见的基本设备是路由器,它被用于在IP层连接多个网络。Interent是一个遍布全球和互联近两亿用户的互联网络(在2010年)。专用的互联网络称为内联网,通常使用特殊设备(防火墙)连接Interent,它可以防止未授权的访问企图。