URL访问网站的网络传输全过程

打开浏览器,在地址栏输入URL,回车,出现网站内容。这是咱们几乎天天都在作的事,那这个过程当中究竟是什么原理呢?HTTP、TCP、DNS、IP这些耳熟能详的名词都在何时起着什么做用呢?在这里总体梳理一遍。浏览器

整个过程基本分作下面几个部分:缓存

一、域名解析成IP地址;
二、与目的主机进行TCP链接(三次握手);
三、发送与收取数据;
四、与目的主机断开TCP链接(四次挥手);
下面分别进行详细说明。服务器

域名解析成IP地址
首先说什么是域名解析?网络

咱们在浏览器地址栏中输入的都是相似“www.baidu.com”、“www.qq.com”等等容易记忆的英文域名,但这些字母你直接交给整个网络线路去寻找目的主机找获得吗?找不到,由于每一个主机在网络中的位置都是以IP标识的,IP才是主机在网络中的位置,域名只是为了方便用户记忆而已,这就要求浏览器可以识别域名而且将其转化为对应的IP地址。网站

因此浏览器会有一个DNS缓存,其中记录了一些域名与IP的对应关系,供浏览器快速查找须要的IP。可是这个DNS缓存不可能存下全部的域名-IP地址,况且IP地址有时候还会变化,所以当在DNS缓存中没有找到的时候,就要先向DNS服务器请求域名解析,咱们常听到的DNS服务器很大的做用就是进行域名解析。翻译

值得一提的是,DNS域名解析时用的是UDP协议。路由

整个域名解析的过程以下:开发

一、浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文;
二、DNS模块将生成的DNS报文传递给传输层的UDP协议单元;
三、UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元;
四、IP协议单元将该数据封装成IP数据包,其目的IP地址为DNS服务器的IP地址;
五、封装好的IP数据包将传递给数据链路层的协议单元进行发送;
六、发送时在ARP缓存中查询相关数据,若是没有,就发送ARP广播(包含待查询的IP地址,收到广播的主机检查本身的IP,符合条件的主机将含有本身MAC地址的ARP包发送给ARP广播的主机)请求,等待ARP回应;
七、获得ARP回应后,将IP地址与路由的下一跳MAC地址对应的信息写入ARP缓存表;
八、写入缓存后,以路由下一跳的地址填充目的MAC地址,以数据帧形式转发;
九、转发可能进行屡次;
十、DNS请求到达DNS服务器的数据链路层协议单元;
十一、DNS服务器的数据链路层协议单元解析数据帧,将内部的IP数据包传递给网络层IP协议单元;
十二、DNS服务器的IP协议单元解析IP数据包,将内部的UDP数据报传递给传输层UDP协议单元;
1三、DNS服务器的UDP协议单元解析收到的UDP数据报,将内部的DNS报文传递给DNS服务单元;
1四、DNS服务单元将域名解析成对应IP地址,产生DNS回应报文;
1五、DNS回应报文->UDP->IP->MAC->个人主机;
1六、个人主机收到数据帧,将数据帧->IP->UDP->浏览器;
1七、将域名解析结果以域名和IP地址对应的形式写入DNS缓存表。
其中提到了一个ARP的概念,相似于DNS将域名翻译成IP,ARP则是将IP翻译成MAC地址,咱们知道了IP后,须要经过主机的MAC地址来更具体的找到主机。一样的也有一个ARP缓存,其中存储了一些IP与MAC地址的对应关系,若是缓存中找不到,就会进行广播来查找MAC地址,收到广播的主机会检查本身的IP是不是待查找的IP,是的话就返回本身的MAC地址。同步

若是作开发,每每还会接触到端口这个概念,那端口是什么呢?这里是指TCP/IP协议中的端口,端口号的范围从0到65535,好比用于浏览网页服务的80端口,用于FTP服务的21端口等等,都有一些固定的端口号,被占用后就不能被别的服务拿来传输数据了。域名

与目的主机进行TCP链接(三次握手)
获得域名对应的IP地址后,也就表示能够将数据送达目的主机了,这时候才开始咱们常说的三次握手创建链接。

HTTP的请求时使用TCP进行传输的,能够保证可靠传输,而且有序,而TCP是有链接的传输,也就是在传输数据以前,会创建个人主机与目的主机之间的链接,而后才能传输数据,传输完成后,还有断开链接。这也就是TCP的三次握手和四次挥手,大体过程以下图所示:

