面试

《面试八股文》之网络19卷

2021-09-09  本文已影响0人  moon聊技术

微信公众号:moon聊技术
关注选择“ 星标 ”, 重磅干货,第一 时间送达!
[如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发]



1.TCP/IP 网络模型有几层?分别有什么用?

image

TCP/IP网络模型总共有五层

2.介绍一下 HTTP 协议吧

image

HTTP 协议是基于 TCP 协议实现的,它是一个超文本传输协议,其实就是一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应

它主要是负责点对点之间通信的。

超文本就是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。比如说html,内部定义了很多图片视频的链接,放在浏览器上就呈现出了画面。

协议就是约定俗称的东西,比如说 moon 要给读者送一本书,读者那里只接受顺丰快递,那么 moon 觉得可以,发快递的时候选择的顺丰,那么我们彼此之间共同约定好的就叫做协议。

传输这个就很好理解了,比如刚才举的例子,将书发给读者,要通过骑车或者飞机的方式,传递的这个过程就是运输。

3.GET 和 POST有什么区别?

GET 和 POST 本质上就是 TCP 链接,并无差别。

但是由于 HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

区别 GET POST
数据传输方式 从服务器获取数据 向服务器提交数据
对数据长度的限制 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) 无限制
对数据类型的限制 只允许 ASCII 字符 无限制
安全性 较差,所发送的数据是 URL 的一部分,会显示在网页上 较好 参数不会被保存在浏览器历史或 WEB 服务器日志中
可见性 显示在 URL 上 不显示
收藏为书签 可以 不可以
历史记录 可以被保留在历史记录当中 不可以被保留
缓存 能被缓存 不可以被缓存

4.PING 的作用?

PING 主要的作用就是测试在两台主机之间能否建立连接,如果 PING 不通就无法建立连接。

它其实就是向目的主机发送多个 ICMP 回送请求报文

5.常见的 HTTP 状态码有哪些

1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误

6.HTTP1.1 和 HTTP1.0 的区别有哪些?

image

7.HTTPS 和 HTTP 的区别是什么?

image

8.HTTP2 和 HTTP1.1 的区别是什么?

image

9.HTTP3 和 HTTP2 的区别是什么?

image

10.TCP 建立连接的过程是怎样的?

image

11.为什么是三次握手???

image

12.TCP 断开连接的过程是怎样的?

image

13.第四次挥手为什么要等待2MSL(60s)

image

首先 2MSL 的时间是从客户端(A)接收到 FIN 后发送 ACK 开始计时的。如果在 TIME-WAIT 时间内,因为客户端(A)的 ACK 没有传输到服务端(B),客户端(A)又接收到了服务端(B)重发的 FIN 报文,那么 2MSL 时间会被重置。等待 2MSL 原因如下

包括 ACK 是以上哪两种情况,A 都需要等待,要取这两种情况等待时间的最大值,以应对最坏的情况发生,这个最坏情况是:去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。这刚好是2MSL,这个时间,足以使得原来连接的数据包在网络中消失

14.为什么是四次挥手?

image

因为 tcp 可以在发送数据的同时也能接受数据,要实现可靠的连接关闭,A 发出结束报文 FIN,收到 B 确认后 A 知道自己没有数据需要发送了,B 知道 A 不再发送数据了,自己也不会接收数据了,但是此时 A 还是可以接收数据,B 也可以发送数据;当 B 发出 FIN 报文的时候此时两边才会真正的断开连接,读写分开。

15.TCP 滑动窗⼝是什么?

image

TCP 是每发送⼀个数据,都要进⾏⼀次确认应答。只有上一个收到了回应才发送下一个,这样效率会非常低,因此引进了滑动窗口的概念.

其实就是在发送方设立一个缓存区间,将已发送但未收到确认的消息缓存起来,假如一个窗口可以发送 5 个 TCP 段,那么发送方就可以连续发送 5 个 TCP 段,然后就会将这 5 个 TCP 段的数据缓存起来,这 5 个 TCP 段是有序的,只要后面的消息收到了 ACK ,那么不管前面的是否有收到 ACK,都代表成功,窗⼝⼤⼩是由接收方决定的

窗⼝⼤⼩就是指不需要等待应答,还可以发送数据的大小

16.发送方一直发送数据,但是接收方处理不过来怎么办?(流量控制)

如果接收方处理不过来,发送方就会触发重试机制再次发送数据,然而这个是有性能损耗的,为了解决这个问题,TCP 就提出了流量控制,为的就是让发送方知道接受方的处理能力

也就是说,每次接收方接受到数据后会将剩余可处理数据的大小告诉发送方

比如接受方滑动窗口可用大小为400字节,发送方发送过来100字节的数据,那么接收方剩余可用滑动窗口大小就为300字节,这是发送方就知道下次返送数据的大小范围了。

但是这里有一个问题,数据会存放在缓冲区,但是这个缓冲区是操作系统控制的,当系统繁忙的时候,会缩减缓冲区减小,可能就会造成丢包的问题

image

如: 发送方接收方窗口大小各为200字节,发送方发送100字节的给接收方,此时双方各剩100字节,但是此时操作系统非常忙,将接收方的缓存区减少了50字节,这时接收方就会告诉发送方,我还有50字节可用,但是在接收方发送到达之前,发送方是不知道的,只会看到自己还有100字节可用,那么就继续发送数据,如果发送了80字节数据,那么接收方缓存区大小为50字节,就会丢失30字节的数据,也就是会发生丢包现象。

我们会发现,这个问题发生的原因就是减少了缓存,又收缩了窗口大小,所以 TCP 是不允许同时减少缓存⼜收缩窗⼝的。

17.TCP 半连接队列和全连接队列是什么?

image

服务端收到客户端发出的 SYN 请求后,会把这个连接信息存储到半链接队列(SYN 队列)

服务端收到第三次握⼿的 ACK 后,内核会把连接从半连接队列移除,然后创建新的完全的连接,并将其添加到全连接队列(accept 队列),等待进程调⽤ accept 函数时把连接取出来。

这两个队列都是有大小限制的,当超过容量后就会将链接丢弃,或者返回 RST 包。

18.粘包/拆包是怎么发生的?怎么解决这个问题?

TCP 发送数据时会根据 TCP 缓冲区的实际情况进行包的划分,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是 TCP 粘包和拆包问题。

image

发生 TCP 粘包原因:

发生 TCP 拆包原因:

解决方案:

image

19.浏览器地址栏输入网站按回车后发生了什么?

image
上一篇 下一篇

猜你喜欢

热点阅读