计算机网络计算机网络技术分享程序员

从浏览器访问http://www.sina.com.cn的全过程

2018-03-23  本文已影响9人  且以沧海寄余生

从浏览器访问http://www.sina.com.cn的全过程



DNS域名解析

①浏览器先在本地host文件中查找,如果查找到了该www.sina.com.cn主机到相应IP地址的映射条目,则域名解析成功。

②如果没有找到对应的映射,则请求本地所配置的DNS服务器,如果本地的DNS服务器缓存了www.sina.com.cn主机对应的IP地址的信息,则本地DNS服务器返回相关数据,域名解析成功。

③如果没有找到对应的IP地址的信息,浏览器递归查找DNS服务器,服务器进行迭代查找,直到找到www.sina.com.cn主机对应的IP地址的信息,然后返回结果到浏览器,没有找到的话域名解析失败。

递归查找的过程:

浏览器先向DNS服务器发出DNS请求,目的是获取www.sina.com这个域名所对应的IP地址;

浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文;接着,DNS模块将生成的DNS报文传递给传输层的UDP协议单元;UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元;IP协议单元将该数据封装成IP数据包,其中目的IP地址为DNS服务器的IP地址;封装好的IP数据包将传递给数据链路层的协议单元进行发送;发送时如果ARP缓存中没有相关数据,则发送ARP广播请求,等待ARP回应;

数据链路层的作用范围是局域网,那么其MAC地址肯定是局域网内某台机器的MAC地址。并且ARP协议的作用范围也是局域网。但是IP数据包的目的地址未必都是局域网内的,如果不是,在局域网内进行ARP广播查询该IP地址对应的MAC地址,肯定没有人回应,因为大家谁都没有这个IP地址。

使用子网掩码就可以确定IP地址是不是同一个局域网里的。如果是同一个局域网,那么就可以进行ARP。如果不是,这就要靠网络层了。路由表不是只在路由器上才有的,本机上也有,而且也有路由过程。

默认路由路径(因为任何一个IP地址 AND 0.0.0.0 后肯定都是 0.0.0.0 的)意思就是:如果其他路由项都不符合,则发送到默认网关。默认情况下,windows机器不会充当路由器的功能,它不会转发(forward)自己接受到的但是目的地址不是自己的包。但是这是可以设置的,通过开启路由转发功能,就能充当一个路由器了。这样,局域网中另一台机器就可以把默认网关设置为你的IP,然后他的所有到外网的包都先交给你,然后你再路由转发出去。

IP地址转换到MAC地址的过程如下:

 ①首先得到IP包需要送达的目的地址IP-des ;

 ②查路由表,根据匹配IP-des 的路由表项得到下一跳(next hop)的中间目的地址IP-next (可以保证IP-next 是局域网中的地址);

 ③在ARP缓存中查找IP-next 对应的MAC地址,如果缓存中没有,再到局域网中使用ARP协议进行询问;得到了MAC地址后,将MAC地址放到帧头,发送数据。

当得到ARP回应后,将IP地址与路由下一跳MAC地址对应的信息写入ARP缓存表;写入缓存后,以路由下一跳地址填充目的MAC地址,并以数据帧形式转发;因为DNS服务器在网络中的位置不同,所以这个转发过程可能会进行多次;

DNS请求被发送到DNS服务器的数据链路层协议单元;DNS服务器的数据链路层协议单元解析收到的数据帧,将其内部所含有的IP数据包传递给网络层IP协议单元;DNS服务器的IP协议单元解析收到的IP数据包,将其内部所含有的UDP数据报传递给传输层的UDP协议单元;DNS服务器的UDP协议单元解析收到的UDP数据包,将其内部所含有的DNS报文传递给该服务器上的DNS服务单元;DNS服务单元收到DNS请求,将域名解析为对应的IP地址,产生DNS回应报文;

(所有应用层报文必须通过传输层、网络层和数据链路层,其中 网络层主要任务是路由,而数据链路层是提供相邻两个网络实体间端到端的数据传输,可以理解成为局域网内两台机器间的数据传输。下面的过程就不再像之前那样赘述,尽量简写了。)

DNS回应报文→UDP→IP→MAC→→请求域名解析的主机;

请求域名解析的主机收到数据帧,该数据帧→IP→UDP→DNS→浏览器;

将域名解析的结果以域名和IP地址对应的形式写入本地DNS缓存表。

浏览器与www.sina.com.cn建立TCP连接

浏览器根据地址类型(IPv4,IPv6),套接字类型(SOCK_STREAM、SOCK_PACKET),协议类型(UDP,TCP)创建套接字(socket(int domain, int type,

int protocol)),并绑定一个地址(IP+端口号),然后监听该端口(listen()),现在服务器端处于监听状态。客户端用服务器IP地址和应用端口号创建一个套接字作为请求的套接字,调用connection函数(这里会为客户端创建一个套接字,客户端IP地址+任意分配的端口号)试图请求连接(整个连接过程就是三次握手的过程)。

浏览器向www.sina.com.cn发出TCP连接请求报文:

  该请求TCP报文中的SYN标志位被设置为1,表示连接请求;

  该TCP请求报文→IP(DNS)→MAC(ARP)→→网关→→www.sina.com.cn主机;

  该TCP请求报文经过IP层时,填入的目的IP地址就是上面DNS过程获得的IP地址;

  经过数据链路层时,若MAC地址不明,还要进行上面所叙述的ARP过程;

  www.sina.com.cn收到的数据帧→IP→TCP,TCP协议单元会回应请求应答报文;

  该请求应答TCP报文中的SYN和ACK标志位均被设置为1,表示连接请求应答;

  该TCP请求应答报文→IP→MAC(ARP)→→网关→→请求主机;

  请求主机收到数据帧→IP→TCP,TCP协议单元会回应请求确认报文;

  该请求应答TCP报文中的ACK标志位被设置为1,表示连接请求确认;

  该TCP请求确认报文→IP→MAC(ARP)→→网关→→www.sina.com.cn主机;

  www.sina.com.cn收到的数据帧→IP→TCP,连接建立完成;

  在这个过程中,任何一个报文出错或超时,都要进行重传;

  这个过程被称为TCP建立连接的三次握手

浏览器开始HTTP访问过程

IE浏览器向www.sina.com.cn发出HTTP-GET方法报文:

  该HTTP-GET方法报文→TCP→IP→MAC→→网关→→www.sina.com.cn主机;

  www.sina.com.cn收到的数据帧→IP→TCP→HTTP,HTTP协议单元会回应HTTP协议格式封装好的HTML超文本形式数据;

  HTTP-HTML数据→TCP→IP→MAC(ARP)→→网关→→请求主机;

  请求主机收到的数据帧→IP→TCP→HTTP→浏览器,浏览器会以网页形式显示HTML超文本,就是我们所看到的网页。

断开TCP连接

浏览器向www.sina.com.cn发出TCP连接结束请求报文:

  该请求TCP报文中的FIN标志位被设置为1,表示结束请求;

  该TCP结束请求报文→IP→MAC(ARP)→→网关→→www.sina.com.cn主机;

  www.sina.com.cn收到的数据帧→IP→TCP,TCP协议单元会回应结束应答报文;

  该结束应答TCP报文中的FIN和ACK标志位均被设置为1,表示结束应答;

  该TCP结束应答报文→IP→MAC(ARP)→→网关→→请求主机;

  这个过程需要双向进行,因此www.sina.com.cn主机也会按上述流程再做一次;

  整个过程被称为TCP断开连接的四次握手。

上一篇下一篇

猜你喜欢

热点阅读