See Also Internet Protocol List协议栈

Internet Protocol Suite

英特网协议套件(Internet Protocol Suite)是一套用于互联网和类似网络的通信协议,包含了最流行的广域网协议栈 。因为在本标准的第一个版本中所定义的输控制协议(Transmission Control Protocol)和网际协议(Internet Protocol)这两个最重要协议的缘故,它通常又被称作TCP/IP协议。TCP/IP模型也被称作DoD模型(Department of Defense Model)。这些协议最早发源于20世纪70年代美国国防部的ARPA网项目。

TCP/IP协议提供端到端的连接规范:数据应该如何被格式化(Formatted),选址(Addressed),传输(Transmitted),路由(Routed)和被目标接收(Received)。它被划分成以下四个抽象层被用于由高到低的进行分类所有的互联网协议:

  1. 应用层(Application Layer):包含进程到进程级的所有用于数据通信服务的协议;
  2. 运输层(Transport Layer):处理主机到主机的通信;
  3. 网络互联层 (Internet Layer):连接本地网络,从而建立网间链路;
  4. 网络接口层(Link Layer):包含对本地网络的通信技术;

IP协议栈

RFC1122中描述的数据封装

IPStackConnections.png

UDPEncapsulation.png

1. Internet Protocol List

Layer

Application layer

Transport layer

Internet layer

Link layer

Protocol

more

TCP/IP模型及相关协议由互联网工程任务组(IETF)进行维护 。

1. TCP/IP历史

1983年1月1日,在因特网的前身(ARPA网)中,TCP/IP协议取代了旧的网络控制协议(NCP,Network Control Protocol),从而成为今天的互联网的基石。最早的TCP/IP由文顿·瑟夫罗伯特·卡恩两位开发,慢慢地通过竞争战胜了其他一些网络协议的方案,比如国际标准化组织(ISO)的OSI模型。TCP/IP的蓬勃发展发生在1990年代中期。当时一些重要而可靠的工具的出世,例如页面描述语言(HTML)和浏览器Mosaic,导致了互联网应用的飞速发展。

由于TCP/IP协议对为数众多的低层协议的支持,在长期的发展过程中,IP逐渐取代其他网络。

随着互联网的发展,目前流行的IPv4协议(网际协议版本四)已经接近它的功能上限。IPv4最致命的两个缺陷在于:

2. TCP/IP协议栈组成

整个通信网络的任务,可以划分成不同的功能区块,即所谓的分层(layer)。用于互联网的协议可以比照TCP/IP参考模型进行分类。TCP/IP协议栈起始于第三层协议IP(网际协议)。所有这些协议都在相应的RFC文档中讨论及标准化。重要的协议在相应的RFC文档中均标记了状态:

2.1. 必须协议

所有的TCP/IP应用都必须实现IPICMP。对于一个路由器(router)而言,有这两个协议就可以运作了,虽然从应用的角度来看,这样一个路由器 意义不大。实际的路由器一般还需要运行许多“推荐”使用的协议,以及一些其他的协议。几乎所有连接到互联网上的电脑上都存在的IPv4协议出生在1981年,今天的版本和最早的版本并没有多少改变。升级版IPv6的工作始于1995年,目的在于取代IPv4。ICMP协议主要用于收集有关网络的信息查找错误等工作。

2.2. 范例:不同计算机运行的不同协议

3. TCP/IP参考模型

TCP/IP参考模型是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协议都被归类到4个抽象的"层"中:每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。

完成一些特定的任务需要众多的协议协同工作,这些协议分布在参考模型的不同层中的,因此有时称它们为一个协议栈

TCP/IP参考模型为TCP/IP协议栈订身制作。其中IP协议只关心如何使得数据能够跨越本地网络边界的问题,而不关心如何利用传输媒体,数据如何传输。整个TCP/IP协议栈则负责解决数据如何通过许许多多个点对点通路(一个点对点通路,也称为一"跳", 1 hop)顺利传输,由此不同的网络成员能够在许多"跳"的基础上建立相互的数据通路。

如想分析更普遍的网络通信问题,ISO的OSI模型也能起更好的帮助作用。

因特网协议族是一组实现支持因特网和大多数商业网络运行的协议栈的网络传输协议。它有时也被称为TCP/IP协议组,这个名称来源于其中两个最重要的协议:传输控制协议(TCP)和因特网协议(IP),它们也是最先定义的两个协议。

