OSI七层与TCP/IP四层(小结)

OSI 七层模型

咱们通常使用的网络数据传输由下而上共有七层,分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,也被依次称为 OSI 第一层、第二层、⋯⋯、 第七层。html

 

 

各层功能简介

1.物理层(Physical Layer)程序员

  物理层位于 OSI 参考模型的最低层,它直接面向原始比特流的传输。为了实现原始比特流的物理传输,物理层必须解决好包括传输介质、信道类型、数据与信号之间的转换、信号传输中的衰减和噪声等在内的一系列问题。另外,物理层标准要给出关于物理接口的机械、 电气、功能和规程特性,以便于不一样的制造厂家既可以根据公认的标准各自独立地制造设备,又能使各个厂家的产品可以相互兼容。实质上就是提供链接网络的硬件设备,将电脑链接起来的物理手段. 如光缆/电缆/无线电波。web

2.数据链路层(Data Link Layer)编程

  在物理层发送和接收数据的过程当中,会出现一些物理层本身不能解决的问题。例如, 当两个节点同时试图在一条线路上发送数据时该如何处理?节点如何知道它所接收的数据 是否正确?若是噪声改变了一个分组的目标地址,节点如何察觉它丢失了本应收到的分组呢?这些都是数据链路层所必须负责的工做。数据链路层涉及相邻节点之间的可靠数据传输,数据链路层经过增强物理层传输原始比特的功能,使之对网络层表现为一条无错线路。为了可以实现相邻节点之间无差错的数据传送,数据链路层在数据传输过程当中提供了确认、差错控制和流量控制等机制。浏览器

3.网络层(Network Layer)安全

  网络中的两台计算机进行通讯时,中间可能要通过许多中间结点甚至不一样的通讯子网。网络层的任务是:进行逻辑地址寻址,实现不一样网络之间的路径选择。网络层创建了主机之间的通讯,它在网络层引入了一套地址机制:网络地址.简称网址(Ip地址),咱们能够经过Ip地址,能够找到惟一的一台计算机,经过主机MAC地址来接收和发送信息。服务器

4.传输层(Transport Layer)网络

  传输层是 OSI 七层模型中惟一负责端到端节点间数据传输和控制功能的层。传输层是 OSI 七层模型中承上启下的层,它下面的三层主要面向网络通讯,以确保信息被准确有效地传输;它上面的三层则面向用户主机,为用户提供各类服务。传输层经过:定义传输数据的协议端口号,以及流控和差错效验,定义了端口和端口之间的通讯,帮助咱们使不一样的应用程序可以接收到本身所须要的的数据。session

5.会话层(Session Layer)并发

  会话层的功能是:包括创建、管理、终止会话,用来创建和管理应用程序之间的通讯,实现自动寻址,自动收发数据。

6.表示层(Presentation Layer)

  表示层如下的各层只关心可靠的数据传输,而表示层关心的是所传输数据的语法和语义。它主要涉及处理在两个通讯系统之间所交换信息的表示方式,包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。好比咱们要用基于Unix系统的mac电脑给pc机发送数据,表示层为咱们解决了通讯间语法的问题。

7.应用层(Application Layer)

  应用层是 OSI 参考模型的最高层,负责为用户的应用程序提供网络服务。与 OSI 其余层不一样的是,它不为任何其余OSI层提供服务,而只是为OSI模型之外的应用程序提供服务。好比不一样的文件类型要用不一样的应用程序打开,应用层中就规定了不一样应用程序的数据格式。

(其中,物理层、数据链路层和网络层一般被称做媒体层,是网络工程师所研究的对象;

  传输层、会话层、表示层和应用层则被称做主机层,是用户所面向和关心的内容。)

 

OSI七层结构与TCP/IP四层结构对应关系:

OSI七层模型对应的协议:

七、应用层application——FTP、HTTP、DNS、SMTP、TELNET协议

六、表示层presentation——信息的语法定义以及它们的关联,如加密、解密、转换翻译、压缩解压缩

