在浏览器中输入url后,发生的一系列事情

首先分享一个网友对这个的总结,超级牛:http://fex.baidu.com/blog/2014/05/what-happen/

  • 具体流程如下

1.首先在浏览器中输入需要的网址

用户输入url,例如:https://blog.csdn.net,http是协议,blog.csdn.net是服务器的地址(域名);

2.(应用层)Web浏览器进行DNS解析域名,查找域名的IP地址

在DNS系统中一个域名对应一个IP地址。DNS系统是分布式的具有层次关系,浏览器会首先在本地DNS服务器上查询DNS表,如果没有域名对应的IP地址,接着以递归查询(向其他DNS服务器发起查询请求,让它们去查)或迭代查询(告诉本地服务器下次应该去哪个DNS服务器中进行查询)的方式向其他DNS服务器发送查询请求,最终会在一个DNS服务器的DNS表中查找到对应得IP地址;

3.解析端口号,与Web服务器建立TCP连接

url中有端口号,IP地址和端口号都知道Web浏览器和Web服务器建立连接,建立连接需要进行3次握手:
1>.Web浏览器给Web服务器发送一个SYN包,其中包含一个序列号i,Web浏览器进入SYN_SENT状态等待Web服务器的应答;
2>.Web服务器将收到的SYN包中的序列号进行加一,放在一个ACK包里,同时自己产生一个SYN包,里面包含自己的序列号j,将SYN包和ACK包发送给Web浏览器,服务器进入SYN_RECV状态;
3>.Web浏览器收到SYN包和ACK包,将SYN包中的序列号j加一,放在一个ACK包里发送给Web服务器,此时双方都进入ESTABLISHED状态。

在浏览器中输入url后,发生的一系列事情_第1张图片
【第三次握手的时候就可以传送数据了;如果Web服务器没有收到ACK包,会再向Web浏览器发送SYN/ACK包;连接建立好之后Web服务器就会等待Web浏览器发送请求,如果Web浏览器一直不发送请求消息,Web服务器就会过一段特定的时间(75分钟)给Web浏览器发送一个探测报文,如果连发十次Web浏览器还是没有响应,这个连接就会断掉】

4.(应用层)Web浏览器给Web服务器发送一个HTTP请求

Web浏览器将请求封装成一个HTTP请求报文,以GET的方式发送HTTP请求,这个请求包括主机,用户代理(浏览器),连接属性(keep_alive属性告诉Web服务器在传输完现在请求的内容的时候不要断开连接)和cookies(保存了用户的登陆信息,在每次下个服务器发送请求的时候会重复发送给服务器),遵循的协议,目标url等重要信息

5.传输层的TCP传输报文

应用层向TCP层发送的是用于网间传输的8字节表示的数据流,TCP将数据流分为适当长度的报文段(最大传输段大小通常受到计算机连接的网络的数据链路层的最大传输单元MTU的限制),将数据包传送给网络层。
TCP为了保证传输数据包的可靠性,将每个字节的数据都进行编号称为序列号,保证数据按序到达,同时会收到已发送成功的数据包的ACK应答,如果在合理的往返时延内未接收到ACK,会将对应的数据进行重传称为超时重传;为了提高性能设置了滑动窗口,无需等待确认应当继续发送数据的最大值,收到一个ACK后滑动窗口向后移动,继续发送一个窗口大小的数据;为了避免接收端和发送端数据不一致的问题引入了流量控制,TCP支持根据接收端的处理能力来决定发送端的数据发送的速度;避免在不清楚网络状态时候发生大量的数据,又引入了拥塞控制,慢启动机制先发送少量的数据探测网络状态,再根据ACK应答增加发送的数据;延迟应答可以根据处理端处理数据的速度有效知道每次发送窗口大小

6.网络层的IP协议查找MAC地址

IP协议进行路由的选择,传送TCP分割好的各种数据包,要传给特定的主机就要知道其MAC地址,利用ARP协议(建立了主机IP地址和MAC地址的映射关系)将IP地址转换成对应的MAC地址,首先查询ARP缓存,如果缓存命中返回结果,否则查看路由表看目的IP是否在本地路由表中的哪个子网内,是的话使用和那个子网相连的接口,不是的话就使用和默认网关相连的接口,查询选择的网络接口的MAC地址

7.数据到达数据链路层,服务器接收数据并响应请求

当知道目的主机的MAC地址的时候将数据发送到数据链路层,这时Web客户端发送请求阶段结束;Web服务器在数据链路层上接收到数据包,自底向上进行分用,去掉报头,重新组成原来的HTTP请求;
Web服务器收到Web客户端的请求报文后查找Web客户端请求的资源并返回响应报文,响应报文中包括一个重要的信息—状态码,200 (OK)表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url做相应的改变再重新发送。404 not found 表示客户端请求的资源找不到;

8.服务器会返回相应的HTML文件

你可能感兴趣的:(网络编程,网络,http)