同许多其他协议一样网络传输协议也可以看作一个多层组合,每层解决数据传输中的一组问题并且向使用这些低层服务的高层提供定义好的服务。高层逻辑上与用户更为接近,所处理数据更为抽象,它们依赖于低层将数据转换成最终能够进行实体控制的形式。

网络传输协议能够大致匹配到一些厂商喜欢使用的固定7层的OSI模型。然而这些层并非都能够很好地与基于ip的网络对应(根据应用的设计和支持网络的不同它们确实是涉及到不同的层)并且一些人认为试图将因特网协议组对应到OSI会带来混淆而不是有所帮助。

3.1. 因特网协议栈中的层

人们已经进行了一些讨论关于如何将TCP/IP参考模型映射到到OSI模型。由于TCP/IP和OSI模型组不能精确地匹配,还没有一个完全正确的答案。

另外,OSI模型下层还不具备能够真正占据真正层的位置的能力;在传输层和网络层之间还需要另外一个层(网络互连层)。特定网络类型专用的一些协议应该运行在网络层上,但是却运行在基本的硬件帧交换上。类似协议的例子有地址解析协议生成树协议(用来保持冗余网桥的空闲状态直到真正需要它们)。然而,它们是本地协议并且在网络互连功能下面运行。不可否认,将两个组(更不用说它们只是运行在如ICMP等不同的互连网络协议上的逻辑上的网络层的一部分)整个放在同一层会引起混淆,但是OSI模型还没有复杂到能够做更好的工作。

下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:

7

应用层

例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP

6

表示层

例如XDR、ASN.1、SMB、AFP、NCP

5

会话层

例如ASAP、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets

4

传输层

例如TCP、UDP、TLS、RTP、SCTP、SPX、ATP、IL

3

网络层

例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25

2

数据链路层

例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP

1

实体层

例如线路、无线电、光纤

3.2. TCP/IP VS OSI模型

通常人们认为OSI模型的最上面三层(应用层、表示层和会话层)在TCP/IP组中是一个应用层。由于TCP/IP有一个相对较弱的会话层,由TCP和RTP下的打开和关闭连接组成,并且在TCP和UDP下的各种应用提供不同的端口号,这些功能能够被单个的应用程序(或者那些应用程序所使用的库)增加。与此相似的是,IP是按照将它下面的网络当作一个黑盒子的思想设计的,这样在讨论TCP/IP的时候就可以把它当作一个独立的层。

4

应用层

例如HTTP、FTP、DNS

(OSI5~7):应用、表示、会话

(如BGP和RIP这样的路由协议,尽管由于各种各样的原因它们分别运行在TCP和UDP上,仍然可以将它们看作网络层的一部分)

3

传输层

例如TCP、UDP、RTP、SCTP

(OSI4层)传输

(如OSPF这样的路由协议,尽管运行在IP上也可以看作是网络层的一部分)

2

网络互连层

对于TCP/IP来说这是因特网协议(IP)

(OSI3层)网络

(如ICMP和IGMP这样的必须协议尽管运行在IP上,也仍然可以看作是网络互连层的一部分;ARP不运行在IP上)

1

网络接口层

N/A

(OSI1和2层):数据链路、实体

例如以太网、Wi-Fi、MPLS等。

3.3. 应用层(Application Layer)协议

该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。

应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。

一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。

3.3.1. 关于端口

在传输层,应用程序最常用的是TCP或者UDP,并且服务器应用程序经常与一个公开的端口号相联系。服务器应用程序的端口由互联网号码分配局(Internet Assigned Numbers Authority)正式地分配,一些新协议的开发者经常选择它们自己的端口号。

应用软件通常也允许用户强制性地指定端口号作为运行参数。连结外部的客户端程序通常使用系统分配的一个随机端口号。监听一个端口并且通过服务器将那个端口发送到应用的另外一个副本以建立对等连结(如IRC上的dcc文件传输)的应用也可以使用一个随机端口,但是应用程序通常允许定义一个特定的端口范围的规范以允许端口能够通过实现网络地址转换(NAT)的路由器映射到内部。

3.3.2. 应用层协议介绍

每一个应用层(TCP/IP参考模型 的最高层)协议一般都会使用到两个传输层协议之一: 面向连接的TCP传输控制协议和无连接的包传输的UDP用户数据报文协议 。

3.3.2.1. 基于TCP上的协议


HTTP Based


Others

3.3.2.2. 基于UDP上的协议

3.3.2.3. 其他应用层协议

3.4. 传输层(Transport Layer)协议

传输层的协议,能够解决诸如端到端可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。在TCP/IP协议组中,传输协议也包括所给数据应该送给哪个应用程序。

