↓阿里云服务器3年不到300元↓

Tomcat 架构解析 阿里云服务器3年不到300元 Redis设计与实现

学习速记:从编程角度来理解 TCP 协议

【TCP 协议的特征】
面向连接:三次握手建连,四次挥手断连
建连:SYN(SYN_SND) -> SYN+ACK(SYN_RCV) -> ACK(ESTABLISHED)
断连:FIN(FIN_WAIT1)-> ACK(CLOSE_WAIT – FIN_WAIT2)-> FIN(LAST_ACK )-> ACK(TIME_WAIT)-> (CLOSED)
socket 连接队列:已完成3次握手的连接 和 未完成最后确认的连接
半打开:连接后,一端未发送 FIN 就退出。再次连接,对端会发送 RST
半关闭:TCP是全双工的,一端不发送数据但仍可接收数据。shutdown 实现优雅关闭。
可靠传输:确认,超时重传
ACK 序号偏移为收到的包的字节数,含义为要接收的下一个包的序号
停止等待、Nagel算法、连续ARQ、连续ACK、选择ACK
多次重传,间隔为:1s、2s、4s、8s、16s
超时3次可认为发生了拥塞
有序字节流:应用层无需排序,但需要处理粘包问题
粘包解决方案:定长数据包、指定数据包分隔符(http)、指定包中数据长度
流量控制:滑动窗口
通过接收端来控制发送端的发送速率
TCP 包头中会携带本端接收窗口的大小
发送缓冲区:尚不能发送的数据 | [可发送的数据 | 已发送未确认的数据] | 已确认的数据
拥塞控制:拥塞窗口(已发送未确认)
慢启动:拥塞窗口初始为1(慢),2的指数增长
拥塞避免:指数级增长到阈值之后,每次加1,线性增长
快恢复:检测到拥塞,拥塞窗口立即减半(快),采用拥塞避免策略发送
快重传:尽快重传丢包数据

【服务器端】
创建socket
分配(绑定)地址
监听
接受新连接
接收数据
发送数据

【客户端】
创建socket
连接
发送数据
接收数据
断开连接

【高性能网络编程】
I/O多路复用
多线程
多进程

C++ Primer Plus 第六版 阿里云服务器3年不到300元 流畅的 Python