OSI 七层,我拿它记的是攻击面,不是协议表

清酒 9 分钟 18 次读过

OSI

声明

文中涉及的网络探测操作,均在自己的电脑与自有测试环境上完成。

关于OSI很多人都会遇到这些问题

在使用抓包软件时只看到五层,但是教科书上写着七层,后面使用namp干活的时候在四层,ARP出事的时候是在第二层。同一个网络但是四个数字却对不上。

OSI背过了很多遍,但是在用的时候还是不知道怎么用,后来在排查一个连不上的问题时,从上往下一层一层试的时候才明白,这个表不应该按照协议清单来读。

教科书上的知识只能告诉你每层叫什么,但是在干活的时候就要关注另一件事:这个问题大概率出现在哪一层。

一、先解决数字对不上的问题

为什么有时候是七层有时候是四层

七层模型是ISO(国际标准化组织)定的参考模型,主要用来规范怎么讨论网络;但是真正在网络里运作的是TCP/IP,两者的区别就是TCP/IP把OSI的会话层和表示层合并进了应用层,把数据链路层和物理层统一合并成了网络接口层。所以只剩下了四层

两个模型不是说谁是错的,它们是分工不同。参考模型的作用是怎么把事情说清楚,TCP/IP管的是怎么真正的跑起来。

OSI七层 TCP/IP四层 说明
应用层 应用层 叫法统一
表示层 应用层 归为应用层
会话层 应用层 归为应用层
传输层 传输层 叫法统一
网络层 网际层 也可以都叫网络层
数据链路层 网络接口层 合并
物理层 网络接口层 合并

OSI分层对照

所以说抓包软件永远没办法到会话层,因为它不存在于真实的数据包中,分层得到的好处也很实在,换一种介质传输也不会影响上面的应用,出了毛病还可以一层层往下排查。

二、最底下的两层:同一个网段你可以接触到谁

这个图我们从下往上看,数据链路层负责MAC地址和帧,以太网中每个网卡都带有全球唯一的MAC,交换机就是靠MAC来辨别帧往哪里发。

其实这一层最大的问题在于没有身份校验,ARP干的事情很简单,问这个IP是谁的,谁先给你答复了那就是谁的,至于答复的人身份是否正确就不知道了。

CAM泛洪

交换机的那个MAC表叫CAM表,它的容量是有限的,塞满之后交换机就变成了集线器,所有的端口都可以得到帧,CAM泛洪就是这么来的。

广播帧网段里每台机器都可以收得到,VLAN做的事情就是把一个物理网络分为几个互不干扰的广播域。分完之后你在这段里发送的ARP,隔壁根本听不见。

再说明一下交换机和路由器两者的关系,很多人把这两个混为一谈。交换机主要看MAC,在同一个网段中搬帧;路由器看的是IP,负责在各个网段,顺手把广播限制在原地。

image

就比如你电脑上的那张IP到MAC的对照表,直接在cmd中输入arp -a就可以看到,几分钟就会过期一次,然后再访问一遍。

第三层:地址和路径

再按照表格网上看就是网络层,它负责给IP,负责管理这个包的下一跳往哪里走。每台路由器的手里都会有一张路由表,也就是往哪个口丢的清单。

TTL在这一层很容易被忽视。每个包在出生时都会有一个跳数上限,每过一台路由器数字减一,直到零就会丢掉,这么做是为了防止成环。

TTL产生的两样东西

后来出现了两样东西。

  • 一个是traceroute的原理,就是故意发TTL很小的包,看看是在哪一跳死掉。
  • 另一个是判断系统的依据,因为TTL初始值各家是不一样的,Linux大部分是64,Windows大部分是128,看看剩多少就能知道对方的大致系统,namp -O有一部分判断就是这样得到的。

image

IP包有一个分片机制,包太大过不去就会被分成几片,然后等到端了就拼回去,报文头里的表示位就是用于标记哪些片是同一批。这个机制留了一个空子,把关键的内容拆到不同的片里,只通过检查点单片的设备是看不全的。

ICMP也是在这一层,负责传差错和控制信息,用ping使用的就是它。所以有时候ping不通只能说明ICMP没有回来,并不能说明那台主机不在。

第四层:端口与连接

按照图标的再上一层就是传输层,这个协议只有两个值得记,TCP和UDP,TCP有连接,DUP没有。

TCP头部是20个字节,六个标志位各管一件事,SYN建立连接,ACK表示确认号有效,FIN关连接,RST直接重置。三次握手讲的就是SYN、SYN+ACK、ACK这三步。

