计算机网络协议层次(转发:http://blog.csdn.net/gavin_john/article/details/53186570)
计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。计算机网络协议同我们的语言一样,多种多样。
为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议。
一个协议层能够用软件、硬件或者两者的结合来实现。比如HTTP和SMTP这样的应用层协议几乎总是在端系统中用软件实现的,传输层协议也是如此。因为物理层和数据链路层负责处理跨越特定链路的通信,它们通常是实现在与给定的链路相联系的网络接口卡(比如以网络或WIFI接口卡)中。网络层通常是硬件和软件实现的混合体。
1.网络层次划分
将所有的协议综合起来,各个层次的所有协议被称为协议栈。因特网的协议栈由5个层次组成:物理层、链路层、网络层、传输层和应用层。这个划分方法称为TCP/IP五层协议。除此之外,还有OSI七层模型和TCP/IP四层协议。它们之间的对应关系如下:
当然比较常用的是TCP/IP五层协议。
1.1 应用层
应用层是网络应用程序以及它们的应用层协议存留的地方。因特网应用层包括许多协议,例如HTTP(Web应用的主要协议)、SMTP(邮件传输)和FTP(文件传送)等。再比如我们每天都在使用的DNS域名系统。
应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另外一个端系统中的应用程序交换信息的分组。
我们把位于应用层的信息分组称为报文。
1.2 传输层
因特网的传输层在应用程序端点之间传送应用层报文。在因特网中,有TCP和UDP两个传输层协议。
TCP向它的应用程序提供了面向连接的服务,这种服务包括了应用层报文向目的地的确保传递和流量控制。TCP也将长报文划分成短报文,并提供拥塞控制机制,因此,当网络拥塞时,发送方可以抑制其传输速率。
UDP协议向它的应用程序提供无连接服务。这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。
我们把传输层分组称为报文段。
1.3 网络层
因特网的网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机。在一台源主机中的因特网传输层协议(TCP或者UDP)向网络层递交传输层报文段和目的地址。
网络层包括著名的IP协议,该协议定义了在数据报中的各个字段以及端系统和路由器如果作用于这些字段。网络层也包括决定路由的路由选择协议,它使得数据报根据该路由从源传输到目的地。
1.4 链路层
网络层通过源和目的地之间的一系列路由器路由数据报,为了将分组从一个结点移动到路径的下一个结点,网络层必须依靠链路层的服务。特别是在每个结点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个结点,在下一个结点,链路层将数据报上传给网络层。
由链路层提供的服务取决于应用于该链路的特定的链路层协议,比如我们常见的以太网,WIFI等。
因为数据报从源到目的地传送通常要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。例如,一个数据报可能被一段链路上的以太网和下一段链路上的PPP所处理。网络层将受到来自每个不同链路的链路层协议的服务。
我们把链路层分组称为帧。
1.5 物理层
链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。物理层的协议是和链路相关的,并且进一步与该链路的实际传输媒体相关。比如,以太网具有许多物理层协议:一个是关于双绞铜线的,另一个是关于同轴电缆的,还有是关于光纤的等等。
2.封装
上图显示了这样一条物理路径:数据从发送端系统的协议栈向下,经过链路层交换机和路由器的协议栈,进而向上到达接收端系统的协议栈。
我们需要知道的是,路由器和链路层交换机都是分组交换机,它们不实现协议栈中的所有层次,链路层交换机实现了第一层和第二层;路由器实现了第一层到第三层。这意味着,路由器能够实现IP协议(即第三层协议),而链路层交换机则不能,于是链路层交换机不能识别IP地址,但是能够识别第二层地址,比如MAC地址。
但是,因特网中的所有主机都实现了所有5个层次的协议。
上图的过程也说明了一个重要的概念:封装。
在发送主机端,一个应用层报文被传送给传输层。传输层收到报文之后,在报文上附上附加信息,即所谓的传输层首部信息,该首部信息将被接收端的传输层使用。应用层报文和传输层首部信息一起构成了传输层报文段,传输层报文段因此封装了应用层报文。
传输层则向网络层传递该报文段,网络层增加了网络层首部信息,比如源和目的端系统的地址等,由此产生了网络层数据报。
该数据报接下来被传递给链路层,链路层增加它自己的链路层首部信息,创建了链路层帧。
所以,我们看到在每一层,一个分组都具有两种类型的字段:首部字段和有效载荷字段。而有效载荷即来自于上一层的分组。
其实说白了,发送端就是对应用层数据一层一层加头的过程,到接收端后,接收端再一层一层去掉头部信息,然后交给对应的应用程序。
计算机网络协议层次(转发:http://blog.csdn.net/gavin_john/article/details/53186570)的更多相关文章
- 网络数据包最大长度 MTU 分片 转发https://blog.csdn.net/singular2611/article/details/52513406
1.数据链路层对数据帧的长度都有一个限制,也就是链路层所能承受的最大数据长度,这个值称为最大传输单元,即MTU.以以太网为例,这个值通常是1500字节. 2.对于IP数据包来讲,也有一个长度,在IP包 ...
- ubuntu下设置jupyter notebook 2017年07月29日 19:28:34 小旋锋 阅读数:8329 标签: ubuntu 更多 个人分类: python 二三事 来源:http://blog.csdn.net/suzyu12345/article/details/51037905 Ipython Notebook现在已经改名为Ipython jupyter,是最知名最好用的
ubuntu下设置jupyter notebook 来源:http://blog.csdn.net/suzyu12345/article/details/51037905 Ipython No ...
- RTP协议分析(转自:http://blog.csdn.net/bripengandre/article/details/2238818)
RTP协议分析 第1章. RTP概述 1.1. RTP是什么 RTP全名是Real-time Transport Protocol(实时传输协议).它是IETF提出的一个标准,对应的RFC文 ...
- Socket的用法——NIO包下SocketChannel的用法 ———————————————— 版权声明:本文为CSDN博主「茶_小哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ycgslh/article/details/79604074
服务端代码实现如下,其中包括一个静态内部类Handler来作为处理器,处理不同的操作.注意在遍历选择键集合时,没处理完一个操作,要将该请求在集合中移除./*模拟服务端-nio-Socket实现*/pu ...
- (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585
为梦飞翔 (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585 这里有一个连接,amf0和amf3的库, ...
- 向txt文件中写入内容(覆盖重写与在末尾续写+FileOutputStream与FileWriter)(转发:https://blog.csdn.net/bestcxx/article/details/51381460)
!!!! 读取txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** ...
- 手把手教你如何玩转消息中间件(ActiveMQ) https://blog.csdn.net/cs_hnu_scw/article/details/81040834
#情景引入小白:起床起床起床起床....快起床~我:怎么了又,大惊小怪,吓到我了.小白:我有事有事想找你,十万火急呢~~我:你能有什么事?反正我不信..那你说说看~~小白:就是我有两个小表弟,叫大白和 ...
- http://blog.csdn.net/zhanglvmeng/article/details/11928469
本系列主要结合<PHP和MYSQL WEB开发 第四版>,在阅读中提出自己认为比较重要的一些问题,以加深对知识的了解程度. 1.简短.中等以及冗长风格的表单变量 $name; //简短风格 ...
- Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)
开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用 ...
随机推荐
- Python——os.path.dirname(__file__) 与 os.path.join(str,str)
Python os.path.dirname(__file__) Python os.path.join(str,str) (1).当"print os.path.dirname(__f ...
- 关于解决 http 状态码200,php 文件有输出,但是不显示模板文件的问题
一 问题 给公司搭建一个在线测试站点之后,在浏览器地址栏输入 "http://xxx.xxx.xxx/index.php",页面什么都没显示.调出浏览器的开发者工具查看,http ...
- 解决zabbix“ZBX_NOTSUPPORTED: Timeout while executing a shell script”报错
如题所示,在zabbix_server使用zabbix_get获取自定义“UserParameter”对应的脚本的数据时,出现了如题所示的报错信息 [root@nmp01 scripts]# /usr ...
- CSRF介绍与应对以及Java代码示例
详细信息看这里:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 简介 CSRF(Cross Site Request Forg ...
- UVALive - 4255 - Guess (拓扑排序)
Guess 题目传送:Guess 白书例题 注意拓扑排序时,,入度同一时候为0的前缀和须要赋值为同一个数(这个数能够随机取.由于前缀和是累加的,每个a的数值都仅仅和前缀和之差有关).,由于此时能够看成 ...
- lua学习笔记(十一)
面向对象编程 对象的实现 在lua中table就是一种对象 1.有自己的状态 2.有自己的唯一标识self 3.有自己的生命周期 ...
- u3D大场景的优化
首先介绍下draw call(这个东西越少你的游戏跑的越快): 在游戏中每一个被展示的独立的部分都被放在了一个特别的包中,我们称之为“描绘指令”(draw call),然后这个包传递到3D部分在屏幕上 ...
- MapReduce源码分析之JobSplitWriter
JobSplitWriter被作业客户端用于写分片相关文件,包括分片数据文件job.split和分片元数据信息文件job.splitmetainfo.它有两个静态成员变量,如下: // 分片版本,当前 ...
- Mongodb搭建
1.配置yum源,创建/etc/yum.repos.d/mongodb-org-3.2.repo文件,添加如下文件内容: [mongodb-org-3.2] name=MongoDB Reposito ...
- 功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)
功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好.我个人 ...