美文网首页进击的皮皮虾
TCP协议的三次握手和四次挥手

TCP协议的三次握手和四次挥手

作者: 柳豪 | 来源:发表于2017-02-24 22:05 被阅读104次

Part 1

TCP协议的简单介绍

TCP(Transmission Control Protocol、传输控制协议),是一种面向连接的、可靠的、基于字节流传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。

更具体查看维基百科:https://zh.wikipedia.org/wiki/传输控制协议

TCP包头格式:

TCP包头格式

TCP标志位(标志符)

TCP数据包中的标识信号有6种:

  • SYN(synchronous建立联机)
  • ACK(acknowledgement 确认)
  • PSH(push传送)
  • FIN(finish结束)
  • RST(reset重置)
  • URG(urgent紧急)

TCP状态码

  • LISTEN
  • SYN-SENT
  • SYN-RECEIVED
  • ESTABLISHED
  • FIN-WAIT
  • CLOSE-WAIT
  • CLOSING
  • LAST-ACK
  • TIME-WAIT
  • CLOSED

一次TCP连接和传输各TCP客户端的状态变化

下表为TCP状态码列表,以S指代服务器,C指代客户端,S&C表示两者,S/C表示两者之一:

状态码&终端 说明
LISTEN S 等待从任意远程TCP端口的连接请求。侦听状态。
SYN-SENT C 在发送连接请求后等待匹配的连接请求。通过connect()函数向服务器发出一个同步(SYNC)信号后进入此状态。
SYN-RECEIVED S 已经收到并发送同步(SYNC)信号之后等待确认(ACK)请求。
ESTABLISHED S&C 连接已经打开,收到的数据可以发送给用户。数据传输步骤的正常情况。此时连接两端是平等的。
FIN-WAIT-1 S&C 主动关闭端调用close()函数发出FIN请求包,表示本方的数据发送全部结束,等待TCP连接另一端的确认包或FIN请求包。
FIN-WAIT-2 S&C 主动关闭端在FIN-WAIT-1状态下收到确认包,进入等待远程TCP的连接终止请求的半关闭状态。这时可以接收数据,但不再发送数据。
CLOSE-WAIT S&C 被动关闭端接到FIN后,就发出ACK以回应FIN请求,并进入等待本地用户的连接终止请求的半关闭状态。这时可以发送数据,但不再接收数据。
CLOSING S&C 在发出FIN后,又收到对方发来的FIN后,进入等待对方对连接终止(FIN)的确认(ACK)的状态。少见。
LAST-ACK S&C 被动关闭端全部数据发送完成之后,向主动关闭端发送FIN,进入等待确认包的状态。
TIME-WAIT S/C 主动关闭端接收到FIN后,就发送ACK包,等待足够时间以确保被动关闭端收到了终止请求的确认包。【按照RFC 793,一个连接可以在TIME-WAIT保证最大四分钟,即最大分段寿命(maximum segment lifetime)的2倍】
CLOSED S&C 完全没有连接。

Part 2

一个可靠的TCP连接的建立

三次握手(three-way handshake)是发生在TCP层,三次握手的目的是建立一个链接采用三次握手确认建立一个连接,三次握手之后才开始用此连接发送数据包(通过三次交流,双方共发送了两次连接申请包和两次确认建立连接的包)

  • 第一次握手:主机A发送位码为SYN=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
  • 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),SYN=1,ACK=1,随机产生seq=7654321的包
  • 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1,连接建立成功。

一个可靠的TCP连接的断开

四次挥手(four-way handshake)是发生在TCP层,四次挥手的目的是断开刚才建立的连接,四次挥手之后双方不在通信

  • 第一次挥手:客户端A发送一个FIN,和一个随机数序列号i,代表请求与服务器B断开连接
  • 第二次挥手:服务器B收到包之后,知道FIN请求,发送一个确认段ACK,和确认序号i+1,同时发送一个FIN和随机序列号j
  • 第三次挥手:客户端A接收到ACK和序列号+1后确认是来自服务端B的,同时收到了服务器B的FIN和序列号j,然后发送ACK和序列号j+1给服务端B
  • 第四次挥手:服务器B接收到客户单的ACK和j+1,确认断开。 连接断开成功。
参考

稻草人的技术博客

相关文章

  • 网络编程10_图解TCP连接中的3次握手和4次挥手

    TCP三次握手,四次挥手 什么是“三次握手,四次挥手”? TCP 是一种面向连接的单播协议,在发送数据前,通信双方...

  • 图解TCP:三次握手,四次挥手

    TCP三次握手,四次挥手 什么是“三次握手,四次挥手”? TCP 是一种面向连接的单播协议,在发送数据前,通信双方...

  • TCP/IP基础

    1.网络分层及对应的协议 3.TCP协议的三次握手及四次挥手三次握手及四次挥手的简图如下: 三次握手的过程: 第三...

  • 不积跬步--TCP三次握手和四次挥手过程

    本文来至转载TCP三次握手和四次挥手过程 TCP三次握手和四次挥手过程 1、三次握手 (1)三次握手的详述 首先C...

  • 2018-03-20

    TCP协议中的三次握手和四次挥手 SYN(synchronous建立联机)ACK(acknowledgement ...

  • TCP的三次握手和四次挥手

    参考资料:[1].【TCP】详解TCP 三次握手和四次挥手[2]. iOS:为什么TCP连接要三次握手,四次挥手[...

  • 计算机网络知识目录

    · TCP/IP协议模型 TCP 三次握手四次挥手 四元组 · Http · Https

  • day 27 操作系统基础网络章节

    TCP/UDP协议说明 TCP协议三次握手过程原理 TCP协议四次挥手过程原理 问题: TCP十一种状态集转换 三...

  • TCP、IP、DNS协议

    目录 •IP 协议• TCP 协议 及 TCP协议的连接与释放(三次握手,四次挥手)•DNS协议• 各种协议与Ht...

  • 2017.4.6 tcp ip协议的区别

    说说TCP传输的三次握手四次挥手策略 为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把...

网友评论

    本文标题:TCP协议的三次握手和四次挥手

    本文链接:https://www.haomeiwen.com/subject/wbxgwttx.html