编程技术文章分享与教程

网站首页 > 技术文章 正文

计算机网络面试题 计算机网络面试题牛客网

hmc789 2024-11-13 11:32:03 技术文章 2 ℃

网络是计算机的基础之一,是程序员面试必问的题. 其中 tcp/udp、http、osi 、协议栈是常考的题.

tcp/udp

1. tcp/udp 协议

tcp/udp 是传输层协议. 是十分常用的网络协议.

1.1 tcp/udp 三次握手、四次挥手

tcp 通过三次握手建立连接,通过四次挥手断开连接. UDP 则是面向无连接的, 不需要建立连接.

1.2 tcp 流控制

连续 ARQ 协议使得 TCP 的帧可以在滑动窗口大小范围内连续的流动. 通过拥塞窗口、拥塞避免、慢开始等算法控制 TCP 的流.

1.3 持续计时器

当发送方接受到窗口值为 0 的 ACK 报文, 需要启动一个计时器等待接收方再次发送窗口大小非 0 的 ACK 报文( TCP 中,仅仅包含确认信息的报文不需要确认和重传). 若没有计时器,可能在窗口非 0 的 ACK 报文丢失后,俩方都处在等待状态中. 当持续计时器结束后,发送方会发送一个特殊的探测报文,促使对方重传一个 ACK 报文.

1.4 停止等待协议、ARQ 协议

  • 停止等待协议是数据链路层协议. 它规定只有收到正确的确认帧后,才能新发送状态变量以及数据帧.
  • ARQ 协议(Automatic Repeat-reQuest) 是数据链路层的纠错协议, 它有停止等待 ARQ 协议和连续 ARQ 协议.
  • 停止等待 ARQ 协议: 每次发送一个报文,确认后发送下一个报文,发送窗口和接受窗口均是 1,停止等待 ARQ 所需缓冲区小但是效率低.
  • 连续 ARQ 协议: 即回退 n 帧 GBN 以及选择性重传 ARQ ,是滑动窗口与请求重发技术的结合.它可以连续发送若干信息帧,而不用等前一帧被确认,大大提升了发送效率. 但需要发送方设置一个重发表,存放待确认的帧,收到确认帧后从重发表中删除帧,需要更大的存储空间.

1.5 滑动窗口、慢开始、拥塞避免、快重传、快恢复、可靠性、顺序传输、TCP BBR 拥塞算法

  • 滑动窗口: 滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。
  • 慢开始: 将拥塞窗口值设置为 1,发送端每接收到一个 ACK 就将拥塞窗口增加 1 直到达到拥塞门限值(ssthresh,初始值为 16 ).
  • 拥塞门限(ssthresh): 慢开始算法的拥塞窗口最大值.
  • 拥塞窗口(cwnd): 取决于网络的拥塞程度,且在不断的变化,只要网络没有出现拥塞,发送方就将拥塞窗口调大一些,而只要出现拥塞,则减小一些. 发送窗口始终小于拥塞窗口(在接受窗口更小时小于拥塞窗口).
  • 接受窗口(rwnd): 接受方根据自己的接受能力(缓存限制)设置了接受窗口 rwnd, 并将其写入 tcp 首部字段中.
  • 拥塞避免算法: 让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口按线性规律缓慢增长.
  • 快重传和快恢复( Fast Retransmit and Recovery): 可以提高网络的吞吐量. 接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认. 如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了FRR,就不会因为重传时要求的暂停被耽误. 没有FRR,如果数据包丢失了,TCP将会使用定时器来要求传输暂停.
  • 快恢复算法: 与快重传配合使用,当发送方连续收到三个重复确认时,就执行乘法减小算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意,接下去就不再执行慢开始算法了。由于发送方现在认为网络很可能没有发生拥塞,不执行慢开始而是把 cwnd 值设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法,使拥塞窗口慢慢的线性的增大。
  • BBR 拥塞算法: Google 的 TCP BBR 算法,优化了 TCP 的吞吐量.

