客户端
在浏览器输入 URL 回车之后发生了什么(超详细版) - 知乎 (zhihu.com)
大致流程是:
- URL 解析
- DNS 查询
- TCP 连接
- 处理请求
- 接受响应
- 渲染页面
1.URL解析
地址解析:
首先判断你输入是否是一个合法的URL还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作
HSTS
由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面。
其他操作
浏览器还会进行一些额外的操作,比如安全检查、访问限制(之前国产浏览器限制 996.icu)。
缓存检查:
200(成功)
服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
304(未修改)
自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
DNS查询
进行将域名现在本地的 hosts 文件里,没有则启动DNS解析器向注册的 DNS 服务器发送查询请求,当然在路由的路上部分路由器也有缓存域名与ip的映射关系,如果在路由中存在就直接在路由器返回ip,如果没有则到子域名服务器查询需要的ip,当然不仅可以访问同域的服务器,也可以访问其他域的服务器。如果在这里也没有找到ip则去根域名服务器查询拥有对应ip地址的域名服务器,根域名服务器会整颗域树进行遍历,直到找到对应的域名服务器,然后根据其域名服务器提供给,其主机的同域的域名服务器,然后由其同域域名服务器返回ip。
当然如果你乱输url地址,当然找不到其ip,返回404给你玩。
在得到映射的ip后,在每一层都会备份缓存一份映射关系,这样不用每一次发包前都DNS查询一次。
HTTPS协议
在对其url解析后,创建HTTP/HTTPS报文,在数据前添加对应的报头。
HTTP/HTTPS的请求报文和协议报文的报头格式是不同的
https是在http上做到安全处理,加入了密钥措施,保护了数据的安全性。
弃用http改用https的缘故,与密钥的使用,证书意义-CSDN博客
TCP链接
在外面访问某个网页前,会先发起TCP三次握手的链接。
链接建立成功后才会开始tcp报文交流,详细链接文章参考博客链接中的3次握手细节UDP与TCP报头介绍,三次握手与四次挥手详谈_云的小站的博客-CSDN博客
TCP协议采用了:超时重传,滑动窗口,流量控制,快重传,延迟应答,捎带应答,拥塞控制等等操作方法,保证了传输的可靠性与效率。
滑动窗口的理念-CSDN博客
拥塞控制概念_云的小站的博客-CSDN博客
网络层ip的发送处理
拿到了传输层给的报文外面需要对齐做封装处理,添加ip的报文数据。
ip报头和ip报文切片组装问题-CSDN博客
尽量不对一个tcp报文去做切片处理,一旦切片不仅仅是增加了分片的时间,并且一旦众分片中的
其中一个丢失就需要整体重新传达,这是得不偿失的。
当然切不切片并不是网络层决定而是传输层和以太网中允许最大决定的。
如果tcp传入到网络层中的数据包加上ip报头超过一定大小就必须切片才能在网络中发送。
数据链路层
TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装:
数据链路层中存在的报文ip,arp,rarp-CSDN博客
数据在这一层完成最后的包装,然后发送到网络中。
对了这ARP中的目的ip并不是最终目的ip而是下一跳路由结点的ip地址,依靠此ip找对应路由的mac
数据包在路由传输过程
在网络通信的过程中,必须知道对方ip地址才可以进行通信(不同局域网的主机通信必须采用静态路由技术)。
在一个私网局域网中,向外通信是需要采用NAP/NATP技术相辅相成完成的
ip划分与私公网ip、ip的传递-CSDN博客
依托子网掩码在路由表选择发送网口,根据arp得到mac做下一跳路由,依托NAT替换原ip地址,并且记录NAT表中,这个表的映射记录也是动态的,在tcp报文链接时在三次握手阶段,第一次的FIN经过此路由器时候就会构建完毕,在四次挥手的过程中,TIME_WAIT状态发送ACK报文发送给路由器的时,将映射关系设置为失效。诚然如果希望路由器允许这样工作,那么路由器是拥有应用层功能的。(UDP不连接,导致何时销毁映射关系比较困难)
在传输的路上可能会出现回环情况,这个不用怕,在ip层拥有8位生存时间,这是一个计数器,每次跳转一个结点就会自减,到0意味着报文失效被接收的路由器销毁报文。
在这个过程中存在代理服务器,代理服务器可以将其看成高级路由器,替我们转发报文到公网中。
运营商其实就是依托其,为我们提高我们服务。
代理服务器
正向代理
校园网就是最好的正向代理服务器代表,链接校园网的设备,向外界访问资源的时候,所有的请求都会经过该服务器,我们可以将其看成一个巨大的路由器,但是服务器允许缓存资源预设在代理服务器中,打个比方,2个主机同时访问抖音服务器,A主机先B主机后,A、B主机访问的资源相同,服务器在访问数据后会预留一段时间,当B再来访问时候,直接从代理服务器中获取资源,不用再去抖音服务器访问,大大的提高了我们的网络读写效率,并且正向代理服务器会检查访问的合法性,访问的内存合法性。
反向代理
依旧和路由器很像
反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理服务器中的内容发送普通请求,接着反向代理将判断向何处转交请求,并将获得的内容返回给客户端。反向代理对外的表现都是透明的,客户不知道自己访问的是代理服务器,客户端也不需要任何配置就可以访问。当我们配置好代理服务器后,反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
正向代理和反向代理区别
正向代理中 ,代理服务器和client同属一个网络,对server透明。正向代理需要配置在客户端;
反向代理中,代理服务器和server同属一个网络,对client透明。 反向代理需要配置在服务端;
实际上代理服务器在两种代理中做的事都是代为请求和响应,不过从结构上看正好左右相反,故称为正反向代理。
服务器响应
服务器必须拥有和其客户端一样的各层协议,才能相互通信。
必须拥有相同的各层协议,否则接收方无法解开接到的数据报文,无法向上交付。
在服务器得到申请后在自己的库中查找是否存在该资源,申请对象权限是否满足,资源的位置是否改变,然后构建HTTP报文向下交付然后响应给对方。
HTTP存在响应码,这是约定的一个响应码,标识着这次响应的状态信息。
【精选】HTTP 响应码大全_http响应码_JFS_Study的博客-CSDN博客
这篇博客详细介绍了响应码的介绍。
后续的返回过程,与发送过程几乎一样。