UDP头部只有8个字节,源端口、目的端口、长度、校验和,就只有这四项。它不管先后顺序,也不管丢没丢,还不重传,重传是TCP负责的。

三次握手的机制

之前再信息收集的文章里提到过的nmap -sS,它不光快还不容易被发现,原理就是在这一层上。它发送一个SYN过去,对方回一个SYN加上ACK就说明端口正开着,如果不回第三次握手就会直接RST断掉,完整链接没有建立,日志里就会少一条记录。

换成UDP扫描就没有这么可靠了,因为UDP没有连接,端口关着的时候很多系统根本不回,你也分不清楚是包丢了的问题,还是端口真的已经被关着了。SYN泛洪也是同一层的另一个问题,攻击者可以通过只发SYN并且不回复第三次握手,服务器的半连接队列很快被占满,正常的业务就会被影响。

数据包封装层次

五、最上面的三层:加密、通话与应用

最上面的三层直接在TCP/IP里合并了,但是看攻击面的时候还是要分开来看。表示层负责管:翻译、加密、压缩,TLS就属于这一层;会话层负责管:建立、维持、终止会话;应用层是最后一层负责管:HTTP、DNS、SMTP、FTP都是在这里。

责任的划分需要分开看

只有分开才能看清楚责任,证书的不校验是表示层的问题,会话固定是会话层的问题,SQL注入式应用层的问题,混在一起讲不清楚谁应该负责。

DNS是最特殊的,它存在于应用层,走的是UDP的53端口,工作的时候就是把域名换成IP。信息收集的那一篇就有讲到查子域名的操作,翻的就是DNS没有对外公开的部分。

HTTP是应用层最常见的,它本身没有状态,但是每次请求都要自己带齐身份,也就是为什么Cookie能够存在,走明文的时候链路的每一跳都可以看到内容,但是换成更安全的HTTPS后,抓包就只剩加密后的乱码了。

层 这一层会被什么攻击 我能查到什么内容 这一层封装出来的东西
应用层 注入、xss、越权、未授权 应用本身的逻辑 报文
表示层 TLS降级、证书不校验、编码绕过 加密套件、证书时谁签的 没有自己的封装
会话层 会话固定、会话劫持 登录状态怎么维持、会不会变 没有自己的封装
传输层 端口扫描、SYN泛洪、会话劫持 哪些端口还开着、运行的是什么系统 段(UDP 叫数据报
网络层 IP伪造、ICMP隧道、分片攻击 路线通不通、跳了几朓、像是什么系统 包
数据链路层 ARP欺骗、CAM泛洪、VLAN跳跃 同一个网段有扫描机器、MAC是否正确 帧
物理层 物理接入、线路接听 能否接入、有没有多出来的设备 比特

这七行从下往上读,就能从物理层分析能不能够得着——代码写的对不对。

六、工具在第几层工作

直接上表

工具 层 只在什么范围内有效
arp -a、arp-scan 2 同一个网段,出了网段就没有用
ping、traceroute 3 跨网段可达,被禁不代表主机不在
nmap -sS、masscan 4 跨网段,端口级别的探测
curl、sqlmap、Web扫描器 7 打的是应用本身,端口开着才谈得上

这个表用处在于排顺序。端口扫不到那就先不注入,往下看看,有没有通。

反过来也是,能达到第七层,也就能证明下面的六层都是好的,如果还有问题就是应用本身了。

七、防

分层防护不是每一层都堆一些设备,是要知道每一层都能挡下什么。

措施 能挡住什么 挡不住什么
VLAN隔离 跨网段广播和二层欺骗 同一层VLAN内的ARP欺骗
端口安全、DHCP Snooping 私接设备、伪造的ARP应答 已经在网段内某台机器的攻击者
防火墙封端口 外部直接访问和一些不该开的端口 出站方向和本来就允许的那个端口
TLS和证书校验 链路上的窃听于篡改 端点本身被控、被信任的错误CA
应用层输入校验 注入、XSS这些 逻辑漏洞和越权
多注意最右边那列

这个表最重要的是最右边那一列,没有哪条可以单独把事情做完,分层的用处是让你知道缺口具体在哪层,不是让每一层都固若金汤。

最后

回到一开始的问题,那四个数字是指同一个事情站在四个角度:书上的七层是分工图纸,扫描器在第四层,traceroute数的是第三层的跳,ARP的问题出现在第二层。

如果下次连不上,那就往下走一层,同网段是否能看见,ping不ping的通,端口是否打开,最后看看应用给不给数据,很多时候问题都不在最后那层。

有牛 写于 2026.10.23