2023高频前端面试题-TCP

1. TCP 协议是什么?

TCP(Transmission Control Protocol 传输控制协议) 是一种面向连接(连接导向) 的、可靠的、 基于 IP 的传输层协议。

TCP 使⽤校验、确认和重传机制来保证可靠传输

而 HTTP 协议 就是建立在 TCP / IP 协议 之上的一种应用。

TCP: 三次握手, 四次挥手~

2. 一次完整的 HTTP 服务过程是什么

当我们在 web 浏览器的地址栏中输入:www.baidu.com,具体发生了什么?

  1. www.baidu.com这个网址进行 DNS 域名解析,得到对应的 IP 地址
  2. 根据这个 IP,找到对应的服务器,发起 TCP 的三次握手
  3. 建立 TCP 连接后, 发起 HTTP 请求
  4. 服务器响应 HTTP 请求,浏览器得到 html 代码
  5. 浏览器解析 html 代码,并请求 html 代码中的资源(如 js、css、图片等)(先得到 html 代码,才能去找这些资源)
  6. 浏览器对页面进行渲染呈现给用户
  7. 服务过程完毕, 关闭 TCP 连接, 四次挥手

注:

1.DNS 怎么找到域名的?

DNS 域名解析采用的是递归查询的方式,过程是,先去找 DNS 缓存->缓存找不到就去找根域名服务器->根域名又会去找下一级,这样递归查找之后,找到了,给我们的 web 浏览器

2.为什么 HTTP 协议要基于 TCP 来实现?

TCP 是一个端到端的可靠面相连接的协议,HTTP 基于传输层 TCP 协议不用担心数据传输的各种问题(当发生错误时,可以重传)

3.最后一步浏览器是如何对页面进行渲染的?

a)解析 html 文件构成 DOM 树

b)解析 CSS 文件构成渲染树

c)边解析,边渲染

d)JS 单线程运行,JS 有可能修改 DOM 结构,意味着 JS 执行完成前,后续所有资源的下载是没有必要的,所以 JS 是单线程,会阻塞后续资源下载

3. 什么是 DNS 解析

DNS 解析(域名解析服务器) 将 域名 转换成 ip 地址 (一个域名和 ip 的映射关系, 具体登记在哪里, 看我们如何申请关联的!)

假定请求的是 www.baidu.com

a)首先会搜索浏览器自身的 DNS 缓存(缓存时间比较短,大概只有 1 分钟,且只能容纳 1000 条缓存)

b)如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的 DNS 缓存

c)如果还没有找到,那么尝试从 hosts 文件里面去找 (一个系统电脑的文件, 可以编辑, 可以存 域名 和 ip 的对应关系)

d)在前面三个过程都没获取到的情况下,就递归地去域名服务器去查找(就近查找),具体过程如下

DNS 优化两个方面:DNS 缓存、DNS 负载均衡 (准备多台 dns 服务器, 进行 dns 解析)

4. TCP 三次握手理解 (双方确认)

TCP 是一个端到端的 可靠 面相连接的协议,

HTTP 基于传输层 TCP 协议不用担心数据传输的各种问题(当发生错误时,可以重传)

根据这个 IP,找到对应的服务器,发起 TCP 的三次握手 (tcp 三次握手四次挥手 )

为什么要 3 次握手

我们假定第一次发送的请求, 因为网络延迟很慢才到达服务端,

然后客户端以为这服务器居然不理睬我,然后默默的关闭的等待连接的请求,走开了(好比追女神);

但事实呢?女神(服务器)是因为各种各样的原因,很晚才看到,然后说我接受你了, 同意你的要求咱们两结婚吧!

但是,A 早已经远走高飞,这个请求 A 完全不会收到(在第二次握手,服务端打开连接,等待客户端的响应),

那么女生呢,以为对方收到了,就会一直等待,这样 B 的资源就会被浪费的(创建连接的时候,空间浪费以及端口消耗);

而三次握手, 就不会发生,服务端同意连接了,但是 A 缺一直没有下一步的动作,导致资源浪费;

5. 关闭 TCP 连接四次挥手的理解 (客气挽留)

目标: 关闭连接(四次挥手)

不能直接一次性断开连接(双方知晓), 万一还有什么数据没有传完, 造成数据的丢失!

这和有礼貌的好友道别一样:(a:客户端 b:服务端)

1、一开始 A 想要回家离开,但是呢?怕 B 还有事情要交代,那么呢?只好先向 B 打招呼,我要走了,请求停止交谈(请求断开连接)

(此时,a 到 B 的连接没有断开,依旧可以进行通信);

2、同意 A 的请求,说好的,但是我这里可能还有一些话(数据)没说完。我检查看看, 你等等, 等我说完你再走。

3、B 确实没啥要补充的了,就告知你我可以撤了

4、A 说好的,知道了,88;(B 得知 A 走开了,关闭了自己的连接 )

完整的一次 http 请求流程才算结束

相关推荐
L_言覃1 分钟前
告别拖延症,制作自己的专属任务清单
前端
倔强的石头10616 分钟前
【C++指南】inline内联函数详解
java·前端·c++
小鹿( ﹡ˆoˆ﹡ )19 分钟前
Python中的“打开与关闭文件”:从入门到精通
linux·前端·python
gopher951119 分钟前
qml ComboBox 组合框
开发语言·前端
敲代码的小菜鸡22 分钟前
java根据html生成pdf
前端·后端
小白求学123 分钟前
HTML引用CSS
前端·css·html
ikunlxx24 分钟前
网页设计html心得
前端·html
scimence24 分钟前
html中为div添加展开与收起功能2(div隐藏与显示)
前端·javascript·html·隐藏div·div显示与隐藏
格瑞@_@29 分钟前
分享开源且强大的HTML5网页视频播放器
前端·音视频·html5
sailiss29 分钟前
html实现黑白棋
前端·javascript·html