TCP的连接和建立都是采用客户服务器方式。主动发起连接建立的应用进程叫作客户(Client)
被动等待连接建立的应用进程叫作服务器(Server),建立TCP需要三次握手才能建立,而断开连接则需要四次挥手。

整个过程如图所示:

一、三次握手

在TCP/IP中,采用三次握手建立一个连接,连接过程就像打电话的过程

  • 第一次握手:Client(客户端主机A)向Server(服务器主机B)发送一个连接请求,在这个包中,标志位SYN=1,发送序号SEQ=x,上图中x=200,Client(客户端)进入SYN_SEND(已发送)状态,等待Server(服务器)确认。
  • (插入)包的概念:包(Packet)是网络上传输的数据片段,也称分组。包是一种统称,在不同的协议不同的层次,包有不同的名字
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,确认序号ACK=x+1=201,随机产生一个发送序号SEQ=y,上图中y=500,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD(已接收)状态。
  • 第三次握手:Client收到确认后,检查确认序号ACK是否为x+1=201,标志位ACK是否为1,如果正确,则将标志位ACK置为1,确认序号ACK=y+1=501,并将该数据包发送给Server,Server检查确认序号ACK是否为y+1=501,标志位ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED(已建立)状态。

完成三次握手,客户端与服务器开始传送数据。

二、四次挥手

四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开,如图所示:

  • 第一次挥手:当客户A要断开TCP连接时,发送一个包,其中标志位fin=1,ACK=1,发送序号SEQ=x,确认序号ACK=y,上图中x=200,y=500。Client进入FIN_WAIT_1状态(已发送fin,等待回复)。
  • 第二次挥手:客户B知道A要断开后,发送一个确认包,其中标志位ACK=1发送序号,SEQ=y确认序号ACK=x+1=201,Server进入CLOSE_WAIT状态(被动关闭)。
  • 第三次挥手:客户B也断开TCP连接,此时发送一个包,其中,标志位fin=1,发送序号SEQ=y+1=501,Server进入LAST_ACK状态(确认请求)。
  • 第四次挥手:客户A收到B的断开请求后,Client进入TIME_WAIT状态,接着发送一个确认包,标志位ACK=1,发送序号SEQ=x+1=201,确认序号ACK=y+2=502;Server进入CLOSED状态(关闭)。

由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。

三、补充:6个标志位的含义

四、简单图解

  1. 三次握手简单图解

2.四次挥手简单图解

文章中部分转载自《一本书读懂TCP/IP》作者: 王元杰 / 杨波 / 周亚宁 / 陈志刚

tcp的三次握手和四次挥手(详解+图片)相关推荐

  1. TCP协议---三次握手和四次挥手详解 (不看后悔系列)

    目录 TCP协议简介 TCP报头 TCP工作原理 科来解码详解 wireshark解码详解 三次握手和四次挥手 数据包的大致结构 你不知道的三次握手 为什么需要有三次握手? 为啥只有三次握手才能确认双 ...

  2. TCP的三次握手和四次挥手详解

    为什么需要"三次握手" 在谢希仁著<计算机网络>第四版中讲"三次握手"的目的是"为了防止已失效的连接请求报文段突然又传送到了服务端,因而产 ...

  3. TCP的三次握手与四次挥手详解

    文章目录 TCP 协议简述 TCP包首部 TCP 三次握手建立连接 TCP 四次挥手关闭连接 常见面试题: TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连 ...

  4. TCP 三次握手和四次挥手详解

    1. TCP 报文格式详解 (1). 源端口和目的端口字段--各占 2 字节,标识了发送方和接收方的应用进程,如2210,80端口 (2). 序号字段--占 4 字节,TCP 连接中传送的数据流中的每 ...

  5. TCP—三次握手和四次挥手详解

      本文主要介绍TCP连接三次握手和四次挥手的机制. TCP三次握手 剖析三次握手机制   首先Client端发送连接请求报文,Server端接受连接后回复ACK报文,并为这次连接分配资源.Clien ...

  6. TCP三次握手和四次挥手详解

    文章目录 三次握手和四次挥手简述 三次握手的目的 三次握手流程详解 半连接队列和全连接队列 四次挥手的目的 四次挥手详解 为什么客户端需要TIME_WAIT状态 为什么挥手比握手多一次 为什么三次挥手 ...

  7. TCP三次握手和四次挥手详解(面试常见问题)

    大概两个月前,一位朋友在面试360集团时,在面试过程中被问及TCP三次握手和四次挥手的相关知识,他当时只知道大概,但当时面试官问他TCP三次握手过程中发送的数字是多少,他一下子就懵住了,因为这也是他第 ...

  8. 三次握手和四次挥手详解

    详解 TCP 连接的" 三次握手 "与" 四次挥手 " *TCP connection* 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP co ...

  9. tcp 三次握手与四次挥手_TCP三次握手与四次挥手详解

    TCP报文结构   源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号. 序号:占4个字节.序号使用mod运算.TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号 ...

  10. TCP三次握手及四次挥手详解

    此篇文章转载自:http://justim.blog.51cto.com/740099/237548 TCP(Transmission Control Protocol) 传输控制协议   TCP是主 ...

最新文章

  1. 1.JSONObject与JSONArray的使用
  2. Java网络编程笔记2
  3. 常见电子元件实物照片
  4. python 字符串替换_Python,字符串。替换()和\n
  5. phpcms mysql 事务_phpcms某站点MySQL报错注入
  6. 一个引发程序员们干架的问题
  7. ArcGIS实验教程——实验三十二:ArcGIS水文分析(流向分析、计算水流长度、汇流分析、河网分析、流域分析)
  8. web开发移动端准备工作
  9. python有参装饰器详解_Python 带有参数的装饰器实例代码详解
  10. CF1137E Train Car Selection(单调栈维护凸函数)
  11. 操作系统的起源与发展历程
  12. 常见端口入侵方法剖析
  13. websoc是什么可以卸载吗_Win7系统中unity web player是什么程序?能否卸载
  14. 网络协议总结(TCP,UDP,HTTP,HTTPS)
  15. Flume安装部署,采集方案配置文件编写案例,启动agent采集数据
  16. 微信小程序video组件/腾讯视频插件,禁止拖动进度条,使用遮罩层的方式实现
  17. 什么是JavaBeans
  18. java基础知识大端模式及其小端模式处理
  19. Tomcat Servlet Request
  20. datatables数据表格的数据csv本地导出

热门文章

  1. 部署MySQL数据库到服务器
  2. VisualStudio2015安装不上的解决方法_选择对应msi_依然报错继续选择---VisualStudio2015工作笔记001
  3. Unity3D-使用custom font字体以及重叠问题
  4. Karhunen-Loeve Transform (KLT, KL变换)
  5. 政务网站适老化,看顶象无感验证
  6. Qtum量子链创始人帅初:95%的项目在3年后,应该都不在
  7. 【扔物线首次二人转】码上开学背后的故事
  8. 一文搞懂CAS,CAS原理分析及ABA问题详解
  9. matlab 曲线之间的差异,[求助]如何比较两条回归曲线的差异
  10. 国科大计算机所考研成绩,2020国科大计算所计算机软件与理论复试经验复试公告复试真题复试分数成绩查询...