OSI七层模型和TCP/IP四层模型
业内普遍的分层方式有两种:OSI七层模型 和TCP/IP四层模型。记忆则为 “应表会传网数物”
关于协议:
① OSI七层模型详解
结构名 | 功能 | 主要设备 |
应用层 | 是最靠近用户的OSI层。用户接口、应用程序。应用层向应用进程展示所有的网络服务。当一个应用进程访问网络时,通过该层执行所有的动作。 | 网关 |
表示层 | 可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。 | 网关 |
会话层 | 通过传输层(端口号:传输端口接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。 | 网关 |
传输层 | 定义了一些传输数据的协议和端口号(WWW端口80等),端到端控制,确保按顺序无错的发送数据包。如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从会话层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。 | 网关 |
网络层 | 路由,寻址,网络层确定把数据包传送到其目的地的路径。就是把逻辑网络地址转换为物理地址。如果数据包太大不能通过路径中的一条链路送到目的地,那么网络层的任务就是把这些包分成较小的包。在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。 | 路由器,网桥路由器 |
数据链路层 | 保证无差错的数据链路,一方面接收来自网络层(第三层)的数据帧并为物理层封装这些帧;另一方面数据链路层把来自物理层的原始数据比特封装到网络层的帧中。起着重要的中介作用。数据链路层由 IEEE802 规划改进为包含两个子层:介质访问控制(MAC)和逻辑链路控制(LLC)。 | 交换机、网桥、网卡 |
物理层 | 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。 | 集线器、中继器、电缆,发送器,接收器 |
② TCP/IP 四层模型详解
4层协议和对应的标准7层协议的关系如下图:
IP的作用:用于区分不同的计算机是否属于同一个子网络。
Mac的作用:用来标识具体用户,为了解决IP盗用的安全问题。
例如一个局域网内,交换机会把IP和Mac地址做一个映射操作,交换机就是根据Mac地址进行发送和接受数据的,而端口号port则是决定与哪个应用进行通信和信息交互。
链路层:以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。通过网卡能够使不同的计算机之间连接,从而完成数据通信等功能。网卡的地址——MAC 地址(全球唯一),就是数据包的物理发送地址和物理接收地址。
链路层速记:ARP(核心协议)
源mac —— 目标mac
ARP 协议作用: 借助 IP 获取 mac 地址。基于MAC地址的这种特点,局域网采用了用MAC地址来标识具体用户的方法。注意:具体实现:在交换机内部通过“表”的方式把MAC地址和IP地址一一映射,也就是所说的IP、MAC绑定。
*: MAC 地址是绑定在网卡上的,它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 [1] 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 [2] 。
IP:地址则是管理员分配的
网络层:网络层的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做“网络地址”,这是我们平时所说的IP地址。网络层协议包含的主要信息是源IP和目的IP。
网络层速记:IP(核心协议)
源IP —— 目标IP
IP协议的作用: 在 网络环境中唯一标识一台主机。
IP地址本质:2进制数。—— 点分十进制 IP地址 (string)
IP和MAC的作用:
网络地址(IP):帮助我们确定计算机所在的子网络
MAC 地址:则将数据包送到该子网络中的目标网卡。
处理顺序:从逻辑上可以推断,必定是先处理网络地址,然后再处理 MAC 地址
传输层:端口:确定进程
- 对于同一个端口,在不同系统中对应着不同的进程
- 对于同一个系统,一个端口只能被一个进程拥有
传输层速记:
TCP / UDP(核心协议)
port —— 在 一台主机上唯一标识一个进程。
应用层:接到传输层传递过来的数据就要对数据进行解析,应用层就是规定程序的数据格式
应用层速记:
ftp、http、自定义
对数据进行封装。 解封装
TCP/IP:TCP/IP协议是一个大家族,不仅仅只有TCP和IP协议,它还包括其它的协议
应用关系:通过网络层IP确认交互端,通过MAC确认信息发送目标,最终通过端口指定要发生信息交互的程序
③ 如何实现通信?
数据通信:
封装: 应用层 —— 传输层 —— 网络层 —— 链路层 。 没有经过封装的数据,不能在网络环境中传递。
解封装 : 链路层 —— 网络层 —— 传输层 —— 应用层
从上往下,每经过一层,协议就会在包头上面做点手脚,加点东西,传送到接收端,再层层解套出来,如下示意图:
我们先从应用层开始讲起:
应用层:规定应用数据的数据格式,比如说FTP、DNS、SMTP等等,同时HTTP协议也属于应用层的范围。通俗来讲,应用层决定这一次通信要干嘛。
传输层:建立端口到端口的通信,提供两台计算机之间的数据传输,传输层中包含着两个很叼的协议,分别是TCP和UDP协议。面试中经常提及的三次握手,四次挥手就是TCP协议的部分内容
网络层:通过MAC地址和IP地址将互联网上的任意两台主机建立通信,网络层则是用来处理这些流动的数据包,也就是如果把相应的数据包路由到指定的地点,为通信时的网络传输选择传输路线
数据链路层:数据链路层包含了软件与硬件的接口部分,以及各种网络设备的硬件,也就是整个网络通信过程中最底层的基础设施,确定电信号0和1的分组方式
简单了解了每一层的作用之后,我们试着串起来,摸索一下一次整体的http请求到响应的过程。
拿访问google做个例子
- 访问google.com,按下回车。
- 应用层准备好请求报文,通过DNS服务进行域名解析,得到google的ip地址,并将报文发到传输层。传输层收到报文后,会将请求的数据包进行拆分,打包,并对每个包裹打上tag。在请求报文的基础上,加上一层TCP的首部信息,然后发往网络层。
- 到了网络层以后,IP协议就发挥了巨大的作用,IP协议中需要两个比较重要的信息,那就是ip地址和mac地址。ip已经在应用层通过dns解析出来了,那mac怎么办。。。真尴尬,然而这时ARP协议又冒了出来,它可以根据ip地址反向查询到目标主机的mac地址。好了,现在啥都有了,打包带走,把数据发到数据链路层。
- 终于走到基础设施这里了,此时数据包就在一根根光纤中旋转跳跃的奔向目的地,当然,整个过程不一定是直达的,可能需要经过各种中转站,就跟坐火车转车一样的。
- 请求到达服务器后,先从数据链路层往上走,并验证消去以太网首部信息,在网络层消去IP首部,在传输层消去TCP首部,就像剥洋葱一样一层一层去皮,最后剩下的就请求报文。在应用层对请求做出处理之后,需要对请求返回一个响应。而整个响应的传输过程就和请求一样,一层一层的封装,响应到达客户端时再一层一层的消去首部,最后呈现响应的结果。