点击「京东数科技术说」可快速关注
「前言」在《网络通信协议篇二》中我们主要通过抓包讲述了TCP可靠连接的三次握手、四次挥手协议。本文将会以实际应用协议讲述日常操作命令背后的支撑原理。
第二篇:温故而知新|网络通信协议篇(二)
第一篇:温故而知新|网络通信协议篇(一)
第一篇中讲到局域网内主机及网关相互通信需要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协议属于一种控制报文协议,此类信息的显著特征是不会带有用户数据,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到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协议的执行原理,到这里网络通信这个专题结束,网络知识深不可测,本次分享只是九牛一毛,希望能给大家些许收获,下一部我将继续坚持分享,内容为核心源码解析,梳理优秀中间件或方案源码,梳理其思想,以供学习和借鉴,希望大家一起努力,多提意见建议,本人感激不尽,小伙伴们如果对本文有疑问可以咚咚或后台留言,大家一起进步。
推荐阅读
2、APP经验总结|一篇文章带你了解APP PUSH推送机制
京东数科技术说&技术课堂
▼▼▼
由京东数科-技术研发部策划组织
倡导“原创·实用·技术·专业”
致力于分享技术领域实战经验与技术干货
线上订阅“京东数科技术说”,线下聆听“技术课堂”
为加强技术分享、总结沉淀,提升数科技术影响力而搭建的
线上线下融合交流平台
不只一技之长 · 我有N技在手
咨询、建议、合作请联系:
刘嘉璐(liujialu)/张明瑛(zhangmingying3)
长按识别二维码关注我们