浅谈TCP连接的三次握手与四次挥手(2017.08.08修复版)

原创 2016年11月21日 17:03:21

TCP连接的建立与释放

三次握手(建立TCP连接)

TCP连接建立有如下几个目的,首先,要使双方都知道对方已经准备好了。其次,双方要协商如最大报文长度、最大窗口长度和服务质量等通信参数。第三,分配和初始化如缓存长度,各状态变量和连接表中的表项等运输实体资源。

  • 第一次握手(客户机向服务器发送请求)
    客户机进程向服务器进程发送一个SYN报文段(封装在一个IP数据报中、不包含应用层数据),其首部中的标志SYN比特位被置为1,序号字段中会选择一个起始序号x,即seq=x。

  • 第二次握手(服务器做出请求响应)
    SYN报文段到达服务器后,服务器首先会为该TCP连接分配TCP缓存和变量,并向该客户机TCP发送允许连接的报文段(SYNACK报文段、不包含应用层数据)。该报文段首部设置设置了三个重要信息。首先,首部中的标志SYN和ACK比特位均被置为1。其次该报文段首部的确认号字段被置为x+1,即ack=x+1。最后服务器将自己的序号字段设置为自己的起始序号y,即seq=y。

  • 第三次握手(客户机向服务器发送应用层数据)
    收到SYNACK报文段后,客户机为该连接分配缓存和变量,并向服务器发送第三个报文段,再次对服务器允许连接的报文段进行确认。之后该客户机将确认号字段ack的值置为y+1。这样客户机就可以发送应用层数据了,序号seq=x+1。标志SYN比特位被置为0,标志ACK比特位被置为1。
    这里写图片描述
    以三次握手方式管理TCP连接的优缺点:以三次握手方式管理TCP连接可以更好的避免错误连接,但是这种协议为SYN洪泛攻击提供了可趁之机。在这种攻击中,攻击者大量的发送TCP SYN报文段,但有意不进行第三次握手的步骤,直至服务器消耗完为第一次握手保留的有限资源。(这种攻击为Dos攻击的一种,其目的是使服务器的连接资源迅速的消耗殆尽)。

四次挥手(释放TCP连接)

  • 第一次挥手(客户机释放连接,主机A不再发送数据)
    在数据传输结束后,客户机可以发出一个关闭连接的命令,这会引起客户机向服务器发送一个特殊的TCP报文段,这个报文段首部中的FIN比特位为1,起始序号seq=x。

  • 第二次挥手(通知应用进程对方关闭连接)
    在服务器收到该报文段后,就向客户机回送一个确认报文段,该报文段的ACK比特位置为1,起始序号seq=y,确认号字段ack=x+1。

  • 第三次挥手(服务器释放连接,主机B且不再发送数据)
    服务器可以继续发送它自己的报文段,直至发送最后的报文段并使其FIN比特位置为1,这时,FIN=1,ACK=1,seq=y,ack=x+1。

  • 第四次挥手(连接关闭)
    客户机对服务器的终止报文段进行确认(ACK=1,seq=x+1,ack=y+1),所有资源被释放。
    这里写图片描述
    【修改于2017.08.08(原图第四次挥手有误)】之前放上去的图,最近才发现有问题,错的图不删除了,下面我附上正确的四次挥手的过程图,方便大家作对比,请见谅:
    这里写图片描述

【增加于2017.08.08】本次修改增加三次握手与四次挥手的状态示意图,方便大家对三次握手与四次挥手过程的理解

客户端状态示意图:
这里写图片描述

服务器端状态示意图:
这里写图片描述
客户端在需要请求连接时,向服务器端发送SYN,等收到服务端的ACK确认报文后也向服务器端发送ACK报文,这样就建立了一个TCP连接。
假若客户端发起断开连接的请求(客户端和服务器都可以请求断开连接),客户端会向服务器端发送FIN,也就是告诉服务器端它已经没有数据要发送了,这时候客户端会进入FIN_WAIT状态,这个状态虽然客户端不会向服务器发送数据,但是能接收服务器端发过来的数据并回复确认信息,直到收到服务器端发来的FIN,收到FIN后客户端会回复ACK报文确认并进入TIME_WAIT状态同时启动定时器,如果服务器端没有收到ACK,在定时器到达一定时间后,客户端会进行ACK重传,如果服务器收到ACK,则断开连接,否则客户端在等待2MLS(2倍报文最大生存时间)后,没有收到服务器的重传请求,客户端就认为服务器已经收到ACK,客户端将关闭自己的连接。

