网络通信协议篇(三)

2020 年 3 月 22 日

网络通信协议篇(三)

ARP 地址解析协议


第一篇中讲到局域网内主机及网关相互通信需要 ip 地址、mac 地址两个核心元素,ip 地址在通信前就可以得知(DNS 解析),而 mac 地址如何得到呢,这时就需要 ARP 协议支持了,ARP 全称为:Address Resolution Protocol 即地址解析协议,假设主机 A 需要访问局域网主机 B,主机 A 通过地址解析协议向局域网内部发群体广播,询问主机 B 的地址信息,被命中主机 B 确认目标主机 IP 为自身时会将广播报文中主机 A 地址信息存入 ARP 缓存表中(缓存减小访问次数),并向主机 A 返回自己的 mac 地址,主机 A 将主机 B 返回的地址信息缓存在 ARP 缓存表中,至此主机 A 已知主机 B 的 MAC,就可以愉快的开始通信了。发起方需要查询目标 MAC 地址时都会先去 ARP 缓存表中查询,未查询到才会发起广播流程,示例如下:



熟悉地址解析歇息工作流程之后,看一下协议报文,报文结构示例图如下:



根据上述报文结构,通过抓包分解图如下所示:



请看下方红框中 16 进制显示的报文,首先看第 1 到 16 字节,前六个字节(ff:ff:ff:ff:ff:ff)表示数据包发送的目标地址为广播地址,局域网内所有主机均需收到,第七到第十二字节(00:2a:6a:f4:7c:41)表示本机 mac 地址,第十三到二十分别代表帧类型、硬件类型、协议类型、硬件长度、协议长度,第二十一到第二十二字节表示访问类型(指明当前包是请求包还是应答包,对应的值分别是 0x0001 和 0x0002),第二十三到第二十八字节表示发送端地址(00:2a:6a:f4:7c:41),第二十九到第三十二表示发送端 IP(10.13.95.253),第三十三到第三十八表示目标地址(ff:ff:ff:ff:ff:ff),第三十九到第四十二为目标 IP(10.13.91.166),到这里 ARP 协议的报文结构就全部分析完成,可知道 ARP 的执行原理了。


ICMP 控制报文协议


ICMP 协议属于一种控制报文协议,此类信息的显著特征是不会带有用户数据,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到 IP 数据无法访问目标、IP 路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP 消息。通俗一点理解控制报文协议就是错误发现及错误报告回传机制,因为只有发送端拿到发送过程中的失败原因消息才能针对性的做出处理方案,ICMP 的报文结构如下所示:



ICMP 协议通过 IP 协议发送,ICMP 协议相当于定义一套返回码枚举,不同类型的返回码所带有的返回信息也不相同。根据上述报文结构,通过抓包分解图如下所示:



请看下方红框十六进制显示报文内容,前三十四字节表示以太网头部和 IP 头部此处不做详细解析,从第三十五字节开始属于 ICMP 的报文体部分,首先第三十五字节表示类型,第三十六字节表示编码,以 ping(ping 命令就是以 ICMP 协议实现的)为例,它的类型代码请求报文为 8,编码为 0(其它类型和编码可以网上搜索参考“类型编码表”,此处不做码表显示),第三十七到第三十八字节表示唯一校验和,第三十九字节到第四十二字节属于不同类型内容不同的扩展报文,抓包中表示 ping 的唯一标识码和自增序列以保证目标返回值是对应请求报文的,第四十三字节到七十四字节表示 ping 附带的报文内容,可以通过改变配置报文大小来控制传输数据大小,如图所示实际发送报文即为英文小写字母,这是 ICMP 的执行原理。


1、Ping


ping 命令是以 ICMP 协议实现的网络工具,主要的作用是检查主机连通性、统计连通时间,若出现超时不能连通:一种可能为目标 IP 不存在,第二种可能是对方主机屏蔽了 ping 命令执行,示例截图如图所示:



如图所示,展示返回报文的关键字段:


  • 字节=32:即ICMP抓包中的32字节英文小写字母,表示发送报文大小

  • 时间=6毫秒:即目标主机响应时间

  • TTL=51:即发送者设置的数据包在网络中可以存活的跳数


2、Tracert


tracert 命令是以 ICMP 协议实现的网络工具,主要解决网络连通性问题,统计响应耗时时间,路径明细等信息,示例截图如图所示:



如图所示,返回报文主要字段:


  • 第一列:表示经历的网络节点,逐一递增

  • 第二列到第四列,三次响应的平均时间

  • 经历的ip信息


小结


本文梳理了 ARP、ICMP 协议的执行原理,到这里网络通信这个专题结束,网络知识深不可测,本次分享只是九牛一毛,希望能给大家些许收获,下一部我将继续坚持分享,内容为核心源码解析,梳理优秀中间件或方案源码,梳理其思想,以供学习和借鉴,希望大家一起努力,多提意见建议,本人感激不尽,小伙伴们如果对本文有疑问可以咚咚或后台留言,大家一起进步。


2020 年 3 月 22 日 21:05109

评论

发布
暂无评论
发现更多内容

架构师训练营第七周小结

韩儿

Week7 作业

evildracula

学习 架构

第 11 周 怎么又翻车了???

Pyr0man1ac

架构师训练营week11作业

FG佳

极客大学架构师训练营

第 11 周 作业

Pyr0man1ac

Architecture Phase1 Week11:HomeWork

phylony-lu

极客大学架构师训练营

架构师训练营第 1 期 week11 总结

张建亮

极客大学架构师训练营

架构师第二期 第7周总结

月下独酌

极客大学架构师训练营

LeetCode题解:55. 跳跃游戏,贪心,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

第十一周学习总结

Meow

架构师训练营第七周作业

李日盛

性能测试

第 7 周 系统架构作业

心在那片海

架构师训练营week11作业

陈皓07

一文彻底搞懂前端监控

执鸢者

前端 前端监控

架构一期第十一周作业

Airs

架构师训练营第 1 期 -- 第十一周学习总结

发酵的死神

极客大学架构师训练营

11 安全稳定课后作业

ABS

第十一周 架构方法学习总结 —— 安全稳定

兵长

安全架构 高可用架构

什么样的股权,才算“到手”?| 法庭上的CTO(3)

赵新龙

股权 CTO 法庭上的CTO

第 7 周 系统架构总结

心在那片海

架构师训练营第 7 周学习总结

菜青虫

极客大学架构师训练营

第十一周作业

Meow

架构师训练营第十一周课程笔记及心得

Airs

Week7-性能优化-作业1

shuyaxx

架构师训练营第 7 周课后练习

菜青虫

极客大学架构师训练营

Architecture Phase1 Week11:Summarize

phylony-lu

极客大学架构师训练营

Week7-性能优化-总结

shuyaxx

nodejs事件和事件循环简介

程序那些事

事件驱动 nodejs 事件循环 异步编程 程序那些事

架构师训练营第 1 期 week11

张建亮

极客大学架构师训练营

架构师训练营第2期 第7周命题作业

月下独酌

极客大学架构师训练营

架构师训练营 - 第 11 周课后作业(1 期)

阿甘

网络通信协议篇(三)-InfoQ