一次完整的网络访问过程

环境:

目前的网络环境为一台全新的用于公司内网中的客户机,公司的服务器设备有DHCP服务器,DNS服务器。我们接下来描述的过程为:客户机在插上网线的那一刻,到访问百度首页的整个网络过程。

第一阶段:

1.插上网线时,客户机会发送DHCP discovery广播包,请求IP地址

【大喇叭喊谁能提供IP地址】

2.DHCP服务器收到请求 发送 DHCP offer广播包,告诉客户机说我这有IP地址。

【大喇叭喊我能提供IP地址,谁先喊谁先提供】

3.客户机收到该广播包,并且发送DHCP Requset广播包,同时请求IP地址相关参数(网关,dns,子网掩码等)。如果该网络有多台DHCP服务器,则其他的服务器不会响应这个请求。

【听到好多人喊,再大喇叭喊我用第一个回我的那个人提供的IP地址,其他都回吧,同时请求相关参数】

4.服务器收到广播包,然后发送 DHCP ACK包,即向客户机发送IP地址,网关,dns,子网掩码相关参数。

该过程完成后,客户机就有了IP地址,子网掩码,网关,dns等参数。可以在内网中通信。

一次完整的网络访问过程
一次完整的网络访问过程

包内容:
一次完整的网络访问过程

第二阶段:

接着,客户机打开浏览器,在地址栏输入www.baidu.com后回车。

**1.**客户机先去访问缓存,接着访问host文件,由于是全新的机器,所以两处文件都没有数据。

**2.**客户机需要知道百度的IP地址,所以去访问DNS服务器。假设DNS服务器跟客户机在一个网段内。DNS服务器的地址从DHCP服务器那里已经继承过来,知道了DNS服务器的IP地址还不能发送数据,还需要是的DNS服务器的MAC地址。接着客户机发送arp广播包获取DNS服务器的MAC地址。

【大喇叭喊IP地址为x.x.x.x的人你的MAC地址是多少,DNS收到后就会回应MAC地址】

**3.**获取完MAC地址之后客户机即可组织发送数据,向DNS服务器请求百度的IP地址。客户机会先发送一个NDS请求包,DNS服务器收到后会先看缓存,如果缓存里面有百度的地址,那么就会回发给客户机NDS回复包。如果缓存里没有,那么DNS服务器就会看自己负不负责解析baidu.com 这个域名,不负责那就转发给远程DNS服务器,再回发数据包。

报文格式如下:

一次完整的网络访问过程

请求包Queries区域的字段有:

name:域名

name length:域名长度

label count:

type:资源记录类型,一般是A,也就是A记录,代表主机

class:Internet,一般是IN

NDS回复包比请求包多一个Answers区域,字段有:

name:域名

type:同上

class:同上

time to live:缓存时间,秒

data length:解析IP地址的大小,4个字节

address:IP地址

**4.**使用ARP协议获取默认网关的MAC地址。

第三阶段:

**5.**客户机将数据包发送给网关,路由器根据路由协议及路由表选择一条最优路径,将客户机数据转发给所获取IP地址的百度服务器的目的网关,该网关再将数据转发给那个获取IP的百度服务器,进行TCP三次握手

**6.**客户机使用http协议发送请求数据给web服务器

**7.**百度web服务器收到请求后查找相应的结果,然后原路返回给客户机

**8.**客户机收到数据通过浏览器的渲染功能显示网页

当然,一些其他的细节已忽略,后续补充。