TCP/IP协议——TCP/IP协议栈及框架
TCP/IP协议同ISO/OSI模型一样,也可以安排成栈形式。但这个栈不同于ISO/OSI版本,比ISO/OSI栈少,所以又称之为短栈。另外,需要知道的是:TCP/IP协议栈只是许多支持ISO/OSI分层模型协议栈的一种,是一个具体的协议栈。
对于TCP/IP协议栈划分为几层更合适,多年来专家们一直未达成共识,大部分对TCP/IP协议栈的描述都假定它占据了协议结构的4到5个功能层。下面我们对这两种主流的分层方法分别进行描述。
1 基于4层的TCP/IP协议栈基本描述
基于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数据报的方式(即流与分组),使得系统能够把数据传送给与网络直接相连的设备。
网络存取层的协议与较高层协议不一样,它必须知道物理网络的各种细节,以便准确地格式化传输的数据,使其遵守网络规定。因此,网络存取层的协议种类繁多,每一个协议都对应一种物理网络标准。这些协议常常由设备驱动程序和相关的程序结合而成,其内含的API除将IP数据封装成能在网络中传送的单元——帧外,还能将IP地址转换成为网络使用的物理地址。典型的协议实例有RFC 826(地址转换协议 ARP)、RFC 894(以太网上IP数据报传输标准)等。
1.2 网络互连层 (Internet Layer)
网络互连层(又称网际层)位于网络存取层之上,由互连网协议(IP)、互连网控制报文协议(ICMP)和互连网组管理协议(IGMP)等协议组成。IP是TCP/IP的核心,也是网络互连层中最重要的协议,它提供基本的分组传送服务,是构建TCP/IP网络的基础。因为,无论是IP上层还是IP下层的协议,也不管数据是输入还是输出,目的地在何方,它们都使用IP来传递数据。概括起来,IP主要完成以下任务:
- 定义数据报,数据报是Internet中传输的基本单元。
- 定义Internet地址系统。
- 把数据报分解或重组成易于在网络中传输的结构。
- 在网络存取层和传输层之间传递数据。
- 给远端主机的数据报指定路由。
- 完成数据报的拥挤控制和信息控制。
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地址。
TCP/IP协议——TCP/IP协议栈及框架的更多相关文章
- IP协议号 IP首部中有8位协议号,用于指明IP的上层协议.
IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网 ...
- TCP/IP 协议:IP 协议
首先来看一下IP协议在实际中的位置: 我们只关系流程,不关系当前具体的服务类型 1.IP协议概述 作用: 从上图或从应用层->运输层->网络层->链路层来看,IP协议属于网络层,也就 ...
- TCP/IP协议之IP层
TCP/IP协议的结构参见下图.有应用层,运输层,网络层,链路层. 但是如果更细化的话,其实还有几层没在这上面体现出来. 1 表示层:数据格式化,代码转换,加密. 没有协议 2 会话层:解除或者建立与 ...
- TCP/IP协议--TCP协议概括和TCP连接的建立和终止
TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...
- TCP/IP协议族——IP工作原理及实例具体解释(上)
IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...
- tcp/iP协议族——IP工作原理及实例具体解释(下)
IP协议具体解释 上一篇文章文章主要介绍了IP服务的特点,IPv4头部结构IP分片.并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程.本文主要介绍IP路由,IP ...
- 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议
摘要: 本文简单介绍了网络层理论知识,详细讲解了IP数据报各个字段,并从Wireshark俘获分组中选取IP数据报进行分析,也阐述了分组和分片的区别. 一.IPv4数据报 网络层是 ...
- TCP/IP协议 | TCP协议 | UDP协议 | 三次握手四次挥手
TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP.SMTP.TCP.UDP.IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP ...
- ip协议,IP,子网掩码,ping命令是什么
ip协议: 定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示 IP地址:是给每个连接在Internet上的主机分配的一个32bit ...
随机推荐
- spring自定义类中@AutoWired标识的元素注入为null
最近在做项目的时候,发现程序运行的时候有一个nullpointer exception,一脸懵逼因为感觉程序没什么逻辑.后来发现是因为new出来的component不会自动注入它的元素. 现象:@Co ...
- 很漂亮的Wince开发控件库Beemobile简介【转】
https://blog.csdn.net/xiaoyong_net/article/details/80467653 官网地址:http://beemobile4.net/products/ipac ...
- FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 【Spark】SparkStreaming-Tasks-数量如何设置?
SparkStreaming-Tasks-数量如何设置? sparkstreaming task 数量设置_百度搜索 spark内核揭秘-14-Spark性能优化的10大问题及其解决方案 - star ...
- 图形数据库 Neo4j 开发实战
https://www.ibm.com/developerworks/cn/java/j-lo-neo4j/ Neo4j 是一个高性能的 NoSQL 图形数据库.Neo4j 使用图(graph)相关的 ...
- window下配置Apache2服务器
1:去Apache.org下载安装包 http://httpd.apache.org/ 2:解压到某一个目录 3:修改httpd.conf(Apache的解压目录和端口号) 4:管理员方式启动cmd执 ...
- Anroid 解决小米和魅族不能在mac上调试
第一种方法 1.mac->关于本机->系统报告->usb->copy厂商ID** 2.cmd->echo " 0x2a45" >> ~/. ...
- 10.2.1itools导入不了歌曲
首先下载iTools 4抢先版,下载地址:http://update2.itools.hk/api/v1/redirect?p=itools4&c=pc_Thinksky 点击电脑桌面左下方“ ...
- C++ 对象的定义
1.考虑下面的方法void Print(const Student& s){ printf("Student[%s:%d]\n", s._Name.c_str(), s._ ...
- 程序员的福音,AI可以自动修复bug了!
人工智能完全学会自己编程,可能说起来还有一种科幻感,但 AI 帮程序员找 bug 这件事,已经达到了不错的水平. 北京大学.微软亚洲研究院和中国电子科技大学就一起尝试着让 AI 找 bug.微软亚洲研 ...