作家
登录

最经典的前端面试题之一,你能答出什么幺蛾子?

作者: 来源: 2017-09-06 10:56:09 阅读 我要评论

  • 客户端的套接字与办事端的套接字进行连接,连接成功后,协定栈将目标办事器的 IP 地址和端标语保存在套接字中,下面就可以收发数据;
  • 发送的数据是 HTTP 请求消息,发送的过程是:浏览器经由过程描述符查找到指定的套接字,并向套接字发送数据,数据便会经由过程收集传输到办事端的套接字,办事器接收到消息后处理然后返回响应消息;
  • 消息返回后会被放入一块内存缓冲区内,浏览器可以直接攫取这段消息。之后,操作体系断开套接字连接,本地的套接字也会被删除。
  • 在“宛转协定栈发送消息”部分简单地提了下客户端和办事端应用套接字进行连接,那这个连接具体是什么样的呢?

    起首什么是套接字?套接字其实就是个放在内存的备忘录,协定栈在发送数据时先看一眼备忘录,懂得这个数据是发到哪个端口,当数据发送出去后,这个备忘录还得记录什么时光收到响应、什么时刻断开等控制信息,协定栈须要根据这些信息来决定下一步做什么。

    客户端和办事端的连接是经由过程套接字连接的,那“连接”又是什么意思呢?连接实际上是客户端和办事端互订交换控制信息的过程,控制信息重要包含两种,一种是膳绫擎提到的套接字里要来赞助协定栈进行下一步操作的信息,另一种是客户端和办事端通信时交换的┞菲握信息,这种控制信息就是我们俗称的 TCP 头部。 那连接的过程是如何的呢?

    宛转协定栈发送消息

    这个连接过程就是我们日常平凡经常听到的三次握手。

    • 起首客户端创建 TCP 头部,头部包含目标办事器的端标语等,同时将头部的 SYN 设为 1,表示开端请求连接。TCP 头部创建好了之后,TCP 模块便将信息传递给 IP 模块并宛转它发送,然后信息经由收集达到办事器的 IP 模块再到 TCP 模块,TCP 模块则会根据 TCP 头部的信息找到端标语对应的套接字,套接字则会写入响应的信息,然后将状况改为“正在连接”;
    • 办事端的 TCP 模块收到连接请求后就要回应,与客户端一样, 须要在 TCP 头部设置发送方和接收方的端标语,以及将 SYN 设为 1,同时,返回响应时还要将 ACK 设为 1,表示已经接收到响应的包。接着,将信息打包好,发送给客户端;
    • 客户端收到消息后,发明 SYN 为 1,则表示连接成功,所以在套接字中写入办事器的端标语,同时将状况改为连接完毕。为了告诉办事器收到消息,客户端也要将 ACK 设为 1,接着发送给办事端。

    HTTPS 的握手过程

    膳绫擎的过程是最简单的 HTTP 三次握手,但如今越来越多的网站应用了 HTTPS 协定,那与 HTTP 连接有什么不合呢?

    先介绍一下什么是 HTTPS。HTTPS 正如其名字,HTTP 代表其并不是本身创建一个新的协定,而是建立在 HTTP 的基本之上,S 代表其是安然的,若何包管安然?应用 SSL/TLS。SSL(Secure Sockets Layer,安然套接层)是网景设计的安然传输协定,经历了 1.0、2.0 和 3.0 版本,但因为 1.0 有严重安然缺点,所以大年夜未颁布。后来 IETF 将 SSL 标准化,称为 TLS(Transport Layer Security, 传输层安然协定) ,TLS 1.0 与 SSL 3.0 差别很小。TLS 经历了 1.0、1.1 到如今最新的 1.2。在 HTTPS 通信中具体应用哪一种还要看客户端和办事端的支撑程度。那 SSL/TLS 在收集模型中属于哪一层呢?直接上图:

    操作体系有一个 Socket 库,这个库中的法度榜样主如果让应用法度榜样调用操作体系的收集功能,而在这些功能中,浏览器须要调取操作体系的 DNS 解析功能。DNS 解析器生成一条表示“告诉我 https://buluo.qq.com/index.html 的 IP 地址”的消息,然后宛转操作体系的协定栈发送 UDP 消息到 DNS 办事器。那这条消息是若何发送到 DNS 办事器又是若何将 IP 地址返回的呢?

    在客户端和办事端经由过程 HTTPS 连接的过程中,除了正常的 HTTP 连接中的工作,还怀孕份验证和加密信息两件事,下面看看具体过程(更具体内容可以查看标准:RFC5246)。

    • Client Hello:此次握手是客户端向办事端提议加密通信请求,请求中包含以下关键信息:
      • Version:客户端支撑的协定版本,比如 TLS 1.2;
      • Random:第一个随机数,感化在后面的握手步调中介绍;
      • Session ID:“空”表示这是一次新的连接,“不为空”表示保持前面的连接;
      • Cipher Suites:暗码套件;
      • Compression:客户端支撑的紧缩办法;
      • Extensions:扩大。
    • Server Hello:办事端收到客户端消息后返回响应,响应信息跟 ClientHello 类似,只不过每个字段都是一个肯定的值,是办事端根据客户端传过来的候选值的最终选择结不雅,如不雅办事端没有在候选值中找到合适的,那么将会返回缺点提示,须要提一下的是,此次的响应信息中包含第二个随机数。
    • Server Certificate:办事端紧接着向客户端发送证书;
    • Server Key Exchange Message:当上一条证书消息中的信息不全时,办事端会再次发送一些额外数据到客户端;
    • Certificate Request:如不雅办事端请求客户端供给证书,会发出如许一个请求;
    • Server Hello Done:这条消息表示办事端这阶段数据发送完毕,下面就是等待客户端的响应;
    • Client Certificate:如不雅办事端请求客户端供给证书,那么客户端会返回本身的证书;
    • Client Key Exchange Message:这一步异常关键,客户端会生成 premaster secret(预主密钥),为什么叫 premaster secret?因为后面客户端和办事端会根据 premaster secret 和前面过程中两个随机数合谋生成一个 master secret(主密钥,48字节),后面通信的安然妒攀赖这个 master secret。前两个随机数客户端和办事端都知道了,这个步调最重要的就是协商一个 premaster secret,这个过程叫做“密钥交换”,这里介绍两个办法:

        推荐阅读

        你刚被人工智能洗脑,最聪明的钱已转向这16项技术

      Gartner本年宣布的技巧成熟曲线中,出现了16个处于上升阶段的新兴技巧,这些正在崛起的技巧,或将成为企业将来几年计谋性技巧趋势的热点。不久前,信息技巧研究公司Gartner宣布了2017年度>>>详细阅读


      本文标题:最经典的前端面试题之一,你能答出什么幺蛾子?

      地址:http://www.17bianji.com/lsqh/37168.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)