前言

在没有理解TCP连接是如何建立和终止之前,我想你可能并不会使用connect,accept,close这三个函数并且使用netstat程序来调试应用。所以掌握TCP连接的建立和终止势在必行。

三次握手

  1. 客户端首先通过调用connect函数发起主动打开(服务器为被动打开),这导致客户端TCP发送一个SYN同步分节(Synchronize Sequence Numbers),告诉服务器将在连接中发送的数据的初始序列号,如图为 J;(SYN分节不携带数据,其所在的IP数据报只含有一个IP首部、一个TCP首部以及可能有的TCP选项)

  2. 服务器需要对客户端的请求进行确认,同时自己也发送一个SYN分节(包含服务器将在同一连接中发送的数据的初始序列号)

  3. 客户端进行确认。

为什么发送加一的序列号呢?因为这是发送这一端所期待的下一个序列号,而且SYN占据一个字节的序列号空间;

四次挥手

在步骤2和步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是又可能,这成为半关闭。

这个图只是展示了客户端执行主动关闭的情况,不过无论是客户端还是服务器端,任何一方都可以执行主动关闭。

TCP状态转换图

在理解了前面的知识以后,再来看总体的状态转换图就会简单很多。

TCP为一个连接定义了11种状态,并且TCP规则规定如何基于当前状态及在该状态下所接收的分节从一个状态转换到另一个状态。

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

TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEⅣE,CLOSE,ABORT和STATUS。传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN。还有超时,上面所说的都会时TCP状态发生变化。

图中粗实线代表的是客户端状态转换,虚线代表的是服务器状态转换。

我们从图中可以发现两种特殊的情况,分别是同时打开和同时关闭,前者发生在两端几乎同时发送SYN并且这两个SYN在网络中交错的情形下,后者发送在同时发送FIN的情形下。

同时打开

很明显,这个连接的过程经历四次数据交换,但是一个典型的连接建立只需要3次。

从状态转换图中可以发现,TCP在遇见这种协议的时候,只会打开一条连接,比如图中是由客户端做主动打开。

同时关闭

在发送程序后则会进入到 FIN_WAIT_1 状态。在收到对端的FIN后,回复一个ACK,会进入CLOSING状态。在收到对端的ACK后,进入TIME_WAIT状态,也就是说,这中间不会在存在半关闭的状态。

推荐

在线画图工具,可以存在谷歌云盘,还可以现场导出图片和PDF

TCP的连接和建立 图解的更多相关文章

  1. TCP之连接的建立和终止

    1. 连接的建立 TCP 连接建立的三次握手 如上图所示,TCP 连接的建立会发生如下述情形: 服务器必须准备好接受外来的连接.这通常通过调用 socket.bind 和 listen 这 3 个函数 ...

  2. 计算机网络(11)-----TCP连接的建立和释放

    TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序, ...

  3. TCP/IP详解学习笔记(10)-TCP连接的建立与中止

    TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接.这和前面讲到的协议完全不同.前面讲的所有协议都只是发送数据而已,大多数都不关心发送的数据是不是送到,UDP尤其明显,从编 ...

  4. tcp连接的建立与释放

    1.TCP是面向连接的协议. 运输连接时用来传送TCP报文的.TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输链接就有三个阶段,即:连接建立.数据传送和连接释放. 在TCP ...

  5. TCP/IP连接状态

    1.建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1.(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN ...

  6. 第三次作业:使用Packet Tracer分析TCP连接的建立与释放过程

    0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内容 使用Packe ...

  7. TCP连接的建立和终止

    TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...

  8. 简述TCP连接的建立与释放(三次握手、四次挥手)

    在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...

  9. 传输层(2)-TCP连接的建立和终止、TIME_WAIT状态

    1.TCP连接的建立和终止 1)三路握手 客户端发送一个SYN(同步)分解,告诉服务器客户将在连接中发送的数据的初始序列号. 服务器发送确认客户的SYN(ACK),同时自己也得发送一个SYN分节,它含 ...

随机推荐

  1. HttpClient 4.3连接池参数配置及源码解读

    目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...

  2. RabbitMQ安装和使用(和Spring集成)

    一.安装Rabbit MQ Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接下载安装3.2.3 版本: 下载并安装 E ...

  3. [No0000B7]If else 与 三元表达式? : 效率对比

    先看 if else 一段代码 using System; class Program { private static void Main() { ; ) i = -; ; Console.Writ ...

  4. [C#]为微软ASP.NET官方教学视频增加字幕

    前言 Microsoft Virtual Academy提供了学习ASP.NET的大量视频材料.(注1) 由于视频服务器位于海外,国内浏览速度并不理想,幸好官方提供了视频的下载地址以及英文字幕文件. ...

  5. 《JAVASCRIPT高级程序设计》第一章

    在使用调制解调器的时代,频繁的表单验证对客户端来说是一个很大的负担,javascript,作为一种专门进行表单验证的客户端脚本语言诞生了.到今天,javascript早已超越了当初设定的角色.Java ...

  6. My97DatePicker.js 之无效日期设置

    1.下载并引用My97DatePicker.js 2.将工作日休假的和周末上班的维护到数据库中 3.取出某段时间内的不上班日期集合 /// <summary> ///获取 无效日期集合 1 ...

  7. PowerPoint超链接字体颜色修改、怎么去掉超链接下划线

    经常在做PPT幻灯片时会遇到这样一个问题,给文字加超链接后发现链接的颜色是蓝色的,而且还带有下划线,这种效果与主题的色彩搭配简直是太影响美观效果了.有没有什么办法可以去掉PPT中的超链接下划线?再将超 ...

  8. 配置FindBugs和常见FindBugs错误

    配置FindBugs: 在这里可以对FindBugs规则等进行详细设置. 选择你的项目,右键 => Properties => FindBugs => 1 Run Automatic ...

  9. 点击Robot Framework的桌面快捷图标后,没有反应(没有打开应用程序)

    http://www.cnblogs.com/zhengyihan1216/p/6397478.html  这篇文章中介绍了如何安装Robot Framework以及如何在桌面上创建快捷方式. 但是有 ...

  10. QQ微信刷屏助手 FlashScreenAssist 1.2发布

    主要功能 文字刷屏 图片刷屏 简易教程 文字刷屏 打开软件之后输入要刷屏的文字,点击[开始],然后点一下微信或者QQ的输入框,就会开始刷屏了,注意[时间间隔]不要调太小,越小越快. 要注意的是.必须在 ...