传输层:TCP协议
1、结论引入
每个tcp连接,都有自己对应的接收和发送缓冲区。
2、理解Tcp协议格式
2.1理解4位首部长度
2.2 三个概念引入 + 理解16位窗口字段
注意:16位窗口字段:不代表对应的的缓冲区最大就是65536字节,tcp中存在选项可以设置窗口因子,协商进行扩展。
理解tcp的应答机制:
2.3理解序号和确认序号
序号:保证发送方发送的数据按序到达
确认序号:保证发送方发送的数据对方收到了
2.4理解6个标记位
tcp中的报文类型是有各种"类型"的,不同的类型,决定了客户端/服务端要不同的动作。
6个标记位:区分tcp报文的类型。
①ACK:确认标记位,用来标记是否为应答报文。
②SYN:请求连接,用来标记是否为请求报文。例:系统调用connect()用于连接建立
③FIN:通知对方,本端要关闭了。例:close()
④PSH:提示接收端的用户,立刻将TCP接收缓冲区中的数据读走。
⑤RST:对方要求重新建立连接
双方连接建立不一致情况。
⑥URG:紧急指针是否有效
3.TCP如何做到可靠性的
3.1确认应答机制
TCP将每个字节的数据都进行了编号. 即为序列号。
每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据; 下一次你从哪里开始发.
3.2超时重传机制(存在两种情况)
3.3连接管理机制
肉机:被用于攻击服务器
为什么要四次挥手?
状态变化:关于listen()中的第二个参数
主动断开一方,为什么要维持一段时间的TIME_WAIT状态?
维持多久?
3.4流量控制
4.滑动窗口
4.1关于丢包了,如何理解滑动窗口?
4.2关于滑动窗口的移动方向、大小
4.3滑动窗口会在发送缓冲区越界吗?
4.4刚开始通信的时候,起始序号一定是从0开始吗?
5.延迟应答
那么所有的包都可以延迟应答么? 肯定也不是;
数量限制: 每隔N个包就应答一次;
时间限制: 超过最大延迟时间就应答一次;
具体的数量和超时时间, 依操作系统不同也有差异; 一般N取2, 超时时间取200ms;
6.拥塞控制
拥塞控制的策略:慢启动
7.面向字节流、粘包问题
8.tcp异常情况
9.理解文件和socket的关系
10.小结
11.面试题:用UDP实现可靠传输
①先询问使用的场景
是否对可靠性要求非常高,非常高的话建议直接采用TCP协议。
②引入Tcp对应的可靠性策略:例如 确认序号、确认应答、超时重传等等