3.4.1. TCP

TCP(IPv6)是一个“可靠的”、面向连结的传输机制,它提供一种可靠的字节流保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。这是它与UDP不同之处,这在实时数据流或者路由高网络层丢失率应用的时候可能成为一个缺陷。

3.4.2. UDP

UDP(User Datagram Protocol)是一个无连接的数据报协议。它是一个“尽力传递”(best effort)或者说“不可靠”协议。不是因为它特别不可靠,而是因为它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。如果一个应用程序需要这些特性,那它必须自行检测和判断,或者使用TCP协议。

UDP is typically used for applications such as streaming media (audio, video, Voice over IP etc.) where on-time arrival is more important than reliability, or for simple query/response applications like DNS lookups, where the overhead of setting up a reliable connection is disproportionately large. Real-time Transport Protocol (RTP) is a datagram protocol that is designed for real-time data such as streaming audio and video.

3.4.3. SCTP

较新的SCTP也是一个“可靠的”、面向连结的传输机制。它是面向纪录而不是面向字节的,它在一个单独的连结上提供了通过多路复用提供的多个子流。它也提供了多路自寻址支持,其中连结终端能够被多个IP地址表示(代表多个实体接口),这样的话即使其中一个连接失败了也不中断。它最初是为电话应用开发的(to transport SS7 over IP),但是也可以用于其他的应用。

UDP的典型性应用是如流媒体(音频和视频等)这样按时到达比可靠性更重要的应用,或者如DNS查找这样的简单查询/响应应用,如果建立可靠的连结所作的额外工作将是不成比例地大。

3.4.4. DCCP

DCCP目前正由IEFT开发。它提供TCP流动控制语义,但对于用户来说保留了UDP的数据报服务模型。

TCP和UDP都用来支持一些高层的应用。任何给定网络地址的应用通过它们的TCP或者UDP端口号区分。根据惯例使一些大众所知的端口与特定的应用相联系。

3.5. 网络互连层(Internet Layer)协议

正如最初所定义的,网络层解决在一个单一网络上传输数据包的问题。类似的协议有X.25和ARPANET的Host/IMP Protocol。

随着因特网思想的出现,在这个层上添加了附加的功能,也就是将数据从源网络传输到目的网络。这就牵涉到在网络组成的网上选择路径将数据包传输,也就是因特网。

在因特网协议组中,IP完成数据从源发送到目的的基本任务。IP能够承载多种不同的高层协议的数据;这些协议使用一个唯一的IP协议号进行标识。ICMP和IGMP分别是1和2。

3.5.1. IP

Internet Protocol(IP),或称互联网协议,是用于报文交换网络的一种面向数据的协议

3.5.2. ICMP

Internet Control Message Protocol (ICMP):用来发送关于IP发送的诊断信息

3.5.3. IGMP

因特网组管理协议(Internet Group Management Protocol或简写IGMP)是用于管理因特网协议多播组成员的一种通信协议。IP主机和相邻的路由器利用IGMP来建立多播组的组成员。像ICMP用于单播连接一样,IGMP也是IP多播说明的一个完整部分。

3.5.4. ECN

ECN是一个IP协议和TCP协议的扩展,详细定义请见RFC 3168 (2001)

ECN允许端到端的网络拥塞通告,不同于通常我们使用的方式,即通过丢包来判断拥塞。ECN作为一个可选项,需要通信双方同时支持。当ECN被成功的协商后,一个支持ECN的路由器可以在IP头设置一个代替丢包的位来预警即将发生的拥塞。需要注意的是,有些老的网络设备会丢弃带有ECN位的包而不是仅仅忽略这个位。

网络接口层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在网卡的软件驱动程序中控制,也可以在韧体或者专用芯片中控制。这将完成如添加报头准备发送、通过实体媒介实际发送这样一些数据链路功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。

3.6.1. ARP

ARP协议(Address Resolution Protocol),或称地址解析协议。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。他是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被ICMPv6所替代。

3.6.2. NDP

邻居发现协议(Neighbor Discovery Protocol 简称NDP或ND)是TCP/IP协议栈的一部分,主要与IPv6共同使用。它工作在数据链路层,负责在链路上发现其他节点和相应的地址,并确定可用路由和维护关于可用路径和其他活动节点的信息可达性。(RFC 4861, 2007)

4. 参考文献


CategorySystem

MainWiki: Internet_Protocol_Suite (last edited 2013-04-10 17:25:00 by twotwo)