1.1 网络基础-七层网络模型&TCP/IP协议

222 阅读9分钟

基础概念

七层网络模型

国际标准组织(ISO)指定的一个用于计算机或者通信系统间互联的标准体系(Open System Interconnection,简称OSI)。是一个七层的,抽象的模型体,包含一系列抽象的术语和概念以及具体的协议。七层功能主要是将数据层层打包,解决设备之间的网络通信。OSI网络模型仅作为参考,便于从宏观的角度去分析和解决问题。

TCP/IP协议

TCP/IP (Transmission Control Protocol/Internet Protocol, 传输控制/网络协议), 基于OSI网络模型进行简化,是当今互联网广泛使用的网络模型。它是指能够在多个不同网络间实现信息传输的协议簇。不仅仅指的是TCP和IP两个协议,而是一个由FTP、SMTP、TPC、IP以及HTTP等协议组成的协议簇,因为TCP协议(传输层)和IP协议(网络层)具有代表性,所以称为TCP/IP协议。

网络模型图解

image.png

上图描述了七层网络模型和TCP/IP模型包含的层级,OSI模型的目的是解决主机间的网络通信,TCP/IP协议在OSI上进行了简化,所以在实际的应用中效率更高,成本更低。OSI七层功能主要是将数据层层打包,最后实现整个数据交互的流程。

结合网络模型到日常的开发过程中,那么问题来了:当我们在浏览器输入某个关键词点击搜索,或者APP下拉刷新列表向服务端请求数据的时候,数据在整个OSI模型中是如何打包传递的,这个时候我们需要了解每一层对应的协议。

深入OSI七层模型

为了按照日常开发中数据网络通信的流程,方便大家理解和记忆,这里从应用层发送数据自上而下到物理层进行一层层的讲解(封装报文)

应用层

定义了应用之间的交互规则,通过不同的应用层协议为不同的网络应用提供服务,规范数据格式,方便程序识别和操作。我们日常的软件开发中都是基于应用层协议,进行逻辑上的数据传递。
传输介质: 应用程序,如浏览器,APP,服务端
数据单元: 数据报文

主要协议

HTTP: 超文本传输协议,用于指定客户端与服务端之间的收发消息 (后面文章详细讲解)
WebSocket: HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议,允许服务端主动向客户端推送数据
FTP: 文件传输协议
DNS: 域名交换协议(域名转换成IP)
SMTP:电子邮件传输协议

表示层

数据经过应用层的协议发送之后,就会到达表示层,表示层来解释应用程序交换数据的含义
传输介质: 应用程序,如浏览器,APP,服务端
数据单元: 数据报文

作用

翻译:将应用层的数据(如字符串Hello)翻译成机器能够理解的二进制数据(01001000 01100101 01101100 01101100 01101111),即人类语言 -> 机器语言
压缩:将原始数据进行压缩,减少所需空间,加快传递,降低带宽占用
加解密:发送时进行加密,接收时进行解密,确保数据传输的安全性

会话层

负责建立,管理和终止表示层实体之间的通信会话
传输介质: 应用程序,如浏览器,APP,服务端
数据单元: 数据报文

作用

身份验证: 客户端与服务端建立会话之前,服务端会验证客户端身份信息(如登录后的客户端和服务端之间将会建立会话或连接),开发过程中的cookie,session以及token之类的都是实现这个功能

授权: 身份验证后,服务端确认是否具有访问权限
会话机制: 提供正在下载的文件跟踪(比如大文件的断点续传)

协议
RPC: 远程调用协议
SSL: 安全套接字协议(HTTPS加密协议之一)
TLS: 传输层安全协议(HTTPS加密协议之一)

传输层

定义传输数据的协议端口号流量控制差错校验,建立“端口到端口”的通信
传输介质: 应用进程&服务进程
数据单元: (Segment)

作用

分段: 将从会话层接收的数据分为的数据单位,包含源端口号(确定服务),目的端口号和序列号(确保消息准确性)
流量控制: 控制传输的数据量,降低传输速率,确保不会有数据丢失
差错控制: 在每一个段添加“校验和”的位,出现某些数据丢失时,目标传输层将重新请求,来重新传输丢失或损坏的数据

image.png

协议(后面章节会重点讲解)

TCP: 传输控制协议,提供面向连接可靠的传输服务,提供传输反馈。丢失的数据可以在TCP中重新传输速度慢 (HTTP协议就是基于TCP协议)
使用场景: 必须进行完整数据传输(万维网,电子邮件,FTP等)