五、会话层session——不一样机器上的用户之间创建及管理会话

四、传输层transport——TCP、UDP协议

三、网络层Internet——IP、ICMP协议

二、数据链路层link——ARP协议、RARP协议

一、物理层physical——机械、电子、定时接口通讯道上的原始比特流传输

TCP/IP四层模型模型对应的协议:

四、应用层——FTP、HTTP、DNS、SMTP、TELNET协议

三、传输层——TCP、UDP协议

二、网络层——IP、ICMP、ARP协议、RARP协议

一、网络接口层——Ethernet 802.三、Token Ring 802.五、X.2五、Frame relay、HDLC、PPP ATM等

 

(转)什么是套接字(Socket)?

1)应用层经过传输层进行数据通讯时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP链接或多个应用程序进程可能须要经过同一个TCP协议端口传输数据。为了区分不一样的应用程序进程间的网络通讯和链接,许多计算机操做系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口(socket是操做系统提供出来的接口),区分不一样应用程序进程间的网络通讯和链接。
生成Socket,主要有3个参数:通讯的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。经过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就能够和传输层经过socket接口,区分来自不一样应用程序进程间的网络通讯和链接,实现数据传输的并发服务。
Socket能够当作在两个程序进行通信链接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另一个Socket中,使这段信息能传送到其余程序中。

2)Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息经过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,而后程序B才能在Socket中阅读这段信息。
要经过互联网进行通讯,至少须要一对Socket,一个运行于客户机端,称之为ClientSocket,另外一个运行于服务器端,称之为serverSocket。 
根据链接启动的方式以及本地套接字要链接的目标,Socket之间的链接过程能够分为三个步骤:服务器监听,客户端请求,链接确认。 

服务器监听:是指serverSocket并不定位具体的ClientSocket,而是处于等待链接的状态,实时监控网络状态。
客户端请求:是指由ClientSocket提出链接请求,要链接的目标是serverSocket。为此,ClientSocket必须首先描述它要链接的serverSocket,指出serverSocket的地址和端口号,而后就向serverSocket提出链接请求。
链接确认:是指当serverSocket监听到或者说接收到ClientSocket的链接请求,它就响应ClientSocket的请求,创建一个新的线程,把serverSocket的描述发给客户端,一旦客户端确认了此描述,链接就创建好了。而serverSocket继续处于监听状态,继续接收其余ClientSocket的链接请求。

3)而咱们平时说的最多的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编程接口。

 

IP TCP UDP HTTP

IP、TCP UDP、Http、Socket的区别?

IP协议对应于网络层,TCP、UDP协议对应于传输层,而HTTP协议对应于应用层。

IP协议是网络层协议,是一种不可靠的、无链接的传送机制称为Internet协议,解决的是主机之间如何通讯的问题

TCP、UDP是传输层协议,解决的是数据如何传输的问题

HTTP是应用层协议,解决的是数据如何包装的问题

Socket自己并非协议,而是一个针对TCP或者IP的调用接口(API),解决的是区分不一样的应用程序进程间的网络通讯和链接,从而实现数据传输并发服务的问题

“咱们在 传输数据时,能够只使用TCP/IP协议 【TCP/IP位于传输层,是个协议组,它主要用来解决数据如何在网络中传输,与IP协议要区分开】,可是那样的话,若是 没有应用层,便没法识别数据内容。若是 想要使传输的数据有意义,则必须使用到应用层协议。应用层协议有不少,好比HTTP、FTP等,也能够本身定义应用层协议。WEB使用HTTP协议做应用层协议,以封装HTTP文本信息,而后使用TCP/IP协议将它发到网络上。”

传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的。而Socket自己不算是协议,就像上面所说,它只是提供了一个针对TCP协议或者IP协议的编程接口。

 

socket链接、TCP链接、UDP链接、HTTP链接?

建立Socket链接时,能够指定使用的传输层协议,Socket能够支持不一样的传输层协议(TCP或UDP),当使用TCP/UDP协议进行链接时,该Socket链接就是一个TCP链接/UDP链接。

