ios 之 Bonjour 协议简单抓包分析

引子

因在学习ios编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查  阅了各种资料以及自己抓包分析该协议。
注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进步!

什么是Bonjour

关于Bonjour的简介可以参考文章 Bonjour 简介及使用,这里讲得很清楚。
作用:在缺少中心服务器的情况下解决IP获取、名称解析、服务发现这三个问题。


抓包简单验证

这里我是使用了 [Cocoa]深入浅出Cocoa之Bonjour网络编程 文章中所提供的程序,把“启动程序-->创建一个房间”( 即可仅仅是发布聊天的服务)
这个过程用tcpdump抓下来,再用wireshark来分析(相对本人来说wireshark用的比较多,其他工具也可以,甚至直接在tcpdump命令下分析也可以)。

从抓取的数据包来看,可以得一些基本信息:.Bonjour是基于“MDNS(Mutilcast DNS)”协议的。(224.0.0.251为组播地址)

看红色框部分(以下都是个人猜测判断并不一定准确)
1.这里表明了服务端组播了它的设备名称信息即_chatty._tcp.local    
1)名称的格式为:_名称._传输协议._本地根域名 ,
2)PTR是 pointer 的简写。“PTR”就是反向DNS ,该标记,用于表明可讲一个IP地址映射到对应的主机名,即192.168.1.100 映射到 _chatty._tcp.local 该域名
2.这里表明服务端组播了它所能提供的服务是(注册了什么服务):server_create_room's chat room._chatty._tcp.local
如,点开其中一个数据报,查看Queries部分:
ios 之 Bonjour 协议简单抓包分析_第1张图片
3.这里,个人觉得是对第2部分的一中响应,点开其中一个数据报,查看其answer部分如图:
ios 之 Bonjour 协议简单抓包分析_第2张图片
1) 这里指明了server_create_room's chat room._chatty._tcp.local 这个服务的一些其他信息,如端口!众所周知,ip+port 能唯一确定一台机器上的一个服务!

小结

bonjour的简单运作过程是:注册并组播自己的设备名称---注册并组播自己的所能提供的服务的名称--组播自己所提供服务名称对应的详细信息


注:需要分析bonjour协议可以结合DNS协议以及MDNS协议来分析,还有就是可以对程序进行单步调试并进行抓包分析!


再次声明:该文章所分析道的结论不一定正确,只是个人观点!如有错误,请多多指教,共同进步!


你可能感兴趣的:(ios,Bonjour,mDNS,组播DNS)