TCP三次握手和四次挥手

TCP三次握手

代码实现

服务端

1
2
3
4
5
6
7
8
9
//服务端核心代码
int main(int argc, char const *argv[])
{
int fd = socket(AF_INET, SOCK_STREAM, 0);
bind(fd, ...);
listen(fd, 128);
accept(fd, ...);
...
}

客户端

1
2
3
4
5
6
//客户端核心代码
int main(){
fd = socket(AF_INET,SOCK_STREAM, 0);
connect(fd, ...);
...
}

步骤一:服务端listen

  • listen过程包含初始化半连接队列全连接队列

    半连接队列采用hash结构

    全连接队列采用链表结构

步骤二:客户端send SYNC

  • 客户端封装SYNC包发送到服务端
  • 设置状态为SYNC_SENT
  • 创建超时重传定时器

步骤三:服务端resp ACK

  • 收到SYNC包
  • 判断半连接队列和全连接队列中是否已满,满了则放弃连接
  • 建立SOCK并放到半连接队列中
  • 封装ACK包发送到客户端
  • 创建超时重传定时器

步骤四:客户端send ACK

  • 客户端发送ACK包
  • 删除超时重传定时器
  • 开启保活定时器

步骤五:服务端accept

  • 将SOCK从半连接队列中取出放到全连接队列中的列尾
  • 修改SOCK状态为ESTABLISHD
  • 从全连接队列中获取一个socket返回给用户进程

TCP三次握手和四次挥手
http://example.com/2025/01/22/2025-01-22-TCP三次握手和四次挥手/
作者
wyx-98
发布于
2025年1月22日
许可协议