美文网首页
面试遇到的问题(三)

面试遇到的问题(三)

作者: ihujian | 来源:发表于2018-07-13 20:02 被阅读0次

介绍一下一次网络请求的过程

参考:
一次完整的Http请求过程
TCP 三次握手
HTTP 协议

简单理解:

  1. 域名解析
  2. 发起TCP 三次握手
  3. 建立TCP/IP 连接后发起HTTP 请求
  4. 服务器响应HTTP 请求,浏览器获取HTMl代码
  5. 浏览器解析HTML代码,获取静态资源(js,css,图片)
  6. 浏览器对页面进行渲染,并呈现给用户

域名解析

浏览器查询DNS,获取域名对应的ip地址,具体过程包括:

  • 浏览器搜索自身的DNS缓存
  • 搜索操作系统的DNS缓存
  • 读取本地HOST 文件
  • 向本地DNS服务器进行查询

对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析;如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP 地址映射,完成域名解析;如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询。

TCP的三次握手连接建立

拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序(本文就以Nginx为例),最终建立了TCP/IP的连接。

三次握手过程
三次握手

TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。

两个序号和三个标志位:
(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。

  1. 第一次消息发送中,客户端随机选取一个序列号作为自己的初始序列号发送给服务端
  2. 第二次消息发送中,服务端使用ack 对客户端的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;
  3. 第三次消息发送中,客户端告诉客户端收到确认消息并准备建立连接,客户端自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。

相关文章

  • 面试遇到的问题(三)

    介绍一下一次网络请求的过程 参考:一次完整的Http请求过程TCP 三次握手HTTP 协议 简单理解: 域名解析 ...

  • 面试遇到的问题

    201906201.单例模式 https://segmentfault.com/a/119000000435896...

  • 面试遇到的问题

    1.分布式session怎么验证一致 2.什么情况下会产生死锁怎么解决 数据结构 3.线程有哪几种运行状态下可以调...

  • 面试遇到的问题

    2019 web 前端面试总结(内附面经) js事件循环(EventLoop) 浏览器缓存 BFC js基本类型 ...

  • 面试遇到的问题

    1.Sikuli和Selenium有什么区别? üSelenium的准确度更高,而sikuli对图片的要求很高; ...

  • iOS程序员面试,绝对会遇到这些问题!

    iOS程序员面试,绝对会遇到这些问题! iOS程序员面试,绝对会遇到这些问题!

  • 面试遇到的问题(二)

    定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。 参考牛客网-《剑指offer_编程题...

  • 面试遇到的问题(四)

    什么是微服务 参考 微服务概念微服务的优势和不足 概念 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服...

  • iOS面试遇到的问题

    1.在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么?前者是存在...

  • 2017面试遇到的问题

    MySQL实现多表更新UPDATE a SET a.name = b.name from a,b where a....

网友评论

      本文标题:面试遇到的问题(三)

      本文链接:https://www.haomeiwen.com/subject/szuspftx.html