访问一个网站,发生了什么?

Posted 小狼程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问一个网站,发生了什么?相关的知识,希望对你有一定的参考价值。

输入URL,点击回车,然后发生了啥捏。

总体分4步:

1、DNS域名解析,得到IP,进行访问

2、TCP三次握手建立连接

3、发送与接收数据

4、TCP四次挥手断开连接

详细点讲:

1:访问两种方式--ip(不好记)和域名。输入域名,还要DNS服务器转换成ip的。

DNS域名解析时用的是UDP协议。整个域名解析的过程如下:

  1. 浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文
  2. DNS模块将生成的DNS报文传递给传输层的UDP协议单元
  3. UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元
  4. IP协议单元将该数据封装成IP数据包,其目的IP地址为DNS服务器的IP地址;
  5. 封装好的IP数据包将传递给数据链路层的协议单元进行发送;
  6. 发送时在ARP缓存中查询相关数据,如果没有,就发送ARP广播(包含待查询的IP地址,收到广播的主机检查自己的IP,符合条件的主机将含有自己MAC地址的ARP包发送给ARP广播的主机)请求,等待ARP回应;
  7. 得到ARP回应后,将IP地址与路由的下一跳MAC地址对应的信息写入ARP缓存表;
  8. 写入缓存后,以路由下一跳的地址填充目的MAC地址,以数据帧形式转发;
  9. 转发可能进行多次;
  10. DNS请求到达DNS服务器的数据链路层协议单元
  11. DNS服务器的数据链路层协议单元解析数据帧,将内部的IP数据包传递给网络层IP协议单元;
  12. DNS服务器的IP协议单元解析IP数据包,将内部的UDP数据报传递给传输层UDP协议单元;
  13. DNS服务器的UDP协议单元解析收到的UDP数据报,将内部的DNS报文传递给DNS服务单元;
  14. DNS服务单元将域名解析成对应IP地址,产生DNS回应报文
  15. DNS回应报文->UDP->IP->MAC->我的主机;
  16. 我的主机收到数据帧,将数据帧->IP->UDP->浏览器;
  17. 将域名解析结果以域名和IP地址对应的形式写入DNS缓存表。

TCP三次握手:

这是最基本的一个问题了,描述三次握手:

1、客户端发送SYN包,序列号为j,进入SYN_SEND状态;

2、服务器端接收到SYN包,必须确认SYN包(确认报文ACK,序列号为j+1),同时自己也发送一个SYN包,序列号为k,此时服务器端进入SYN_RECV状态;

3、客户端接收到这两个包ACK+SYN包,回复一个ACK包,序列号为k+1,此时客户端处于建立连接状态;

4、服务器接收到ACK包,处于建立连接状态。

可以开始传输数据啦!!!

问:客户端什么情况才处于建立连接状态?服务端什么时候处于建立连接状态?为啥不能两次握手就得了?

客户端简单,申请建立连接,收到服务器的确认包(ACK+ SYN)就处于建立连接喽;服务器从收到请求,到发出确认包,再到收到确认包,才建立连接;

两次握手,会有无效连接占用服务器资源的危险。比如,客户端发送请求,结果由于网络原因,滞后了;然后过段时间(客户端认为是无效请求了),服务器接到了,发了个确认包,如果两次握手,这就意味着服务器认为和客户端建立了连接,那么就会

以上是关于访问一个网站,发生了什么?的主要内容,如果未能解决你的问题,请参考以下文章

从浏览器输入http://www.baidu.com/到返回网站发生了什么?

如果名称空间的网站不再可访问,会发生啥情况?

你在chrome浏览器地址栏中输入baidu.com回车后发生了什么

Laravel Valet托管网站返回Chrome中的“无法访问网站”

打开一个网站时都发生了什么

笔试常考--浏览器输入一个URL点击回车之后发生了什么