什么是 TCP

本文最后更新于:2021年10月20日 中午

什么是 TCP

TCP (transmission Control Protocol 传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议。

常见问题

  1. 连接问题,IP 写错,端口写错 链接会被拒绝
  2. Operation now in progress 连接超时、丢包、错误 IP、backlog 满了&阻塞&tcp_abort_on_overflow=0
  3. min(maxconn,backlog). [ ss -it] 查询 backlog 的设置长度

SYN Flood 问题

  • tcp_max_syn_backlog
  • tcp_synack_retries
  • tcp_syncookies

短链接性能问题

  • 多余链接
  • 启动比较慢、慢启动
  • 握手阶段丢包
  • 对链接的占用约等于长链接
    短链接优点
  • 简单
  • 理论上链接数会少
  • 无状态对负载均衡 LB 友好

长链接常见问题

  • 链接失效两种问题
    1. redis:timeout(Error while reading line from the server)
    2. Mysql: wait_timeout & interactive_timeout(has gone away)
  • 链接失效解决方法
    1. 用的时候多链接几次 (最简单)
    2. 定时发心跳维持链接 (推荐方式)
    3. 利用 swoole 底层的 hearlbeat_idle_time 和 hearlbeat_check_interval (只能针对服务器端,需要客户端配合发心跳)
  • 如何实现应用层心跳
    1. 制定 ping/pong 协议 (mysql 等自带 ping 协议)
    2. 客户端灵活的发送 ping 心跳包
    3. 服务端 OnRecive 检查可用性回复 pong