分类: LINUX
2010-05-13 14:29:22
TCP/IP协议,包含了一系列构成基础的。这些协议最早发源于美国国防部的项目。TCP/IP字面上代表了两个协议:TCP()和IP()。
,在的前身(ARPA网)中,TCP/IP协议取代了旧的(NCP,Network Core Protocol),从而成为今天的互联网的基石。最早的TCP/IP由Vinton Cerf和Robert Kahn两位开发,慢慢地通过竞争战胜了其他一些网络协议的方案,比如的。TCP/IP的蓬勃发展发生在上世纪的90年代中期。当时一些重要而可靠的工具的出世,例如页面描述语言和浏览器,导致了互联网应用的飞速发展。
随着互联网的发展,目前流行的协议(网际协议版本四)已经接近它的功能上限。IPv4最致命的两个缺陷在于:
TCP/IP成功的另一个因素在于对为数众多的低层协议的支持。这些低层协议对应 中的第一层(物理层)和第二层(数据链路层)。每层的所有协议几乎都有一半数量支持TCP/IP,例如: (Ethernet)、(Token Ring)、(FDDI)、(PPP)、、(Frame Relay)、、、等。
|
整个通信网络的任务,可以划分成不同的功能区块,即所谓的层级() 。用于互联网的协议可以比照进行分类。TCP/IP协议栈起始于第三层协议IP()。所有这些协议都在相应的文档中讨论及标准化。重要的协议在相应的文档中均标记了状态: “必须”(required) ,“推荐”(recommended) ,“可选”(elective) 。其他的协议还可能有“试验”(experimental) 或“历史”(historic) 的状态。”
所有的TCP/IP应用都必须实现IP和。对于一个(router)而言,有这两个协议就可以运作了,虽然从应用的角度来看,这样一个 意义不大。实际的路由器一般还需要运行许多“推荐"使用的协议,以及一些其他的协议。
几乎所有连接到互联网上的计算机上都存在的IPv4协议出生在1981年,今天的版本和最早的版本并没有多少改变。升级版IPv6的工作始于,目的在与取代IPv4。ICMP协议主要用于收集有关网络的信息查找错误等工作。
5. |
· · · · · · · · · · · · · · · · · · · · · · · · |
4. |
· · · · · · · |
3. |
( · ) · · · · · · · · · · · |
2. |
· · · · · · · · · · · · · · · · · |
1. |
· · · · · · · · |
TCP/IP参考模型是一个抽象的分层模型,这个模型中,所有的系列都被归类到4个抽象的"层"中。每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。
完成一些特定的任务需要众多的协议协同工作,这些协议分布在参考模型的不同层中的,因此有时称它们为一个协议栈。
TCP/IP参考模型为协议栈订身制作。其中IP协议只关心如何使得数据能够跨越本地网络边界的问题,而不关心如何利用传输媒体,数据如何传输。整个协议栈则负责解决数据如何通过许许多多个点对点通路(一个点对点通路,也称为一"跳", 1 hop)顺利传输,由此不同的网络成员能够在许多"跳"的基础上建立相互的数据通路。
如想分析更普遍的网络通信问题,ISO的也能起更好的帮助作用。
因特网协议组是一组实现支持和大多数商业网络运行的的。它有时也被称为TCP/IP,这个名称来源于其中两个最重要的协议:()和(),它们也是最先定义的两个协议。
同许多其他协议一样也可以看作一个多层组合,每层解决数据传输中的一组问题并且向使用这些低层服务的高层提供定义好的服务。高层逻辑上与用户更为接近,所处理更为抽象,它们依赖于低层将数据转换成最终能够进行物理控制的形式。
能够大致匹配到一些厂商喜欢使用的固定7层的。然而并不是所有这些层能够很好地与基于ip的网络对应(根据应用的设计和支持网络的不同它们确实是涉及到不同的层)并且一些人认为试图将对应到OSI会带来混淆而不是有所帮助。
人们已经进行了一些讨论关于如何将映射到到。由于和模型组不能精确地匹配,还没有一个完全正确的答案。
另外,下层还不具备能够真正占据真正层的位置的能力;在传输层和网络层之间还需要另外一个层(网络互连层)。特定网络类型专用的一些协议应该运行在网络层上,但是却运行在基本的硬件帧交换上。类似协议的例子有和(用来保持冗余的空闲状态直到真正需要它们)。然而,它们是本地协议并且在网络互连功能下面运行。不可否认,将两个组(更不用说它们只是运行在如等不同的互连网络协议上的逻辑上的网络层的一部分)整个放在同一层会引起混淆,但是OSI模型还没有复杂到能够做更好的工作。
下面的图表试图显示不同的TCP/IP和其他的协议在最初中的位置:
7 | 应用层 | 例如、、、、、、SSH、、、、、 |
6 | 表示层 | 例如、、、、 |
5 | 会话层 | 例如、TLS、、ISO 8327 / CCITT X.225、、、、、 |
4 | 传输层 | 例如、、、、、、 |
3 | 网络层 | 例如、、、、、、、、、、、 |
2 | 数据链路层 | 例如、、、、、、、、 |
1 | 物理层 | 例如、、、 |
通常人们认为OSI模型的最上面三层(应用层、表示层和会话层)在TCP/IP组中是一个应用层。由于TCP/IP有一个相对较弱的会话层,由 TCP和RTP下的打开和关闭连接组成,并且在TCP和UDP下的各种应用提供不同的端口号,这些功能能够被单个的应用程序(或者那些应用程序所使用的库)增加。与此相似的是,IP是按照将它下面的网络当作一个黑盒子的思想设计的,这样在讨论TCP/IP的时候就可以把它当作一个独立的层。
4 | 应用层 (OSI 5 到 7层) |
例如、、 (如和这样的路由协议,尽管由于各种各样的原因它们分别运行在TCP和UDP上,仍然可以将它们看作网络层的一部分) |
3 | 传输层 (OSI 4 和 5层) |
例如、、、 (如这样的路由协议,尽管运行在IP上也可以看作是网络层的一部分) |
2 | 网络互连层 (OSI 3层) |
对于TCP/IP来说这是(IP) (如和这样的必须协议尽管运行在IP上,也仍然可以看作是网络互连层的一部分;不运行在IP上) |
1 | 网络接口层 (OSI 1和2层) |
例如、、等。 |
该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。 是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。
一些特定的程序被认为运行在这个层上。它们提供服务直接支持用户应用。这些程序和它们对应的协议包括(The World Wide Web)、(文件传输)、(电子邮件)、SSH(安全远程登陆)、 (名称<-> IP 地址寻找)以及许多其他协议。
一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。
在传输层,应用程序最常用的是TCP或者UDP,并且服务器应用程序经常与一个相联系。服务器应用程序的端口由 (IANA)正式地分配,但是现今一些新协议的开发者经常选择它们自己的端口号。由于在同一个系统上很少超过少数几个的服务器应用,端口冲突引起的问题很少。应用软件通常也允许用户强制性地指定端口号作为。
连结外部的客户端程序通常使用系统分配的一个随机端口号。监听一个端口并且然后通过服务器将那个端口发送到应用的另外一个副本以建立对等连结(如上的文件传输)的应用也可以使用一个随机端口,但是应用程序通常允许定义一个特定的端口范围的规范以允许端口能够通过实现(NAT)的路由器映射到内部。
每一个应用层( 的最高层) 协议一般都会使用到两个传输层协议之一: 面向连接的和无连接的包传输的 。
常用的应用层协议有:
的协议,能够解决诸如可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。在TCP/IP协议组中,传输协议也包括所给数据应该送给哪个应用程序。
在TCP/IP协议组中技术上位于这个层的动态路由协议通常被认为是网络层的一部分;一个例子就是(IP协议89)。
(IP协议6)是一个“可靠的”、传输机制,它提供一种保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。这是它与UDP不同之处,这在实时数据流或者路由高丢失率应用的时候可能成为一个缺陷。
较新的也是一个“可靠的”、传输机制。它是面向纪录而不是面向字节的,它在一个单独的连结上提供了通过多路复用提供的多个子流。它也提供了多路自寻址支持,其中连结终端能够被多个IP地址表示(代表多个物理接口),这样的话即使其中一个连接失败了也不中断。它最初是为电话应用开发的(在上传输),但是也可以用于其他的应用。
(IP协议号17)是一个数据报协议。它是一个“best effort”或者“不可靠”协议——不是因为它特别不可靠,而是因为它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。如果一个应用程序需要这些特点,它必须自己提供或者使用。
UDP的典型性应用是如流媒体(音频和视频等)这样按时到达比可靠性更重要的应用,或者如查找这样的简单查询/响应应用,如果建立可靠的连结所作的额外工作将是不成比例地大。
目前正由IEFT开发。它提供TCP流动控制语义,但对于用户来说保留了UDP的数据报服务模型。
TCP和UDP都用来支持一些高层的应用。任何给定网络地址的应用通过它们的TCP或者UDP区分。根据惯例使一些大众所知的端口与特定的应用相联系。
是为如音频和视频流这样的实时数据设计的数据报协议。RTP是使用UDP包格式作为基础的会话层,然而据说它位于因特网协议栈的传输层。
正如最初所定义的,解决在一个单一网络上传输数据包的问题。类似的协议有和的。
随着思想的出现,在这个层上添加了附加的功能,也就是将数据从源传输到目的网络。这就牵涉到在网络组成的网上选择路径将数据包传输,也就是。
在因特网协议组中,完成数据从源发送到目的基本任务。IP能够承载多种不同的高层协议的数据;这些协议使用一个唯一的IP协议号进行标识。ICMP和IGMP分别是1和2。
一些IP承载的协议,如(用来发送关于IP发送的诊断信息)和(用来管理数据),它们位于IP层之上但是完成网络层的功能,这表明了因特网和OSI模型之间的不兼容性。所有的路由协议,如、 、和实际上也是网络层的一部分,尽管似乎它们应该属于更高的协议栈。
网络接口层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在的中控制,也可以在或者专用中控制。这将完成如添加准备发送、通过实际发送这样一些功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。
然而,链路层并不经常这样简单。它也可能是一个(VPN)或者隧道,在这里从网络层来的包使用和其他(或者同样的)协议组发送而不是发送到物理的接口上。VPN和隧道通常预先建好,并且它们有一些直接发送到物理接口所没有的特殊特点(例如,它可以加密经过它的数据)。由于现在链路“层”是一个完整的网络,这种协议组的递归使用可能引起混淆。但是它是一个实现常见复杂功能的一个优秀方法。(尽管需要注意预防一个已经封装并且经隧道发送下去的数据包进行再次地封装和发送)。
因特网协议组来自于二十世纪七十年代早期所作的工作。在构建了先驱之后,DARPA开始了其他数据传输技术的研究。1972年,被DARPA的雇佣,在那里他研究卫星数据包网络和地面无线数据包网络,并且意识到能够在它们之间沟通的价值。在1973年春天,已有的ARPANET网络控制程序(NCP)协议的开发者加入到Kahn为ARPANET设计下一代协议而开发开放互连模型的工作中。
到了夏天,Kahn和Cerf很快就开发出了一个基本的改进形式,其中网络协议之间的不同通过使用一个公用而隐藏起来,并且可靠性由主机保证而不是象ARPANET那样由网络保证。(Cerf 称赞和(网络的设计者)在这个设计上发挥了重要影响。)
由于网络的作用减少到最小的程度,就有可能将任何网络连接到一起,而不用管它们不同的特点,这样就解决了Kahn最初的问题。(一个流行的说法提到Cerf和Kahn工作的最终产品将在运行“两个罐子和一根弦”上,实际上它已经上。一个称为网关(后来改为以免与混淆)的计算机为每个网络提供一个接口并且在它们之间来回传输。
这个设计思想更细的形式由Cerf在斯坦福的网络研究组的–期间开发出来。(处于同一时期的诞生了协议组的早期网络研究工作也有重要的技术影响;人们在两者之间摇摆不定。)
DARPA于是与BBN、斯坦福和伦敦大学签署了协议开发不同硬件平台上协议的运行版本。有四个版本被开发出来——TCP v1、TCP v2、在1978年春天分成TCP v3和IP v3的版本,后来就是稳定的TCP/IP v4——目前因特网仍然使用的标准协议。
,两个网络之间的TCP/IP通信在斯坦福和伦敦大学(UCL)之间进行了测试。11月,三个网络之间的TCP/IP测试在美国、英国和挪威之间进行。在到1983年间,其他一些TCP/IP原型在多个研究中心之间开发出来。ARPANET完全转换到TCP/IP在1983年1月1日发生。
1984年,美国国防部将TCP/IP作为所有计算机网络的标准。1985年,因特网架构理事会举行了一个三天有250家厂商代表参加的关于计算产业使用TCP/IP的工作会议,帮助协议的推广并且引领它日渐增长的商业应用。
Kahn和Cerf由于他们对于美国文化做出的卓越贡献被授予。
在长期的发展过程中,IP逐渐取代其他网络。这里是一个简单的解释。IP传输通用数据。数据能够用于任何目的,并且能够很轻易地取代以前由专有数据网络传输的数据。下面是一个普通的过程:
如今,大多数商业操作系统包括TCP/IP栈并且缺省安装它们,对于大多数用户来说,没有必要去寻找它们的实现。TCP/IP包含在所有的商业Unix和Linux发布包中,同样也包含在Mac OS X和微软视窗和视窗服务器版本中。