TCP的三次握手与四次挥手

0x00 TCP简介

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

0x01 TCP固定头部结构

在tcp层的flags字段,有六个标识,SYN(建立连接)、ACK(表示响应)、FIN(关闭连接)、PSH(push数据传输)、RST(reset重置连接)、URG(urgent紧急);以及系列号seq number和确认号ack number;

  1. 如果只有单个SYN,表示建立连接
  2. 如果同时有SYN和ACK,表示建立连接后的响应。
  3. 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。

完整过程uml时序图如下:

0x10 状态转移

  1. 客户端TCP状态迁移:closed -> syn-send -> established -> fin-wait-1 -> fin-wait-2 -> time-wait -> closed
  2. 服务端TCP状态迁移: closed -> syn-rcvd -> established -> close-wait -> last-ack -> closed

    • LISTEN - 侦听来自远方TCP端口的连接请求;
    • SYN-SENT -在发送连接请求后等待匹配的连接请求;
    • SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
    • ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
    • FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
    • FIN-WAIT-2 - 从远程TCP等待连接中断请求;
    • CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
    • CLOSING -等待远程TCP对连接中断的确认;
    • LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
    • TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
    • CLOSED - 没有任何连接状态;

0x11 为什么需要三次握手

因为tcp协议是全双工模式,双方都需要确认4个信息,己方发送/接受和对方发送/接受能否完成。

0x100 为什么建立连接是三次握手,而关闭连接是4次挥手

因为在建立连接的第二次握手中,确认号和ACK响应可以同时发送;而在关闭连接时,当服务端收到FIN时,有可能还需要继续向客户端发送数据,所以第二次挥手的ACK和第三次挥手的FIN不能同时发送。

另外,主动关闭连接的可以是客户端也可以是服务端。

0x101 引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值