计算机网络常见面试题(第三弹)

1、邮件发送协议有哪种?

SMTP

2、邮件读取协议有哪两种?

POP3、IMAP

3、说一下 session 的工作原理?

session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。

这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

4、如果客户端禁止 cookie, session 还能用吗?

可以用,session 只是依赖 cookie 存储 sessionid,如果 cookie 被禁用了,可以使用 url 中添加 sessionid 的方式保证 session 能正常使用。

5、HTTP2相对于HTTP1.x有什么优势?

二进制分帧
服务器推送
头部压缩
多路复用

6、怎么理解HTTPS?

发送方将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

过程中,通过数字签名防止篡改,通过数字证书防止中间人攻击。

7、为什么常说 TCP 有粘包和拆包的问题而不说 UDP ?

UDP 是基于报文发送的,UDP首部采用了 16bit 来指示 UDP 数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。

而 TCP 是基于字节流的,虽然应用层和 TCP 运输层之间的数据交互是大小不等的数据块,但是 TCP 并没有把这些数据块区分边界,仅仅是一连串没有结构的字节流;另外从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段,基于上面两点,在使用 TCP 传输数据时,才有粘包或者拆包现象发生的可能。

8、什么时候会发生 TCP 粘包、拆包?

要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包。

待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。

要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。

接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

9、HTTP中,报文和实体的区别?

一般情况下,报文=实体;但当HTTP在传输时对实体内容编码时,报文就不等于实体了。

10、对于粘包、拆包有什么解决办法?

由于 TCP 本身是面向字节流的,无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案,归纳如下:
  • 消息定长:发送端将每个数据包封装为固定长度(不够的可以通过补 0 填充),这样接收端每次接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
  • 设置消息边界:在包尾增加回车换行符进行分割,例如 FTP 协议。
  • 将消息分为消息头和消息体:消息头中包含表示消息总长度(或者消息体长度)的字段。
  • 更复杂的应用层协议比如 Netty 中实现的一些协议都对粘包、拆包做了很好的处理。


#面经#
全部评论

相关推荐

24 91 评论
分享
牛客网
牛客企业服务