首页/协议速查/TCP/IP
🔁

TCP/IP 可靠传输

网络协议
互联网的可靠地基:三次握手、确认重传、字节流有序,上云设备必懂。
🧩 核心原理
📈 时序 / 工作过程图
TCP 三次握手时序SYN → SYN-ACK → ACK,建立可靠连接客户端主动打开服务端被动监听SYN=1, seq=xSYN=1,ACK=1, seq=y, ack=x+1ACK=1, ack=y+1为什么三次握手?保证双方收发能力都确认,并同步初始序列号,防止旧连接请求误建立关闭:FIN→ACK→FIN→ACK(四次挥手)· 服务端可先发数据再 FIN
⚙️ 配置 / 使用要点
  1. 设备端:静态IP或DHCP
  2. socket:connect→send/recv→close
  3. 重连:指数退避+上限
  4. keepalive:应用层心跳保活
🛠️ 项目示例
TCP 客户端重连逻辑(LWIP socket 风格)
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in srv;
srv.sin_family = AF_INET;
srv.sin_port = htons(8080);
inet_pton(AF_INET, "192.168.1.10", &srv.sin_addr);

int retry = 0;
while(connect(sock, (struct sockaddr*)&srv, sizeof(srv)) < 0){
  if(++retry > 10) reboot();           // 放弃重启
  delay(1000 * (1 << min(retry, 5)));  // 指数退避
}
// 之后 send/recv,超时用 select/poll
❓ 面试高频
为什么TCP要三次握手?
双向确认收发能力+同步初始序列号,防止历史SYN的重复连接请求误建立连接
TCP怎么保证可靠?
序列号+ACK确认+超时重传+滑动窗口流控+拥塞控制(CWND),丢包自动重传
嵌入式上云选TCP还是UDP?
可靠要求高(控制/状态上报)选TCP;实时音视频/传感器高频小包可UDP+应用层补偿
心跳保活为什么必要?
运营商NAT会回收空闲连接,应用层心跳(如MQTT PINGREQ)维持映射并检测死链
✅ 自查清单 (点击勾选,本地保存)
0/0
会画三次握手/四次挥手
知道可靠性机制
知道滑动窗口与拥塞
会写socket与重连
知道TCP vs UDP选型