TCP/IP协议同ISO/OSI模型同样,也能够安排成栈形式。但这个栈不一样于ISO/OSI版本,比ISO/OSI栈少,因此又称之为短栈。另外,须要知道的是:TCP/IP协议栈只是许多支持ISO/OSI分层模型协议栈的一种,是一个具体的协议栈。编程
对于TCP/IP协议栈划分为几层更合适,多年来专家们一直未达成共识,大部分对TCP/IP协议栈的描述都假定它占据了协议结构的4到5个功能层。下面咱们对这两种主流的分层方法分别进行描述。网络
1 基于4层的TCP/IP协议栈基本描述spa
基于4层的TCP/IP协议栈最具说服力的是:这一观点是由TCP/IP原始标准的创立者——美国国防部提出的,它与ISO/OSI参考模型的对应关系以下图:设计
图1 TCP/IP协议栈层次结构与ISO/OSI参考模型的对应关系接口
如图1所示,TCP/IP协议栈从低层开始,依次为网络存取层、网络互连层、传输层和应用层,具体描述以下:路由
1.1 网络存取层(Network Access Layer)网络编程
网络存取层(又称网络层),位于TCP/IP协议栈的最低层,该层中的协议提供了数据传送的方法,使得系统能够经过链接的网络将数据传送到其它设备,并定义了如何利用网络来传送IP数据报。它基本上包括了ISO/OSI模型中的数据链路层和物理层的全部功能。TCP/IP网络存取层定义了网络传送IP数据报的方式(即流与分组),使得系统可以把数据传送给与网络直接相连的设备。io
网络存取层的协议与较高层协议不同,它必须知道物理网络的各类细节,以便准确地格式化传输的数据,使其遵照网络规定。所以,网络存取层的协议种类繁多,每个协议都对应一种物理网络标准。这些协议经常由设备驱动程序和相关的程序结合而成,其内含的API除将IP数据封装成能在网络中传送的单元——帧外,还能将IP地址转换成为网络使用的物理地址。典型的协议实例有RFC 826(地址转换协议 ARP)、RFC 894(以太网上IP数据报传输标准)等。class
1.2 网络互连层 (Internet Layer)登录
网络互连层(又称网际层)位于网络存取层之上,由互连网协议(IP)、互连网控制报文协议(ICMP)和互连网组管理协议(IGMP)等协议组成。IP是TCP/IP的核心,也是网络互连层中最重要的协议,它提供基本的分组传送服务,是构建TCP/IP网络的基础。由于,不管是IP上层仍是IP下层的协议,也无论数据是输入仍是输出,目的地在何方,它们都使用IP来传递数据。归纳起来,IP主要完成如下任务:
IP是一个“无链接协议”,它在传输数据以前不交换控制信息来创建端到端的链接,并且还要依靠其它层的协议提供错误检测和错误恢复。但这并不能说明IP协议是不可信赖的,事实上,它能够正确的将数据传送到已链接的网络,只是它并不能检验数据是否被正确地接收。
1.3 传输层( Transport Layer)
传输层也称主机到主机的传输层,位于TCP/IP栈的第3层,它为应用层提供可靠的或不可靠的端到端服务。TCP(传输控制协议)和UDP(用户数据报协议)是传输层中两个最重要的协议。它们都为应用层和网络互连层传送数据,两者的区别在于:TCP是一种可靠的、面向链接的、字节流协议,它利用端到端错误检测与纠正功能提供可靠的数据传输服务,由于它能验证数据在网络上是否以合适的序列正确地传输;而UDP是一个不可靠的无链接数据报协议,就像IP同样,它能为应用程序提供低开销的无链接数据报传输服务。
总之,TCP的优点在于可靠,但开销大;而UDP比较适合于传输的数据量少及使用“查询——响应”方式的应用程序的服务。
1.4 应用层(Application Layer)
应用层位于TCP/IP协议栈的顶层,它为用户提供各类网络服务,如文件传输、远程登陆、电子邮件等。同时,应用层包含与具体应用程序相关的全部细节。
对于网络软件工程师而言,你在应用层的工做是将信息传到协议栈的下一合适层。协议栈的每一层要完成各自的功能。也就是说,TCP/IP协议将共同工做,完成地址转换、寻址和数据传输工做。为了和协议栈上的协议通讯,必须知道有哪些协议可用,并知道它们在协议栈中的位置和功能。正常状况下应用程序将和传输协议的某一个协议(TCP或UDP)进行通讯,或不使用传输层服务,直接与网络互连层的IP打交道(如外部网关协议 EGP)。
2 基于5层的TCP/IP协议栈基本描述
相对于ISO/OSI模型,基于5层的TCP/IP协议比基于4层的TCP/IP协议更容易理解,具体的分层方案以下图2:
图2 TCP/IP协议栈层次结构与ISO/OSI参考模型的对应关系
比较图2和图1能够看出,从顶层向下三层(应用层、传输层和网络互连层)对于基于5层的TCP/IP和基于4层的TCP/IP其功能都是同样的,这里不在赘述。除此以外,基于5层的TCP/IP在低层比基于4层的TCP/IP分层更详细,即用物理层和链路层两层来表示上面讲到的网络存取层。
2.1 物理层
TCP/IP协议栈的物理层与ISO/OSI模型的物理层相同——它包括携带网络数据的传输媒体介质,这种介质一般是双绞线、同轴电缆或标准串口线等,网络设计人员必须知道网络介质的传输特性。
2.2 链路层
链路层包括一个硬件接口和两个协议模块:地址解析协议(ARP)和反向地址解析协议(RARP)。链路层处理物理层和网络互连层的数据交换,并向网络互连层隐藏物理层的执行细节。当链路层完成其工做时,网络互连层的协议不关心网络是使用以太网技术仍是令牌环技术,网络互连层只是简单地将数据传给链路层,而后由链路层处理全部进一步的数据传输。
综上所述,不论采用哪一种分层方式,其核心和功能是同样的,特别是在应用层。应用层的初级网络用户对分层几乎不感兴趣,但要进行网络编程的人必须清楚这一点:当用户启动了某个应用层服务以后,该应用要首先创建一个到某特定机器的链接,随后告诉目的机器本次链接的操做意图,并控制整个操做过程。在源计算机系统中,应用层将要发送的信息交给服务层的TCP(或UDP),TCP经过增长TCP协议所规定的报头来确保信息正确地传输到目的地。而后,TCP把包括目的地址在内的报头和用户数据交给网络互连层的IP,IP负责为信息选择路由。因为 TCP和IP处理与网络有关的细节,因此应用层协议能够将一个网络链接当作一个简单的字节流,而没必要描述与通讯有关的任何细节。
对网络通讯软件设计者而言,一个网络链接可由两对元素彻底刻画:源主机的IP地址和应用程序端口号;目的主机的IP地址和应用程序端口号。为了保证使用TCP/IP 协议的网络中两台主机的正常链接,应禁止使用相同的IP地址和端口号,特别是IP地址。