情景1dns查询

1. 得到google的dns

2. 应用层如何通过程序的形式得到的ip地址 

3. 代码下载 

1. 得到google的dns 

 

我们现在假定现在我们使用的是一个真实的ip,并且假设不存在任何(dns,html页面)的缓存,我在浏览器中键入:http://www.google.com/,按下enter键。浏览器响应该事件,然后浏览器为了下载到google的页面,不得不得到google的实际ip地址,因为在真实的网络是不存在类似于http://www.google.com/的寻址地址的,只有通过ip地址才能寻址到google的服务器。那么我们的浏览器如何确定google真实的ip地址?

显然browser是不可能自身存储网站的ip地址,只能通过一定的手段来查询得到某个网站的ip地址,这是通过全球的dns系统实现的。

继续我们的旅行,浏览器响应该事件之后,端系统(这里是指我们的pc机)上发生的事情: 

1. browser首先发送一个生成一个dns查询的报文,然后递交至运输层。

2. 运输层将接收到的来自发送的应用程序(browser)的报文转换成运输层分组,我们称之为报文段segment,这里可能的是实现方法是将应用程序(browser)递交上来的报文分割成较小的块,并为每一层增加运输层的首部,然后向上递交至网络层。

3. 网络层将运输层递交上来的数据增加网络层的头,形成网络分组,并将这些分组递交至数据链路层。

4. 链路层接受网络层提交的数据,并将其封装成“帧”,然后按转链路接入的协议将帧传入通信链路中,然后物理层开始负责具体的数据传输任务。在链路层中可能设计到流量控制,容差检错等工作。

通过上面的工作仅仅是完成了dns查询报文在我们的pc机上的发送过程。数据才刚刚飞起来。下面数据在链路中传递,下一招将到达的是第一个路由器R1,路由器是实现了网络层,数据链路层和物理层三层协议栈,R1首先将传入至此的数据一直向上提交,直至到达网络层,网络层中将提取该数据报的网络层的字段,并通过一定的选路算法将该数据包递交出去。然后可能是经过了n个路由器,假设最终到达dns的根服务器,根dns服务器将返回com的顶级域的dns服务器的ip地址(这上上面过程的重复),然后我们的pc机重复上面的过程相返回的com顶级域的dns服务器发送dns查询报文,com的顶级域dns服务器将返回能够查询到google的权威dns服务器,然后我们的pc机箱google的权威dns服务器发送dns查询报文,重复上面的过程,最终得到google的实际ip地址。

到现在为止,客户端终于得到了google的ip地址,好像是跑了很长时间,但是这仅仅是开始的序幕,接下来才是重头戏:得到google的ip地址之后,那么将发起相google的http链接。下图是到现在为止发生的事件图:

 

2. 应用层如何通过程序的形式得到的ip地址  

View Code

程序运行结果:

 

3. 代码下载

 /Files/xuqiang/GetHostByName.rar

posted @ 2011-03-31 22:02  qiang.xu  阅读(306)  评论(0编辑  收藏  举报