一个由PING引发的思考

      上个星期实验做了一个ping的程序,在老师的指导下发现—居然可以通过主机名来ping!!以前只是知道ping可以使用IP地址或者网站地址等等,就是ping xxx.xxx.xxx.xxx 或者 www.xxx.com等,两个的原理也比较简单,通过IP地址就不用说了,通过网址也就是通过向DNS服务器提交查询,然后DNS会返回网址对应的IP,但是如何让将主机名转为IP地址呢?

如图所示,在虚拟机里ping主机的主机名,可见程序将主机名解析为了192.168.1.101 

 

同样在主机中ping虚拟机的主机名也能成功解析,如图所示

 

通过主机名得到P地址,这不可能是通过DNS服务器来完成的,因为DNS服务器的查询表里貌似没有主机名这一项,但是总感觉在某个地方应该存有一张主机名到IP地址的映射表,莫非是NetBIOS?在网上搜了一下关于NetBIOS的资料,如下:

(以下资料转自百度百科,地址:http://baike.baidu.com/view/32803.htm

       NetBIOS协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能,系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。因为它占用系统资源少、传输效率高,尤为适于由 20 到 200 台计算机组成的小型局域网。所以几乎所有的局域网都是在NetBIOS协议的基础上工作的。
  NetBIOS 定义了一种软件接口以及在应用程序和连接介质之间提供通信接口的标准方法。NetBIOS 是一种会话层协议,应用于各种 LAN (Ethernet、Token Ring 等)和 WAN 环境,诸如 TCP/IP、PPP 和 X.25 网络。
  NetBIOS 使得应用程序无需了解包括差错恢复(会话模式)在内的网络细节。NetBIOS 请求以网络控制块(NCB:Network Control Block)的形式提供,NCB 中包含了信息存放位置和目标名称等信息。
  NetBIOS 提供开放系统互联(OSI)模型中的会话层和传输层服务,但不支持标准帧或数据格式的传输。NetBIOS 扩展用户接口(NetBEUI)支持标准帧格式,它为 NetBIOS 提供网络层和传输层服务支持。
  NetBIOS 支持两种通信模式:会话(session)或数据报(datagram)。会话模式是指两台计算机为“对话”建立一个连接,允许处理大量信息,并支持差错监测和恢复功能。数据报模式面向“无连接”(信息独立发送)操作,发送的信息较小,由应用程序提供差错监测和恢复功能。此外数据报模式也支持将信息广播到局域网中的每台计算机上。
  
NetBIOS 名称为 16 字节长(必要情况下使用填充位填满),对使用的字节值几乎没有限制。对于不执行路由的小型网络,将 NetBIOS 名称映射到 IP 地址上有三种方法:
  1. IP 广播 - 当目标地址不在本地 cache 上时,广播一个 包含目标计算机 NetBIOS 名称的数据包。目标计算机返回其 IP 地址。
  2. lmhosts 文件 - 这是一个负责映射 IP 地址和 NetBIOS 计算机名称的文件。
  3. NBNS - NetBIOS 命名服务器负责 将 NetBIOS 名称映射到 IP 地址上。该服务由 Linux 环境下的后台程序(nmbd daemon)执行。

  请注意红色的字体,通过NetBIOS协议可以将NetBIOS名称映射为对应的IP地址,在windows下可以使用nbtstat命令来查看相应的信息。这是nbstat命令的使用说明

 Displays protocol statistics and current TCP/IP connections using NBT
(NetBIOS over TCP/IP).

NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n]
        [-r] [-R] [-RR] [-s] [-S] [interval] ]

  -a   (adapter status) Lists the remote machine's name table given its name
  -A   (Adapter status) Lists the remote machine's name table given its
                        IP address.
  -c   (cache)          Lists NBT's cache of remote [machine] names and their IP
 addresses
  -n   (names)          Lists local NetBIOS names.
  -r   (resolved)       Lists names resolved by broadcast and via WINS
  -R   (Reload)         Purges and reloads the remote cache name table
  -S   (Sessions)       Lists sessions table with the destination IP addresses
  -s   (sessions)       Lists sessions table converting destination IP
                        addresses to computer NETBIOS names.
  -RR  (ReleaseRefresh) Sends Name Release packets to WINS and then, starts Refr
esh

  RemoteName   Remote host machine name.
  IP address   Dotted decimal representation of the IP address.
  interval     Redisplays selected statistics, pausing interval seconds
               between each display. Press Ctrl+C to stop redisplaying
               statistics.

使用nbtstat -n可以查看本地的NetBIOS名称,以下是截图

   

 使用nbtstat -r命令可以显示出通过WINS和广播解析出来的NetBIOS,通过截图可以看到解析出来了虚拟机的主机名和我一同学电脑的主机名

 

使用nbtstat -A可以通过IP地址解析出主机名,如图所示

 

同理,使用nbtstat -A可以通过主机名解析出IP地址,如图所示 

 使用nbtstat -c可以查看NetBIOS名称与IP的映射表

 

为了更加切实地理解其中的原理 ,用sniffer抓包看看,输入ping AndrewHP,抓包结果如下

 

可知,在发送ICMP报文之前,本机先向局域网内广播了一个WINS查询报文,查询的名字就是输入的主机名,接着,如果主机存在,则对应的主机会向本机发送一个WINS应答报文,之后本机会把该条记录存入NBT的高速缓存中,然后就可以发送相应ICMP的报文了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值