linux 封装 分用
封装:(常用四层为例)
上层协议是如何使用下层协议提供的服务的呢?
其实这是通过封装(encapsulation)实现的。应用程序数据发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。
分用:
当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程称为分用(demultiplexing)。分用是依靠头部信息中的类型字段实现的。
网络通信的过程(案例):
A(IP :192.168.1.1/24 MAC:01:02:03:04:05:06) 发送给 B(IP: 192.168.1.2/24 MAC: 0a:0b:0c:0d:0e:0f)
ARP协议请求过程:(终端 arp -a 查询 ip对应物理地址) RARP(根据MAC地址寻址IP地址)
第一次访问没有目标MAC地址,使用ARP协议(根据IP地址寻址MAC地址),ARP协议将这些连接过信息保存在主机缓存当中,如果没有找到这些对应的MAC地址,使用ARP协议寻找MAC地址。
ARP请求:是广播给一个局域网内所有主机,每个主机请求的目的端IP地址进行解析,与自身相同则进行ARP应答。
ARP请求包:192.168.1.2访问192.168.1.3第一次访问不知道目的机器MAC地址,填充为0,共28字节
实际发送需要加上以太网帧的协议头(14字节):
第一次发送时,目的物理地址全部为ff,为广播发送。目标主机接收到后为ARP应答(操作变为2),返回就可以直接填入目标和本机MAC地址:之后 IP地址 对应 MAC地址 存入本机缓存,即可以下一次使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)