zoukankan      html  css  js  c++  java
  • 打开百度要用几步

    要把大象装冰箱,只需要三步。但想打开百度确需要n多步,本文讨论一下详细的步骤和其中牵扯的技术。

    1、突破内网

    PC在开机时就通过DHCP获取到了IP地址和DNS地址,并通过ARP获取到网关的MAC地址,以太网的二层网络中通信需要对端的MAC地址。

    通过NAT将内网地址转换为公网地址。

    路由器通过PPPoE拨号认证。

    1.1         DHCP详细流程:

    查看/释放/重获取ip地址

    ipconfig /all

    ipconfig /release

    ipconfig /renew

     

    DHCP是应用层协议,客户端使用UDP68端口,服务端使用67端口。

    1.1.1 DHCP discover

    PC发出DHCP Discover广播报文

    向整个广播域内广播请求DHCP服务器(這里就是家庭路由器)的地址回复

     

    1.1.2 DHCP Offer单播报文

    DHCP服务器收到Discover数据包时,从地址池中获取一个地址,给客户端单播回复一个包含此地址的回复

     

    1.1.3 DHCP Request广播报文

    客户端接收到此地址后,向整个内网广播,告诉所有DHCP服务器自己已经做出选择,接受了某个DHCP服务器的租约。但目前还无法使用。

     

    1.1.4 DHCP ACK单播报文

    服务器接收到ACK时,向客户端回复确认,此时客户端就可以快乐的上网了。

     

    1.2         ARP 的作用

    在内网的二层环境下,需要使用MAC地址进行转发,所以需要PC和路由器都需要使用ARP将对端设备的MAC地址记录在本地的ARP表

    查看/清空arp缓存

    arp -a

    arp –d

     

     

    1.2.1     PC广播ARP广播报文查询网关的MAC

     

    1.2.2     网关单播ARP报文回复

     

    1.3         NAT地址转换

    访问公网需要使用公网地址,但由于IPV4地址数量紧张,运营商只会给每户分配一个地址,想要内网中复数台终端上网就需要通过NAT技术将私网地址转换为公网地址。

    这里使用的是端口复用模式。私网地址通过NAT转换为公网地址加上端口号的模式。

    2、公网遨游

    通过路由器后进入接入网的范围,这里数据包封装为PPPoE+QinQ模式。在BAS设备处终结。

    进入传输网后,通过各种路由协议路由到百度的数据中心。

    获取了百度的IP地址后,数据包就可以路由到百度的数据中心了。

    查询经过访问路径

    tracert -d www.baidu.com

     

    3、找到百度真身

    虽然我们有了到达百度数据中心的能力,但是不知道百度的IP地址也没用,通过DNS获取到百度的IP地址。

    DNS是应用层协议,同时使用TCP和UDP的53端口传输数据。

    3.1 DNS的详细过程:

    由于我们的DNS服务器地址是网关地址,所以DNS的迭代查询由路由器和其余DNS服务器交流。

    3.1.1 获取百度的权威服务器地址

    查看dns查询过程,查询到权威dns

    dig www.baidu.com +trace

    其实这些都是路由器帮我们完成的工作,但使用此命令也可以看到

    这里按照.,com.,baidu.com.的顺序查找DNS服务器,这里的回复结果全部都是各种NS记录,每个选择最快的NS记录来查找。

    回复www.baidu.com的CNAME记录www.a.shifen.com,再通过这个www.a.shifen.com查找A记录,得到百度的IP

     

     

    3.2 查询百度的权威服务器

    获取百度的IP地址,也就是A记录,这个由PC来完成,并记录到本地的DNS缓存中。

    查看/清空dns缓存

    ipconfig /displaydns

    ipconfig /flushdns

    这里可以看到百度的CNAME,也就是别名。还有a记录,也就IP地址了

    4、打开网站

    通过各种设备,anti-DDOS,链路负载,防火墙,服务器负载,WAF,服务器

    Web服务器:Nginx,Apache,IIS

    后端:各种中间件,后端程序

    和web服务器进行TCP连接TCP三次握手

    http get请求

    http response (HTML,CSS,JS)

    和web服务器TCP四次挥手

    浏览器渲染

    4.1 HTTP交互数据的详细流程

    这里是POST方法获取目标站点资源的流程(由于百度现在都是HTTPS链接了,就用个别的吧,原理是一样的)。

    143-145号包是TCP三次握手的包,三次握手用来建立TCP连接

    146是浏览器发送HTTP POST请求的包

    147是Web服务器收到146号包回复的确认包,在TCP数据传输中,收到数据包就会回复对方一个ACK包表示确认收到

    148是Web服务器回复POST请求的回复包,HTTP状态码为200,表示正常回复

    149-153号包是TCP四次挥手的包,四次挥手用来结束TCP连接,其中149包含了对148的ACK

    至此完成了一次完成的请求过程

     

    4.2 数据中心里的乱七八糟的设备

    数据包在进入百度的数据中心后还要经过N多设备的洗礼,经过各种拆包封包后才会给到Web服务器

    简单的拓扑是这样,实际中比这个还要复杂些

     

    一般第一个设备就是anti-DDos设备,专门用来防御DDos攻击,当发现数据流的攻击特征后采用路由注入的方式将DDos的数据引入黑洞路由中

    链路负载,负责依据客户端的源地址从相应的运营商链路中送回去

    防火墙,五元组,会话的方式保护内部,主要监测下四层,限制不受欢迎的IP进入,同时做目的NAT,将内部的真实地址隐藏起来

    SSL卸载,将HTTPS包解密为普通的HTTP数据包

    服务器负载,引据各种算法,将数据包引流到最健壮的服务器上

    IDS,即入侵检测,旁路在交换机上,检查数据包的特征指纹,判断其是否是攻击包,主要监测上三层

    交换机,纯转发

    WAF,在应用层面上保护web应用,防御针对web应用的攻击,防止SQL注入,框架攻击等等

    4.3 服务器里面发生了什么

    总算进到了服务器里面,外面硬件设备的工作暂告一段落,各种软件的工作才刚刚开始

    4.3.1 Web服务器

    Web服务器为每一个到来的HTTP请求开一个新的线程,来进行并发的处理

    Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,

    PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给各种后端程序去处理。

    4.3.2 后端程序

    后端程序负责处理各种逻辑,然后生成HTML文件,然后交还给Web服务器,最后再由Web服务器带上静态内容(如图片,css,js等)返回给客户端,有些数据还需要去数据库中进行操作

    4.3.3 数据库

    需要长期保存的数据都要保存在数据库中,在需要时由后端程序向数据库进行各种增删改查的操作,数据库将结果返回给后端程序

    4.4.4 缓存

    对于某些经常被访问的资源,每次都查询数据库,后端处理就很麻烦了,可以将其存入缓存中,下次再请求相同的资源就可以由Web服务器直接调用缓存中的静态资源返回给客户端

    4.5 浏览器渲染

    其实Web服务器返回给我们的是一堆代码和地址

    是由HTML,JS,CSS和文字图片之类的构成的

    右键查看源代码,这个才是我们实际收到的东西,最后由浏览器渲染成了我们看到的样子

    5、总结

    可以看出来简单的访问一个百度,中间经历了这么多的步骤,算上中间的每一跳转发设备,几百步总是有了,然而这么多的步骤(由于本人的水平有限,中间应该还省略了很多步骤),最终经历不过1秒钟

  • 相关阅读:
    【今日CV 视觉论文速览】 19 Nov 2018
    【numpy求和】numpy.sum()求和
    【今日CV 视觉论文速览】16 Nov 2018
    【今日CV 视觉论文速览】15 Nov 2018
    poj 2454 Jersey Politics 随机化
    poj 3318 Matrix Multiplication 随机化算法
    hdu 3400 Line belt 三分法
    poj 3301 Texas Trip 三分法
    poj 2976 Dropping tests 0/1分数规划
    poj 3440 Coin Toss 概率问题
  • 原文地址:https://www.cnblogs.com/cx59244405/p/9005903.html
Copyright © 2011-2022 走看看