1.6 滑动窗口大小怎么确定?

分为接受窗口和发送窗口. 接受窗口的值根据缓存大小确定. 接受方将接受窗口大小放在 TCP 报文首部. 发送法根据接受窗口和拥塞窗口的大小(最小值)确定发送窗口的大小. 而拥塞窗口的大小则受限于网络情况, 根据传输过程动态的确定.

1.7 tcp、udp 怎么判断客户端关闭?

根据接受到的数据包长度判断,如果接受到的报文长度是 0,则意味着客户端已经断开了连接.

1.8 tcp、udp 的区别?

tcp 是面向连接的、可靠的,而 udp 是无连接、不可靠的.

tcp 保证数据的正确性、顺序性. 而 udp 不保证. TCP 是流模式的,而 UDP 是数据包模式的.

1.9 udp 的实际应用场景?

UDP 报文常用于效率要求高,而准确性相对低的场景. 如视频直播、聊天等.

1.10 time_wait 是什么状态?它有什么作用?为什么持续 2 MSL?

time_wait: tcp 连接后,在四次握手之后,先发FIN标志位的一端就会进入time_wait状态. 它的作用有俩个:

  • 确保最后一个确认报文能够到达. 如果没能到达,服务端会重发 FIN 请求,等待一段时间没有重发,说明服务端已经 CLOSED 了. 若有重发,客户端将重发 last ack 报文.
  • 等待一段时间 ( 2MSL ),确保此次连接过程中所有报文都从网络中消失. 使得新的连接不会出现旧的连接请求报文.


http 协议

2.1 http 协议状态码(302、404、501)

302: 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求.

404: 服务器找不到请求的网页.

501: 服务器不具备完成请求的功能. 例如,客户发出了一个服务器不支持的PUT请求

2.2 什么是 http 协议无状态协议?

指协议对事物处理没有记忆,后续的访问需要前面的信息,需要必须重传相应的信息,这将导致每次连接的数据量增大. 目前通过 cookie 解决该问题.

2.3 http 协议有哪些请求方式?

GET、POST、DELETE、PUT、HEAD、OPTIONS.

2.4 GET 和 POST 的区别?

GET 数据传送的大小由浏览器限制长度为 1024,POST 没有限制. GET 的参数传递是写在 URL 内的,POST 参数存放在包体内,更加安全

2.5 http 协议首部字段?

请求方法、URI、HTTP 版本、状态码等.

2.6 http 协议优化?

并行连接: 可以通过建立多个 tcp 连接通道实现并行传输数据,提高页面响应速率.

长连接: HTTP/1.1 默认开启 Keep-Alive 选项. 并且是 pipeline 模式. 这样可以在多次请求中复用 TCP 连接.

缓存: Cache-control 用来控制缓存. If-Modified-Since 也是关于缓存的, 如果服务器资源在某个时间更新了,那么客户端就应该下载最新的资源.

2.7 http 协议有哪些特征?

  • 1. 支持 C/S 模式.
  • 2. 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径.
  • 3. 灵活:可以传输任意类型的数据格式,通过设置 Content-type 标识.
  • 4. 无连接:每次连接只处理一个请求.
  • 5. 无状态: http 协议是无状态协议.

2.8 http 和 https 的区别?

  • https 需要用到 ca 证书,很可能 ca 证书需要收费.
  • https 是以安全为目标,将 http 加入 ssl 层. https 传输的是密文.
  • 连接方式不同,端口分别为 80 和 443
  • http 协议十分简单,是无状态的. 而 https 通过 ssl 可以进行身份认证,更加安全.


参考资料

3.1 后端面试题[https://github.com/wolverinn/Waking-Up]

2.2 TCP的4个计时器[https://www.jianshu.com/p/cebe1411be2f]

3.3 Cardwell,Neal,et al.BBR:Congestion-Based Congestion Control.Queue14.5(2016):50.

?

标签列表
最新留言