一般状况下 Socket 链接就是TCP链接,所以 Socket 链接一旦创建,通讯双方便可开始相互发送数据内容,直到双方链接断开但在实际网络应用中,客户端到服务器之间的通讯每每须要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的链接而致使 Socket 链接断连,所以须要经过轮流询问告诉网络,该链接处于活跃状态。

 

而HTTP链接使用的是“请求—响应”的方式,不只在请求时须要先创建链接,并且须要客户端向服务器发出请求后,服务器端才能回复数据。

不少状况下,须要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步,此时若双方创建的是Socket链接,服务器就能够直接将数据传送给客户端;若双方创建的是HTTP链接,则服务器须要等到客户端发送一次请求后才能将数据传回给客户端,所以,客户端定时向服务器端发送链接请求,不只能够保持在线,同时也是在“询问”服务器是否有新的数据,若是有就将数据传给客户端。

 

TCP和UDP的区别?

一、TCP是面向链接,可靠、稳定的,缺点:慢,效率低,占用系统资源高,容易被攻击。虽说网络的不安全不稳定特性决定了多少次握手都不能保证链接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上)保证了链接的可靠性;

而UDP非面向链接,快,比TCP稍安全,缺点:不可靠、不稳定。UDP传送数据前并不与对方创建链接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,固然也不用重发,因此说UDP是无链接的、不可靠的一种数据传输协议。

二、也正因为1所说的特色,使得UDP的开销更小,数据传输速率更高,由于没必要进行收发数据的确认,因此UDP的实时性更好。

知道了TCP和UDP的区别,就不难理解为什么采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通讯是不安全的,

由于程序员能够手动对UDP的数据收发进行验证,好比发送方对每一个数据包进行编号而后由接收方进行验证啊什么的,

即便是这样,UDP由于在底层协议的封装上没有采用相似TCP的“三次握手”,而实现了TCP没法达到的传输效率。

三、TCP应用场景  如:浏览器使用HTTP,QQ文件传输等

四、UDP应用场景 如:QQ语音、QQ视频等

五、转发

 

TCP三次握手和四次挥手?

tcp三次握手

所谓三次握手(Three-way Handshake),是指创建一个TCP链接时,须要客户端和服务器总共发送3个包。

三次握手的目的是链接服务器指定端口,创建TCP链接,并同步链接双方的序列号和确认号并交换 TCP 窗口大小信息.在 Socket 编程中,客户端执行connect()时,将触发三次握手。 

 首先了解一下几个标志,SYN(synchronous),同步标志,ACK (Acknowledgement),即确认标志,seq应该是Sequence Number,序列号的意思,另外还有四次握手的fin,应该是final,表示结束标志。

  第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算链接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

  第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的序列号加1以,即X+1。

  第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。而且把服务器发来ACK的序号字段+1,放在肯定字段中发送给对方.而且在数据段放写序列号的+1。

tcp四次挥手

  TCP链接的拆除须要发送四个包,所以称为四次挥手(four-way handshake)。客户端或服务器都可主动发起挥手动做,在socket编程中,任何一方执行close()操做便可产生挥手操做。

其实有个问题,为何链接的时候是三次握手,关闭的时候倒是四次挥手?

  由于当Server端收到Client端的SYN链接请求报文后,能够直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。可是关闭链接时,当Server端收到FIN报文时,极可能并不会当即关闭SOCKET,因此只能先回复一个ACK报文,告诉Client端,” 你发的FIN报文我收到了”。只有等到我Server端全部的报文都发送完了,我才能发送FIN报文,所以不能一块儿发送。故须要四步握手。

tcp socket和udp socket的具体实现

经常使用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向链接的 Socket,针对于面向链接的TCP服务应用;数据报式 Socket 是一种非面向链接的 Socket ,对应于非面向链接的UDP服务应用。

(The End)
相关文章
相关标签/搜索