UDP: 用户数据协议: 提供无连接,尽最大努力的数据传输服务(不保证数据传输的可靠性),不提供数据的传输反馈速度快
使用场景: 是否接收到完整数据不重要的应用(游戏,音乐,DNS等)

特点TCPUDP
面向连接
数据完整性
数据顺序性
传输效率
提供反馈
数据大小无限制每个数据包64k
应用方面可靠通信不可靠通信

网络层

选择合适的网间路由和交换节点,确保数据及时传送
传输介质: 路由器
数据单元:

作用:

逻辑寻址/IP寻址: 为传输层的每一个分段分配发送方和接收方的IP地址,形成一个IP数据包,确保每一个数据包正确到达目的地
路由选择: 建立在IPV4/IPV6之上,将数据包从源端移动到目的端的方法
路径选择: 确保数据从源端到目的端的最佳可能路径,有OSPF,BGP等协议

image.png

协议

IP协议: 是整个TCP/IP协议的核心,构成互联网的基础。给传输层提供了无状态,无连接,不可靠的服务
具体流程: 主机收到IP数据包的术后,会校验并解析数据包的头部,看看这个数据包是否是发给给本机的,时就放在处理队列中等待处理,否则进行转发,转发的下一跳是哪个物理机则是基于路由表。

数据链路层

主要负责物理寻址和封装IP数据报
传输介质: 交换机,网卡
数据单元:

作用
物理寻址: 确定发送点和接收点
封装IP数据报: 将网络层的IP数据包封装成帧

image.png

协议

APR: 地址解析协议,IP地址->MAC地址
映射方式:
静态映射: 创建ARP表建立IP地址和对应的MAC地址,并存储在每个机器上,因为物理地址经常变动,所以需要定期更新变换IP对应的MAC地址
动态映射: 通过ARP协议,将IP地址进行广播,对应的主机会返回消息,获得对应的MAC地址,并缓存对应的关系,可以较快反应并减少资源

RARP: 反向地址解析协议,MAC地址->IP地址

流程
接收从物理层的数据时,对无意义的比特流数据进行分组,8个二进制为一组(字节),根据这个分组依次传递数据
发送数据时,通过ARP协议将IP地址(逻辑地址)转换成MAC地址(物理地址),将网络层传下来的逻辑地址解析成物理层能使用的物理地址
发送数据时,将IP数据包添加源MAC地址和目标MAC地址,封装成帧

物理层

通过传输介质将比特流数据从发送设备的物理层传输到接收设备的物理层
传输介质: 光纤,无线电波等
数据单元: 比特流

作用

  1. 数据从设备发送到网络时,将数据转换成二进制/电信号/比特流,让数据可以在物理介质中传输。电信号通过网线传输到路由器,再通过光缆/电缆传输到互联网
  2. 为数据链路层提供了二进制传输服务(传输比特0和1),屏蔽了各种传输媒体的差异

总结

至此,网络模型中每一层的作用和流程都已经讲解,下面进行一个汇总

层级数据单元地址传输功能协议
应用层数据报文HTTP
FTP
WebSocket
表示层数据报文
会话层数据报文SSL
TSL
FRP
传输层端口号服务进程到服务进程TCP
UDP
网络层IP地址端到端IP
数据链路层MAC地址跳到跳APR
RAPR
物理层比特

串联

发送:
客户端(应用层)要发送数据(报文)-> 报文来到传输层加上端口号,封装成段 -> 段来到网络层会加上IP地址,封装成包 -> 包里面含有目标IP地址,但是目标IP地址和发送端不在同一个网络下,此时需要经过默认网关,但是客户端不知道网关的MAC地址,此时就可以通过ARP协议进行广播找到目标IP地址对应的MAC地址,将包封装成帧 -> 帧转换成二进制传输

接收:
当比特流到达默认网关的时候,会解封成帧,通过mac地址查看是自己的 -> 然后将帧解封成包,查看目标IP地址是否在同一网络中 -> 在同一网络中就会进行路由选择, 然后将包解封成段 -> 查看段可以发现目标对应端口号,进而给到指定的应用程序进行处理

关于网络模型相关的基础已经全部介绍完毕,如有帮助,请帮忙三联,感谢!有不同见解的同学敬请斧正😁