七层协议和四层协议概述
相信去过⼤⼚⾯试的时候⼤都会问及七层协议、四层协议、浏览器浏览⼀个⽹页是怎么实现的or发⽣了什么之类的话题,其实都是问OSI七层协议参考模型或者TCP/IP四层协议的相关知识,本⽂只是对其协议概念进⾏概述,让⼤家有个基本的了解,希望⼤家通过本⽂能对⽹络节点间什么怎么实现的有个基本的认知。
下图是OSI七层协议、TCP/IP五层协议、TCP/IP四层协议图:
image
OSI七层模型通过七个层次化的结构模型使不同的系统不同的⽹络之间实现可靠的通信,其主要作⽤是帮助不同类型的主机实现数据传输。
物理层
nginx和apache区别物理层是OSI参考模型的最底层,它的作⽤是实现相邻计算机节点之间⽐特流的透明传送,屏蔽了具体传输介质和物理设备的差异。透明传送表⽰经实际实际电路传送后的⽐特流没有发⽣变化,对传送的⽐特流来说,这个电路好像看不见⼀样。
我们都知道机器只能识别⼆进制,即0和1,它使⽤⾼低电平表⽰,⽽物理层传送的是⽐特流(即⼆进制流,⽐特是是⼆进制中的位),所以能承载⽐特流的常见设备有:⽹卡、⽹线、集线器、中继器、调制调解器等。
数据链路层
数据链路层是OSI参考模型的第⼆层,它负责建⽴和管理节点的链路。该层的主要功能是:通过各种控制协议,将有差错的物理信道变为⽆差错的、能可靠传输数据帧的数据链路。在计算机⽹络中由于各种⼲扰(如磁场、温度等)的存在,物理链路是不可靠的,因此这⼀层的主要功能是在物理层提供
的⽐特流的基础上,通过差错控制、流量控制,使有差错的物理线路变为⽆差错的数据链路(即提供可靠的物理介质的数据的⽅法)。数据链路层的具体⼯作是接收来⾃物理层的位流形式的数据,并封装层帧,传送到上⼀层;同样,也将来⾃上⼀层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
常见的⽹桥、交换机等属于数据链路层。
⽹络层
⽹络层是OSI参考模型的第三层,也是最复杂的⼀层。他在下两层的基础上向资源⼦⽹络提供服务。其主要任务是:通过路由选择算法,为报⽂或分组通过通信⼦⽹选择最佳路径。具体的说,数据链路层的数据在这⼀层被转换为数据包,然后通过路由选择、分组组合、顺序、进/出路由等控制,将信息从⼀个⽹络设备传送到另⼀个⽹络设备。⼀般的,数据链路层解决同⼀⽹络节点之间的通信,⽽⽹络层主要解决不同⽹络间的通信。常见的路由器属于⽹络层
传输层
传输层是OSI参考模型的第四层,该层是通信⼦⽹络和资源⼦⽹的接⼝和桥梁,起到承上启下的作⽤。该层的主要任务是:向⽤户提供可靠的端到端的差错和流量控制,保证报⽂的正确传输。传输层
的作⽤是向⾼层屏蔽下层数据通信细节,即向⽤户透明地传输报⽂。该层常见的的协议有TCP和UDP协议。传输层提供会话层和⽹络层之间的传输服务,它从会话层获取数据,在必要时将数据进⾏分割,然后传输层将数据传输到⽹络层,并确保数据能正确⽆误的传送到⽹络层,因此传输层负责提供两节点之间数据的可靠传送。
会话层
会话层是OSI参考模型的第五层,它是⽤户应⽤程序和⽹络之间的接⼝,主要任务是:向两个实体的表⽰层提供建⽴和使⽤连接的⽅法。将不同实体之间的表⽰层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进⾏管理。⽤户可以按照半双⼯、单⼯、和全双⼯的⽅式建⽴会话。当建⽴会话时,⽤户必须提供他们想要连接的远程地址,⽽这些地址与MAC地址或⽹络层的逻辑地址不通过,它
们是为⽤户专门设计的,更便于⽤户记忆。会话层可以理解为定义如何开始、控制、结束⼀个会话。
表⽰层
表⽰层是OSI参考模型的第六层,它对来⾃应⽤层的命令和数据进⾏解释,对各种语法赋予相应的含义,并按照⼀定的格式传送给会话层。其主要功能是处理⽤户信息的表⽰问题(如编码、数据格式转换、加密解密等)。表⽰层可以理解为定义数据的格式和加密⽅式。
应⽤层
应⽤层是OSI参考模型的第七层,它是计算机⽤户以及各种应⽤程序和⽹络之间的接⼝,其功能是直接向⽤户提供服务,完成⽤户希望在⽹络上完成的各种⼯作。它在其他六层⼯作的基础上,负责完成⽹络中应⽤程序与⽹络操作系统之间的联系,建⽴与结束使⽤者之间的联系,并完成⽹络⽤户提出的各种⽹络服务及应⽤所需的监督、管理和服务等各种协议,此外该层还负责协调各个应⽤程序之间的⼯作。应⽤层可以理解为需要进⾏⽹络通信的应⽤程序。
TCP/IP 五层协议将OSI参考模型中的应⽤层、表⽰层、会话层归为应⽤层;TCP/IP 四层协议将OSI参考模型中的应⽤层、表⽰层、会话层归为应⽤层,将物理层和数据链路层归为⽹络接⼝层
从TCP/IP四层协议来分析下浏览器浏览⼀个⽹页时发⽣了什么:
image
上图展⽰了基于TCP/IP四层协议的数据传输的流程:
请求流程:应⽤层(即浏览器将请求封装为HTTP⽹络请求数据)——》传送到传输层(按TCP协议加上TCP头部并封装为TCP数据报⽂)——》传送到⽹络层(按IP协议添加IP头部并封装为IP数据报⽂)——》传送到链路层(将数据转为链路层的数据帧,再转为⽐特流,通过物理介质进⾏传输)——》经过N层次的路由转发——》传输到达服务端(即接收到)的链路层(将⽐特流转为链路层的数据帧)——》传输到服务器的⽹络层(将链路层的数据解析为IP层数据报⽂)——》传输到服务器的传输层(将⽹络层的数据解析为TCP数据报⽂)——》传输到服务器的应⽤层(处理HTTP数据)
响应流程与请求流程相似,只是服务器变成了发送端,⽽浏览器变成接收端⽽已。
这是基于模型的数据层传输流程,其实现需要以下6⼤步骤:
1、域名解析
浏览器请求⼀个⽹页是,会发起HTTP请求,⾸先需要知道像哪天服务器发起请求,我们知道HTTP协议中有域名的信息,⽽⽹络通信并不能通过域名直接建⽴连接,所以⾸先进⾏域名解析(DNS:提供域名和IP地址的解析服务)将域名解析成IP地址,以便实现下⼀步的建⽴TCP连接
2、建⽴TCP连接
使⽤1中解析出的IP地址,建⽴TCP连接,建⽴TCP连接时,⾸先需要进⾏3次握⼿确保传输的可靠性,下图是TCP3次握⼿的流程图:
image
第⼀次握⼿:客户端向服务端发送含有SYN标识的数据包,表⽰含SYN数据包发给服务端了
第⼆次握⼿:服务端收到客户端发来的SYN之后,向客户端发送含SYN和ACK标识的数据包,表⽰服务端确认收到了客户端的数据
第三次握⼿:客户端收到服务端发过来的ACK确认数据包之后,向服务端发送含ACK的数据包,表⽰知道服务端收到数据包了,当前的连接是可靠的,可以开始传输数据了
3、发送HTTP请求
步骤2建⽴TCP连接之后,就可以开始将⽤户请求的HTTP数据包按传输层-》⽹络层-》链路层的数据包装将数据传输给服务端了
HTTP请求报⽂格式⼤概如下:
GET PATH HTTP/1.1\r\n -》请求⽅法 路径 HTTP版本
USER-AGENT: xxx\r\n -》HTTP请求头
CONTENT-LENGTH: xxx\r\n -》HTTP请求头
....\r\n-》HTTP请求头
\r\n
\r\n
....\r\n-》HTTP请求内容
4、服务器响应HTTP请求
服务器的Nginx/Apache等服务器软件接收客户端发来HTTP请求,经过解析之后进⼊响应站点⼊⼝,解析到相应的处理器进⾏请求处理,再将响应内容以HTTP发送给客户端。
HTTP响应报⽂格式⼤概如下:
HTTP/1.1 200 ok -》HTTP版本 状态码 状态描述信息
CONTENT-LENGTH: xxx\r\n -》HTTP请求头
....\r\n-》HTTP请求头
\r\n
\r\n
....\r\n-》HTTP请求内容
下列是状态的⼤概描述信息:
100-199: 信息性状态码;接收的请求正在处理
200-299:成功状态码;请求正常处理完毕
300-399:重定向状态码;需要进⾏附加操作以完成请求
400-499:客户端错误状态码;服务端⽆法处理的请求
500-599:服务端错误状态码;服务端处理请求出错
5、浏览器渲染
接收到服务端返回的响应内容,解析HTTP内容,按DOM进⾏渲染:构建DOM树-》构建Render(渲染)树-》布局Render(渲染)树-》绘制Render(渲染)树

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。