从输入网址到浏览器显示网页发生了什么?

从输入网址到浏览器显示网页发生了什么?

如果有问题请及时提出,我将及时更正,谢谢

获得目标IP

首先,我们输入的一般都是域名,那么域名无法通信,需要转换为IP,所以浏览器会先查找本地缓存,查找到域名对应的IP的话,再进行下面步骤,如果查找不到的话,那么会去host文件查找该域名对应的ip,如果找不到,一般会去DNS服务器请求。

如果DNS有该域名对应的IP缓存,那么直接返回对应的IP,否则,需要向根域名查询。

根服务器根据我们需要查询的域名,告诉我们该去哪个子域名DNS服务器查询。例如:我们需要打开的是www.baidu.com

那么根域名服务器会告诉我们.com域名服务器的位置,DNS会去.com域名服务器下查找,再去baidu.com下查找,baidu.com会返回给我们百度的ip。

HTTP请求

应用层发起HTTP请求,请求包括请求网址,请求方法,请求头等。

建立TCP连接

那么接下来

既然已经获得目标IP了,由于HTTP基于TCP,所以需要构建TCP连接。

经典的三次握手,双方都要获取对方的序列号,序列号用来统一双方的时间节点,在实际传输中也可以判断数据的丢失和延迟到达。

SYN,SEQ = X

SYN,ACK = X+1,SEQ = Y

ACK = Y + 1

握手之后可以传输数据了!

TCP传输数据

TCP将数据分为多个报文段,自己控制着滑动窗口,向对方传输窗口大小的数据。

需要知道自己的端口和对方的端口,由于我们要访问的是www.baidu.com,那么默认是80端口,如果是https,默认是443端口

IP传输

IP将数据传输给对方,需要知道对方的IP,好在我们已经通过DNS知道了对方的IP,将自己的IP和对方的IP填入即可。那么我们需要将数据传输给谁呢?我们可以直接将数据发给网关,网关怎么判断这个数据该发往何处呢?通过路由协议,如果是内部的话,使用RIP或OSPF,如果是外部网关使用BGP,找到下一跳需要发给哪个路由器。(RIP,OSPF,BGP后续更新)

数据链路层传输

数据链路层只认Mac地址,那么怎么办?

将上层数据打包,封装成帧,源MAC填写本机的MAC地址,目标MAC地址,如果我们本地有ARP缓存,直接查询,没有的话,需要通过ARP协议在本网络区域内进行广播,找到目标IP对应的MAC地址,填入目标MAC地址。

物理层传输

每次中转

每次中转我们发送的报文段的目标IP都不变,变的是MAC地址。

每次路由器都将数据链路层拆开,看到IP层的目标地址,查找自己的路由表。知道下一跳,然后再找MAC地址,替换目标MAC地址。

到达对方网关

一般可能都是使用的NAT,一方面可以保证内部网络安全,另一方面可以节省IP。

NAT主要是将内部的私有网络映射为外部网络,网关会相关IP,相关端口的IP映射。

如果需要的话,根据IP查找MAC,用到ARP,再把数据发给对方。

收到数据

www.baidu.com主机收到数据后,将数据由下层向上层传输,到达上层后一步步拆包,到达TCP后将数据组装起来,发给应用层。

同样的逻辑返回数据。我们解析

猜你喜欢

转载自blog.csdn.net/qq_42254247/article/details/107871650
今日推荐