网络面试题

相关问题目录

  1. TCP三次握手和四次挥手过程
  2. 为什么要采用三次握手
  3. TCP和UDP的区别
  4. TCP如何保证可靠性
  5. 如果发送的SYN丢失会怎么办
  6. TIME_WAIT状态等待2MSL作用
  7. 集群中处于TIME-WAIT状态的服务器过多的原因
  8. 如何避免TIME_WAIT过多的问题
  9. 清理TIME_WAIT技巧
  10. 滑动窗口
  11. 如果发送端收到一个零窗口该怎么处理
  12. 拥塞控制
  13. 其它
  14. 补充ing

三次握手和四次挥手

  • 知识点1:握手挥手过程
  • 知识点2:TCP包类型
  • 知识点3:携带的相关信息(序列号/确认号/MSS等等)
  • 知识点4:有限状态机变化

为什么采用三次握手

  • 不采用2次的原因:TCP是全双工的,如果只是服务端发送完 ACK 包(客户端发送已经失效的 SYN 包)就建立连接然后发送数据,会严重消耗资源
  • 不采用4次的原因:服务端将 SYN 和 ACK 合并成一个包发送;这样做的目的是:减少连接时间过长,影响工作效率

TCP和UDP区别

  • 是否连接
  • 传输可靠性
  • 应用场景
  • 传输速度

TCP如何保证可靠性

  • TCP分段
  • 重传机制
  • 流量控制
  • 数据校验
  • IP数据包处理

发送的SYN包丢失后处理机制

  • 重传计时器
  • 快速重传
  • SACK
  • D-SACK

TIME_WAIT状态等待2MSL作用

  1. 防止主动关闭方的 ACK 包丢失问题
  2. 防止重复(旧)的数据包出现在本次连接问题

集群中处于TIME-WAIT状态的服务器过多的原因

  • 场景:高并发短链接的 TCP 服务器上,当服务器处理完请求后正常主动关闭连接
  • 短链接:“业务处理+传输数据时间”远远小于TIME-WAIT时间;比如:1s 的 http 短链接处理完业务,主动方关闭连接之后,会在 TIME_WAIT 状态等待 2MLS 时间从而导致端口被占用

如何避免TIME_WAIT过多的问题

  • Linux系统调优
/etc/sysctl.conf文件中:
net.ipv4.tcp_tw_reuse=1    # 连接重用
net.ipv4.tcp_tw_recycle=1     # 快速回收
net.ipv4.tcp_tw_timestamps=1     # 时间戳一致
net.ipv4.tcp_syncookies=1    # SYN请求缓存(有一点点用处)

清理TIME-WAIT技巧

  • 统计 T-W 连接数量
netstat -an | grep "TIME_WAIT" | wc -l
  1. 调整 net.ipv4.tcp_max_tw_buckets 参数;当超过默认值,内核会把过多的 T-W 连接清理掉
  2. 利用RTS包从外部清理,当内核收到RTS包后会产生错误从而终止连接

滑动窗口

  • 发送方根据接收端的窗口大小( win=xxx )来调整发送速率,实现端到端的流量控制
  • 发送和接收缓存可以重复使用并通过 Linux 相关内核参数控制大小
#自动调节相关:
net.ipv4.tcp_moderate_rcvbuf=1	# 默认为1:代表开启自动调节
net.ipv4.tcp_adv_win_scale=1	# 默认为1:计算接收缓存和接收窗口的微调
#分别代笔:min值 defaults值 max值
net.ipv4.tcp_wmem=4096	16384	4194304		
net.ipv4.tcp_rmem=4096	87380	6291456

#发送和接收缓存的默认值和最大值:
net.core.rmem_default=212992
net.core.rmem_max=212992
net.core.wmem_default=212992
net.core.wmem_max=212992

如果发送端收到一个零窗口该怎么处理

  • 产生场景:服务端处理能力不够的时候,可能会导致数据丢失,从而向发送端发送零窗口
  • 发送端处理机制:
             1. 会暂时停止发送数据流
             2. 启用窗口定时器:当网络中没有发送且未确认的数据包且本端有待发送的数据包时
             3. 保持连接并传输探测( keep-alive 报文)
                    a)当接收窗口不为0:继续发送数据包(清除超时时间的退避指数,删除零窗口探测定时器)
                    b)  当接收窗口仍为0:重新设置零窗口探测定时器的下次超时时间,超时时间的设置和超时重传定时器的一样

拥塞控制

  • 网络拥塞的原因:
  1. 独享整个网络资源,TCP的流量控制必然会导致网络拥塞,只关注了对端接收空间,无法知道链路上的容量
  2. 路由器接入网络会拉低网络的总带宽,路由器如果出现瓶颈,很容易出现堵塞
  • 知识点1:4种机制
  • 知识点2:拥塞控制详细过程( cwnd/ssthresh等等 )



全部评论

相关推荐

野猪不是猪🐗:可以考虑加个业务项目来体现你的技术浅度,我有个70字的业务项目话术可以狠狠速成一个低质量业务项目,不需要的可以交流。
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务