具体的三次握手创建链接的过程以下表述,其中数据包的传输过程相似上文请求DNS服务器时的过程,就简单的表示一下:

一、向目的主机发送TCP链接请求报文;
二、该TCP报文中SYN标志位设为1,表示链接请求;
三、该TCP报文经过IP(DNS)->MAC(ARP)->网关->目的主机;
四、目的主机收到数据帧,经过IP->TCP,TCP协议单元回应请求应答报文;
五、该报文中SYN和ACK标志设为1,表示链接请求应答;
六、该TCP报文经过IP(DNS)->MAC(ARP)->网关->个人主机;
七、个人主机收到数据帧,经过IP->TCP,TCP协议单元回应请求确认报文;
八、该TCP报文经过IP(DNS)->MAC(ARP)->网关->目的主机;
九、目的主机收到数据帧,经过IP->TCP,链接创建完成。
三次握手的过程就是一去一回一去,互相确认一下,就创建链接啦。这个过程当中任何一个报文出错或者超时,都要进行重传。

发送与收取数据
如上所说,只有创建链接后才能开始传输数据,数据其实有多种传输方式,好比分段啊分组啊分时啊等等。而一个数据包的传输过程以下所示,以HTTP的GET方法请求为例:

一、浏览器向域名发出GET方法报文;
二、该GET方法报文经过TCP->IP(DNS)->MAC(ARP)->网关->目的主机;
三、目的主机收到数据帧,经过IP->TCP->HTTP,HTTP协议单元会回应HTTP协议格式封装好的HTML形式数据;
四、该HTML数据经过TCP->IP(DNS)->MAC(ARP)->网关->个人主机;
五、个人主机收到数据帧,经过IP->TCP->HTTP->浏览器,浏览器以网页形式显示HTML内容。
其余的HTTP方法在传输数据时方法都相似,只是所携带的内容不一样。

与目的主机断开TCP链接(四次挥手)
数据传输完成后须要断开链接,与创建时不一样,断开链接须要多一次,有四次挥手,至于为何,看完过程咱们再讲。

这里再把图拿过来帮助理解:

过程以下:

一、浏览器向目的主机发出TCP链接结束请求报文,此时进入FIN WAIT状态;
二、该报文FIN标志位设为1,表示结束请求;
三、TCP结束请求报文经过IP(DNS)->MAC(ARP)->网关->目的主机;
四、目的主机收到数据帧,经过IP->TCP,TCP协议单元回应结束应答报文;
五、当前只是进行回应,由于目的主机可能还有数据要传,并不急着断开链接;
六、该报文中ACK标志位设为1,表示收到结束请求;
七、目的数据发送完全部数据后,向个人主机发出TCP链接结束请求报文;
八、该报文FIN标志位设为1,表示结束请求;
九、TCP结束请求报文经过IP(DNS)->MAC(ARP)->网关->个人主机;
十、个人主机收到数据帧,经过IP->TCP,TCP协议单元回应结束应答报文,此时进入TIME WAIT状态,由于不相信网络是可靠的,若是目的主机没收到还能够重发;
十一、该报文中的FIN标志位均设为1,表示结束应答;
十二、该TCP回应报文经过IP(DNS)->MAC(ARP)->网关->目的主机;
1三、目的主机关闭链接;
1四、TIME WAIT等待结束后,没有收到回复,说明目的正常关闭了,个人主机也关闭链接。
这里的过程是以个人主机主动发起结束请求开始的,实际上也能够由目的主机主动发起,那么过程就会跟上面相反,但细节差很少。

FIN_WAIT状态是主动发起请求时等待确认信息,而TIME_WAIT状态是收到结束请求后发送确认信息后等待看是否须要重发。

如今来讲说为何断开链接时须要四次挥手呢?由于创建链接时目的主机能够直接发送SYN(同步)+ACK(应答)报文。而当断开时,目的主机收到FIN后可能还有数据要发,并不必定直接断开,因此先发送一次应答,告知个人主机收到了请求,等确认全部数据都发完了,再发送FIN,同时等待个人主机应答,这里的FIN和ACK就不能一块儿发送,因此须要四次。


以上就是URL访问网站时的网络传输全过程,概括起来就是:

首先要经过域名找到IP,若是缓存里没有就要请求DNS服务器;获得IP后开始于目的主机进行三次握手来创建TCP链接;链接创建后进行HTTP访问,传输并获取网页内容;传输完后与目的主机四次挥手来断开TCP链接。 ---------------------   

相关文章
相关标签/搜索