网络是计算机的基础之一,是程序员面试必问的题. 其中 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,