OSI七层协议模型及OSI参考模型中的数据封装过程
Posted hellowOOOrld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OSI七层协议模型及OSI参考模型中的数据封装过程相关的知识,希望对你有一定的参考价值。
转载自:http://blog.csdn.net/qq_14935437/article/details/71081546
OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems InterconnectionReference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。
0SI/RM协议是由IS0(国际标准化组织)制定的,它有三个基本的功能:提供给开发者一个必须的、通用的概念以便开发完善、可以用来解释连接不同系统的框架。
95【中国自动化网社区】c2bd23【http://sns.ca800.com】9d2
8825668【中国自动化网社区】6c850d【http://sns.ca800.com】a2eb3
OSI的层次划分:OSI将计算机网络体系结构(architecture)划分为以下七层:
1、物理层 Physical Layer
物理接口规范,传输比特流,网卡是工作在物理层的。
2、数据链路层 Data Link Layer
成帧,保证帧的无误传输,MAC地址,形成EHTHERNET帧
3、网络层 Network Layer
路由选择,流量控制,IP地址,形成IP包
4、传输层 Transport Layer
端口地址,如HTTP对应80端口。TCP和UDP工作于该层,还有就是差错校验和流量控制。
5、会话层 Session Layer
组织两个会话进程之间的通信,并管理数据的交换使用NETBios和WINSOCK协议。QQ等软件进行 通讯因该是工作在会话层的。
6、表示层 Presentation Layer
使得不同操作系统之间通信成为可能。
7、应用层 Application Layer
对应于各个应用软件
它和我们常用的TCP/IP的协议层有些相似,TCP/IP把1和2封装为一层,3和4还是独立的层,5和6和7封装成为一层,也就是说TCP/IP只有四层,但是在此我讲述的7层的具体意义。
在这里我将假设一个场景,那就是把要传输数据的一方视为某个公司的经理,网络传输被视为这个经理要把一件事情告诉另一个公司的经理。
网络的A端:
1、应用层:A公司经理把他想要告诉B公司经理的事情用嘴讲了出来。
用户的应用程序怀网络之间的接口 老板
2、表示层:秘书就把A公司经理说的事情翻译成为英文然后写在了纸上。
协商数据交换格式 相当公司中简报老板、替老板写信的助理
3、会话层:行政的职员把秘书写的这封信,装到了信封封装好了,写上了信封的信息。
允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书
4、传输层:A邮局的职工把这封信取走。
提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员
5、网络层:A邮局的分派的职工,把这封信分派到指定送信区域。
使用权数据路由经过大型网络 相当于邮局中的排序工人
6、数据链路层:A邮局的装箱的职工,就把一同送往这个区域的信封装到一个木箱子里,然后送到A邮局物流站。
决定访问网络介质的方式 相当于邮局中的装拆箱工人
7、物理层:A邮局的物流职工把木箱运到铁路
将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人
这里的铁路就是网络连接物理介质
网络的B端:
7、物理层:B邮局的物流职工把木箱从铁路运到邮局的物流站。
6、数据链路层:B邮局的拆箱的职工把物流站的木箱拆箱然后把所有的信件取出来。
5、网络层:B邮局的分派的职工,把这封信分派到指定送信区域。
4、传输层:B邮局的职工把这封信送到B公司。
3、会话层:B公司行政的职员把公司的信件整理并且拆封信件(假设这是公司允许的情况下)并送到各自部门的秘书手里。
2、表示层:B公司秘书把信上的英文翻译成为中文。
1、应用层:B公司经理听秘书转述给他这封信的内容。
到此为止一个完整的通过这7层的网络通讯顺利完成。接下来我将用技术术语并结合TCP/IP中的应用再描述一遍这7层协议。
(1)应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。
应用层为操作系统或网络应用程序提供访问网络服务的接口。
应用层是模型中的最顶层,是用户与网络的接口,该层通过应用程序来完成网络用户的应用需求。该层的数据放在TCP数据包的数据部分,该层定义了一个很重要的协议——Http协议,我们一般的Web开发都是基于应用层的开发, 所以后面专题将会和大家介绍下Http协议。
既然知道http是大家在应用层的一个协议比如我们浏览网页什么的就是http应用iOS上层也是基于http的协议比较简单些,效率高灵活的比较难。
示例: Telnet(远程登录协议)、FTP (File Transfer Protocol)、HTTP (Hyperrext Transfer Protocol)、SNMP(simple Mail Transfer Protocol) BOOTP(Boot trap.Protocol) AFP (Apple Talk文件协议--Apple公司的网络协议族,用于交换文件) SNMP (Simple Network Management Protoco1)
NCP (NetWare Core Protoco1) NFS (Network File System)
8825668【中国自动化网社区】6c850d【http://sns.ca800.com】a2eb3
(2)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算机的字符集。示例:加密,ASII等。
表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
示例:
EBCDIC(extended binary coded decimal interchange code)、ASCII(Amercia Standard Code for Information Interchange);
图像标准:JPEG(Joint Photographic Experts Group)、TIFF(Tagged Image File Format)、GIF;
视频标准:MIDI(Musical Instrument Digital Interface)、MPEG(Motion Picture Experts Group)、QuickTime等。
ad【中国自动化网社区】2c4082【http://sns.ca800.com】48
(3)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。
会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
示例:
SSH, Secure Shell
ZIP, Zone Information Protocol
SDP, Sockets Direct Protocol
ADSP:AppleTalk的数据流协议
ASP:AppleTalk的动态会话协议
H.245, Call Control Protocol for Multimedia Communication
ISO-SP, OSI Session Layer Protocol(X.225, ISO 8327)
iSNS, Internet Storage Name Service
NetBIOS, Network Basic Input Output System
PAP, Password Authentication Protocol
PPTP, Point-to-Point Tunneling Protocol
RPC, 远程过程调用
RTCP, 实时传输控制协议
SMPP, Short Message Peer-to-Peer
SCP, Secure Copy Protocol
ad【中国自动化网社区】2c4082【http://sns.ca800.com】48
(4)传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。
通过MAC和IP地址,我们可以找到互联网上任意两台主机来建立通信。然而这里有一个问题,找到主机后,主机上有很多程序都需要用到网络,比如说你在一边听歌和好用QQ聊天, 当网络上发送来一个数据包时, 是怎么知道它是表示聊天的内容还是歌曲的内容的, 这时候就需要一个参数来表示这个数据包是发送给那个程序(进程)来使用的,这个参数我们就叫做端口号,主机上用端口号来标识不同的程序(进程),端口是0到65535之间的一个整数,0到1023的端口被系统占用,用户只能选择大于1023的端口。
传输层的功能就是建立端口到端口的通信,网络层就是建立主机与主机的通信,这样如果我们确定了主机和端口,这样就可以实现程序之间的通信了。我们所说的Socket编程就是通过代码来实现传输层之间的通信。因为初始化Socket类对象要指定IP地址和端口号。
在传输层有两个非常重要的协议:UDP 协议和TCP协议
采用UDP协议话传输的就是UDP数据包,同样UDP数据包也由头和数据两部分组成,头部分主要标识了发送端口和接受端口,数据部分就是具体的内容信息。同样UDP数据包是放入IP数据包中的"数据"部分,IP数据包再放入数据帧中在网络上传输。
由于UDP协议的可靠性差(数据发送后无法确定对方是否收到),所以又定义了一个可靠性高的协议——TCP协议,TCP协议采取了握手的方式要确保对方收到了数据。
示例:TCP(Transmission Control Protocol)、UDP (User Datagram Protocol)、SPX(SequenCed Packet ExChange Protocol)等。 ATP(AppleTalk Transaction Protocol),NBP(名字绑定协议) NetBEUI(NetBIOS Extended User Internet)
ad【中国自动化网社区】2c4082【http://sns.ca800.com】48
(5)网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。
网络层负责对子网间的数据包进行路由选择。网络层还可以实现拥塞控制、网际互连等功能。
在这一层,数据的单位称为数据包(packet)。
该层通过寻址(寻址地址)来建立两个节点之间的连接,大家都知道我们的电脑连接上网络后都一个IP地址,我们可以通过IP地址来确定不同的计算机是否在同一个子网路。如果我们的电脑连接上网络后就有两种地址:物理地址和网络地址(IP地址),网络上的计算机要通信,必须要知道通信的计算机“在哪里”, 首先通过网络地址来判断是否处于同一个子网络,然后再对物理地址(MAC)地址进行处理,从而准确确定要通信计算机的位置。
在网络层中有我们熟悉的IP协议(即规定网络地址的协议),目前广泛采用的是IP协议第四版(IPv4),这个版本规定,网络地址由32位二进制位组成。我们可以自己配置IP地址也可以自动获得的方式得到IP地址,Ip地址分成两部分,前24位代表网络,后8位代表主机号, 如192.168.254.1和192.168.254.2就处于同一个子网络里,因为这两个IP地址的前24位相同。
网络层中以IP数据包的形式来传递数据,IP数据包也包括两部分:头(Head)和数据(Data),IP数据包放进数据帧中的数据部分进行传输。
示例: IP (Internet Protocol)、IPX(Internet work Packet Exchange)、DDP (Datagram Delivery Protoco1) ICMP(Internet Control Message Protocol) APPLETALK、
6b3365【中国自动化网社区】652ace【http://sns.ca800.com】ba9338
(6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
该层对接受到物理层传输过来的比特流进行分组,一组电信号构成的数据包,就叫做"帧",数据链链路层就是来传输以"帧"为单位的数据包,把数据传递给上一层(网络层),帧数据由两部分组成:帧头和帧数据,帧头包括接受方物理地址(就是网卡的地址)和其他的网络信息,帧数据就是要传输的数据体。数据帧的最长为1500字节,如果数据很长,就必须分割成多个帧进行发送。
示例: ARP、RARP、SDLC、HDLC、PPP、STP、帧中继等。
(7)物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。
物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。只是说明标准
在这一层,数据的单位称为比特(bit)。
示例:802.3EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45、fddi令牌环网等。。
OSI是一个定义良好的协议规范集,并有许多可选部分完成类似的任务。
它定义了开放系统的层次结构、层次之间的相互关系以及各层所包括的可能的任务。是作为一个框架来协调和组织各层所提供的服务。
但是OSI参考模型并没有提供一个可以实现的方法,而是描述了一些概念,用来协调进程间通信标准的制定。即OSI参考模型并不是一个标准,而是一个在制定标准时所使用的概念性框架。
事实上的标准是TCP/IP参考模型
PPPOE机制
另外,还有一个最广泛的例子就是PPPoE,在以太网上走PPP业务,也没有用到ARP。它的实现机理是这样的:我要跟外界通信,首先我发一个PADI广播包;如果在这个以太网上有PPPoE服务器(即BRAS),那么回复一个PADO单播给我;然后我再发一个PADR给PPPoE服务器请求建立连接,服务器收到后,则回复一个PADS单播包,分配一个SessionID,PPPoE连接建立。
ARP、RARP
1)当ADSL拨号成功时没有建立IP和MAC的映射。拨号链接是一种点到点链路,这种链路的特点是一端发送的数据总被另一端原顺序的接受到。(即使两端的IP不在同一段上也能够收到)里面有一个确定性:一定别对端收到;唯一性:一定被唯一的对端收到;顺序性:包不会乱续;这样的链路是不需要什么MAC的。
2)你说的拨号可能说的是PPPOE拨号,这个是有IP和MAC的关系的,但使用的而不是ARP协议,而是PPPOE自身的保证机制。这也就是PPPOE能够防止ARP病毒的根本所在。
如果说道信元的话那是ATM的东西。映射的不是IP和MAC,应该说的IP和VPI VCI对。
任何三层地址都需要映射到二层地址,以太网是IP和MAC,FR是IP和DLCI,ATM是IP和vpi/vci,当没有映射时,在路由器上debug会看到“encapsulation failed”
有点看不下去了,对于你
3)得出以下结论:
1,如果计算机在访问internet的时候,不论是客户机基于以太网,还是服务器基于以太网技术,都必修使用ARP和RARP协议。
2,如果计算机在访问internet的时候,客户计算机或服务器都使用FDDI或其他非以太网技术,可以不使用ARP和RARP协议。
最大感觉就是你总结的东西都不对味
简单的说两句吧
1.arp和rarp 和以太网之间就是地址解析和反向地址解析协议,是基于以太网的技术,这没什么好说的
2.如果你非要把 arp和rarp 和internet联系上的话 这里面的 的关系就没你说的那么简单,绝对和狭隘了,internet包含的东西很多,但是和 arp和rarp 有关系的几乎没有,这个是你对概念的含糊和理解的不清楚的原因
3.fddi 是光纤类东西,不论是技术还是概念都与arp和rarp 没关系 那就更不要在说信员是什么了
那么,在最深层次上说, 数据在 以太网 里面传输的时候,用到的是模拟信号转为数字信号 也就是用 0和1来处理数据的电平的
一般说来 arp和rarp 用在内网中就是起到解析地址的作用(以前就是这么定义的,而且这也是最主要的作用) 基本是在设备(pc or sever)端上做处理的 广义上说可以更本就不用关心他们之间是怎么连的,那就更不需要关心又是什么网络~
fddi 是光纤传输,是将模拟信号转为光信号来处理传送的,在两个局端之间有转换设备来处理,然后同理也是在另一端复员信号送到局端通过arp和rarp协议来处理数据具体走向的
那么 arp和rarp 和internet的联系 无论是基于ATM 还是 FR 还是ADSL拨号的 PPP/MP 等等网络"中间"技术 和arp和rarp的关系简单来说就一句话,那就是没联系,8杆子都打不着
最后 必须这两个字 在做下结论的时候,在不是很清楚的情况下 最好别用 否则就是在吾人子弟的
多看看书吧
4)ADSL只是种接入方式
5)首先说,我不是什么高手,但是对于你所讲的这些东西,自信还有一点了解。
ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。这里已经说的很清楚,arp不是每种网络都需要的实现。实质上你是可以实现一个二层链路完全由非以太网跟令牌环网构成的网络,这里根本不牵涉arp什么事情。
对于TCP/IP来讲,它是可选的,可有可无的。它既不是TCP/IP协议族最初额实现,也不是必须或者必要的实现,如果你不怕麻烦,完全可以不要它的存在(对于RARP协议来讲,情况稍微有些特殊)。从这个意义上来讲,ARP/RARP根本就没有追究存在必要不必要的问题。
举个例子,我们的农业生产什么是根本?种子、土地,人,阳光,环境。除了这些之外,其它的东西就是可有可无的,农业社会,大家是刀耕火种,现在是机械化。ARP/RARP的有无就跟机械化的有无是一样的。不是必要的,但是现在如果你说不要耕种设备了行不行啊,答案是行,也不行。行是因为没有一样可以做,不行是因为现在没有人再想去面朝黄土背朝天的劳作了,没有了大家可能真的就不习惯了。
总之来讲,讨论arp跟rarp存在的必要与否本身,根本就没有什么意义。
至于什么P2P根本就跟这个帖子的内容没有什么关系了。说是什么技术,有些牵强。算是一个思想吧,一种软件组织的架构。至于什么改变互联网基础的潜能,让人听了却是摸不着头脑的感觉。跟之前提的什么C/S,B/S本是一类东西,至于是采用哪种组织软件,要看应用的特点,并不是万能良药,什么东西拿P2P来就万事大吉,选其它的就不行,反之也一样。
你的主要问题在于,对网络实质内容理解本身就肤浅,却又自以为是。个人认为你需要做的是,静下心来,认真的理解网络的实质,不要搞些似是而非的东西出来,这样真的很误人的。
6)目前的网络都有二层的地址,不过不一定叫MAC地址。譬如FR的DLCI,ATM的VPI VCI等等。
下面我们讲一个实例化 两台电脑的一个通信过程,比如常见的:
HTTP
HTTP协议如何工作?
大家都知道一般的通信流程:首先客户端发送一个请求(request)给服务器,服务器在接收到这个请求后将生成一个响应(response)返回给客户端。
1. Request和Response的格式
Request格式:
HTTP请求行
(请求)头
空行
可选的消息体
注:请求行和标题必须以作为结尾(也就是,回车然后换行)。空行内必须只有而无其他空格。在HTTP/1.1 协议中,所有的请求头,除Host外,都是可选的。
实例:
2. 建立连接的方式
HTTP支持2中建立连接的方式:非持久连接和持久连接(HTTP1.1默认的连接方式为持久连接)。
1) 非持久连接
让我们查看一下非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该贝面由1个基本html文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。再假设该基本HTML文件的URL为:gpcuster.cnblogs.com/index.html。
下面是具体步骡:
1.HTTP客户初始化一个与服务器主机gpcuster.cnblogs.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。
2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/somepath/index.html。
3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。
4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。
5.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。
6.给每一个引用到的JPEG对象重复步骡1-4。
上述步骤之所以称为使用非持久连接,原因是每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他对象。每个TCP连接只用于传输一个请求消息和一个响应消息。就上述例子而言,用户每请求一次那个web页面,就产生11个TCP连接。
2) 持久连接
非持久连接有些缺点。首先,客户得为每个待请求的对象建立并维护一个新的连接。对于每个这样的连接,TCP得在客户端和服务器端分配TCP缓冲区,并维持TCP变量。对于有可能同时为来自数百个不同客户的请求提供服务的web服务器来说,这会严重增加其负担。其次,如前所述,每个对象都有2个RTT的响应延长——一个RTT用于建立TCP连接,另—个RTT用于请求和接收对象。最后,每个对象都遭受TCP缓启动,因为每个TCP连接都起始于缓启动阶段。不过并行TCP连接的使用能够部分减轻RTT延迟和缓启动延迟的影响。
在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。
HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟)。另外,带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比,持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外,缓启动延迟也比较小。其原因在于既然各个对象使用同一个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。
3. 缓存的机制
HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量;HTTP利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用的带宽;HTTP用“验证(validation)”机制来为此目的。
HTTP定义了3种缓存机制:
l Freshness allows a response to be used without re-checking it on the origin server, and can be controlled by both the server and the client. For example, the Expires response header gives a date when the document becomes stale, and the Cache-Control: max-age directive tells the cache how many seconds the response is fresh for.
l Validation can be used to check whether a cached response is still good after it becomes stale. For example, if the response has a Last-Modified header, a cache can make a conditional request using the If-Modified-Since header to see if it has changed.
l Invalidation is usually a side effect of another request that passes through the cache. For example, if URL associated with a cached response subsequently gets a POST, PUT or DELETE request, the cached response will be invalidated.
4. 响应授权激发机制
这些机制能被用于服务器激发客户端请求并且使客户端授权。
详细的信息请参考:RFC 2617: HTTP Authentication: Basic and Digest Access
-
5. 基于HTTP的应用
-
多线程下载
-
HTTPS传输协议原理
-
两种基本的加解密算法类型
-
通信过程:
优点:
参考文章:http://blog.csdn.net/lisa890608/article/details/8231666
http://www.cnblogs.com/qiqibo/p/3143964.html
http://www.cnblogs.com/skyofbitbit/p/3713125.html
http://www.cnblogs.com/lavenderone/archive/2011/10/14/2212523.html
TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:
“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也 可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。网络有一段关于socket和TCP/IP协议关系的说法比较容易理 解:
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
总结一些基于基于TCP/IP协议的应用和编程接口的知识,也就是刚才说了很多的 HTTP和Socket。
CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
下面是一些经常在笔试或者面试中碰到的重要的概念,特在此做摘抄和总结。
一。什么是TCP连接的三次握手
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭 连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)
二。利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3。连接确认:当服 务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端 确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
三。HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
四。TCP和UDP的区别
1。TCP是面向链 接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的 可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重 发,所以说UDP是无连接的、不可靠的一种数据传输协议。
2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
知道了TCP和 UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP 的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。
以上是关于OSI七层协议模型及OSI参考模型中的数据封装过程的主要内容,如果未能解决你的问题,请参考以下文章