参考文献:计算机网络:原理与实践/陈鸣编著.-北京:高等教育出版社,2013.2:222-234

版权声明:本文为博主原创文章,未经博主允许不得转载。

tcp三次握手四次挥手(及原因)详解

TCP(Transmission Control Protocol,传输控制协议)是 面向连接的协议,也就是说在收发数据之前,必须先和对方建立连接, 一个TCP连接必须要经过三次“对话”才能建立起来,...
  • xulu_258
  • xulu_258
  • 2016年04月13日 21:02
  • 8227

TCP协议的三次握手和四次挥手以及断开时各阶段的状态分析

我们知道,https协议是在http协议之上封装了SSL协议,为了完成客户端和服务端的双向认证和可靠传输,需要在通信之前双方进行多次的握手协商。TCP协议与https协议类似。 1.TCP的连接(俗称...
  • sszgg2006
  • sszgg2006
  • 2017年02月20日 16:26
  • 984

TCP三次握手四次挥手过程详解

TCP头部: 其中 ACK   SYN  序号  这三个部分在以下会用到,它们的介绍也在下面。 暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的...
  • imilli
  • imilli
  • 2016年02月01日 18:38
  • 2757

Tcp为什么要三次握手四次挥手

client:黄河,server:长江 第一次:长江长江,我是黄河,听到请回答? 第二次:黄河黄河,我是长江,我听到你了,你能听到我吗? 第三次:长江长江,俺是黄河,我也能听到你,我要开始吐了。 其...
  • alan00000
  • alan00000
  • 2016年06月06日 14:47
  • 578

TCP三次握手(建立连接)与四次挥手(释放连接)详细图解

TCP链接协议概述 建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:    建立连接的过程 首先Client端发送连接请求报文,Server段...
  • sinat_20265495
  • sinat_20265495
  • 2016年09月22日 17:16
  • 653

TCP三次握手和四次挥手全过程及为什么要三次握手解答

TCP三次握手和四次挥手的全过程      TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有8种表示: SYN(synchrono...
  • yanxiaolx
  • yanxiaolx
  • 2016年08月04日 22:37
  • 7097

TCP三次握手与四次挥手过程

首先,客户端与服务器均处于未连接状态,并且是客户端主动向服务器请求建立连接: 客户端将报文段中的SYN=1,并选择一个seq=x,(即该请求报文的序号为x)  将这个报文发送到服务器。此时,客户端进...
  • shuaicenglou3032
  • shuaicenglou3032
  • 2017年03月28日 13:57
  • 2235

网络编程之TCP协议为啥是三次握手和四次挥手?

在学习TCP协议的时候,总是在强调三次握手,那么为什么是三次?而不是两次或者四次?(强迫症表示黑人问号????) 今天我们就来分析一下为什么是三次,下图是一次TCP通讯的时序 在这个例子中...
  • qq_29695087
  • qq_29695087
  • 2016年08月06日 20:54
  • 1086

TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用

三次握手第一次握手:主机A发送位码为syn=1,随机产生seq number=10001的数据包到服务器,主机B由SYN=1知道,A要求建立联机,此时状态为SYN_SENT; 第二次握手:主机B收...
  • sinat_32487221
  • sinat_32487221
  • 2017年02月16日 21:31
  • 1829

TCP/IP三次握手、四次挥手总结

(一)TCP/IP三次握手原理:    建立连接协议(三次握手) (1)客户端向服务器端发送连接请求包SYN(syn=j),等待服务器回应; (2)服务器端收到客户端连接请求包SYN(syn=j...
  • u013812939
  • u013812939
  • 2015年06月28日 11:34
  • 961
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈TCP连接的三次握手与四次挥手(2017.08.08修复版)
举报原因:
原因补充:

(最多只允许输入30个字)