osi七层模型与数据的封装解封装
设备是怎么上网的?
每台设备(手机,电脑)带有网卡设备,网卡通过光线连接至交换机(交换机可能有多个),交换机连接至路由器,路由器连接至光猫,光猫通过光纤连接到运营商的设备箱
OSI七层模型:
在网络通讯中,有着操作系统兼容,多介质,传输目标,安全,保密等问题,解决的方案是所有设备都统一使用一个网络标准,这个标准就是OSI七层模型
各种通讯协议都是由七层模型设计而出,不同的物理设备使用不同的信号通讯,例如网线发出电信号,光纤发出光信号,wifi发出电磁波信号。
他们只能发出特定的信号,网线又怎么会知道光纤在说什么呢?这个时候就需要所谓的协议了,规定好光闪三下和电磁波指定的频率段都代表一个意义,那么就能沟通了
为了解决不同的问题,公有的私有的,整个网络诞生了无数的协议,但无一例外都得遵循osi七层模型
为了让不同的协议复用,整个模型分为七层,就像名字一样,分别是
物理层 信号转换的问题(数字信号,电信号,光纤)
数据链接层 mac地址,唯一,物理地址,以太网
网络层 ip地址,公网ip,定位
传输层 端口,tcp/ip
会话层 会话
表示层 文件类型
应用层 http,ftp,smtp
物理层
物理层解决了信号转换的问题,也就解决了多介质的问题。
不论来自光纤或是wifi,物理层都将之转换为数字信号 (二进制信号),即01串。数字信号输出的时候又转换为不同介质信号进行通讯
数字链路层
而数字链路层的最大作用则是选择传输目标,其中的mac地址又称为物理地址,为每块网卡唯一分配的标识
如路由器管理里随便找一台上网设备
可以通过一些工具查到生产商位置信息等
每个设备(网卡)作为互联网的一份子,都拥有一个唯一的标识,那么传输目标的问题不就解决了吗。
那么怎么称为互联网的一份子呢,经常能听到所谓“入网许可”的词汇,例如每台手机在生产前,都需要通过入网许可,这个过程就是为了获取唯一的mac地址。
网络层
虽然知道了物理地址,但我需要更详细的定位。当被问及地址的时候,我总不能回答我在中国吧,这样会被当成极为幼稚的调侃,网络层中的ip地址即解决了定位的问题。ip地址分为 公网ip,内网ip,也称公网与私网每个公网ip也像物理地址一样是唯一标识,由iana进行分配。内网ip类似酒店的房间地址,像酒店A和酒店B的602属于不同的房间
综上对于以上三层最基础的理解即是:
物理层解决了多介质的问题,数据链路层解决了目标选择的问题,网络层解决了定位问题
作为软件开发而不是网安相关从业人员,想要粗略的了解osi七层模型,下一层的传输层也需要很多笔墨来讲大白话。
七层模型的传输层:
传输协议
传输层使用的传输协议分为tcp和udp,tcp是一个可靠的协议,网络的传输可能会经过多个设备,其中可能某个设备环节出了错,那么网络传输是需要容错的,又怎么称之为可靠呢?
单个数据包可能高达3,4g,而数据包最大仅接受1500byte,在tcp协议下会采用分块的机制。将数据包拆成多个,每次发送都会向目标进行询问是否收到,当目标设备出现接收失败的情况会进行重传,因此tcp协议是可靠的。
udp类似于发短信,它是不可靠的,udp不需要询问是否确定,因此速度比tcp协议快,一般长距离传输采用udp协议
综上udp注重效率与实时性。通话,视频直播通常采用udp协议(试想一下,直播如果采用tcp协议,直播过程中卡了一下,重连又重复了一下画面,相比这么鬼畜的场面,还是容许几分钟的丢失比较和谐吧)
端口
端口则是更细致的定位作用,试想一台服务器上可能会挂载多个服务,而它只有一个公网ip;当接收请求的时候,服务器又是怎么知道将请求分配给哪个进程处理的呢,这就是端口号的作用了
发送请求时携带一个端口号,当服务器接收到请求时,内核将请求分配给对应端口号的进程处理
每个程序在启动时都会监听一个端口,如ssh登录使用22端口,mysql挂载在3306端口上等
会话层,表示层,应用层
这三层的联系颇大,很多协议都将这三层进行了合并。如应用最广泛的tcp/ip协议,它将这三层规划为应用层
会话层
会话层的基本作用是建立会话关系并保持畅通
表示层
表示层的作用为标识数据包类型,让目标设备能够正确识别。例如文件发送需要标识类型,如果目标设备不知道它是jpg格式的图片,它就无法正确打开
应用层
见名知意,它负责和各种应用程序打交道,提供下层接口以使程序使用网络服务。例如发送电子邮件,它通过应用层沟通传输层完成工作。
使用wireshark查看数据包
访问http://175.178.152.24/后停止捕获,在过滤条件中输入
ip.addr == 175.178.152.24
随便点开一个tcp类型的数据包
可以在底部看到数据包的信息,第一行是物理层的信息,往下是数据链路层,传输层,应用层(TCP协议)
如图,前面除了测试数据包以外,都不是完整的数据包,HTTP类型的才是本次访问的完整数据包
传输层描述了当前访问源的端口号50467,目标端口号80,len表示长度
再往上便是网络层了,描述源,目标公网ip地址
之后是链路层,描述了mac地址
最底部就是应用层了,占了数据包的大部分
如果把数据包形容成一份快递,那么应用层的数据就是寄送物品了,前面的数据链路层等或许可以用快递单来比喻
这五层也就是TCP的五层模型
数据的封装与解封装
以本次http请求为例,数据的传输由应用层往下逐层进行封装,每层的作用如下
应用层: 数据
传输层: tcp报文+数据
网络层: ip包+tcp报文+数据
数据链路层: 数据帧(mac地址)+ip包+tcp报文+数据
物理层: 将完整的数据包由二进制转换为电信号
接收即是将这个过程倒着做一遍
物理层: 将电信号转换为二进制
数据链路层: 数据帧(mac地址)+ip包+tcp报文+数据
/ 内核查看数据帧,校验mac地址是否正确对应本机
网络层: ip包+tcp报文+数据
/ 网络层校验ip地址,正确则继续解包
传输层: tcp报文+数据
/ 在内存中校验数据包,需要合并则合并
应用层: 数据包
/ 最后 应用层得到完整数据包
这个过程即是数据包的封装和解封装
本文标题:osi七层模型与数据的封装解封装
文章作者:meteor
发布时间:2023-08-08
最后更新:2023-08-08
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
分享