TCP 是支持全双工通信的传输层协议,为了开发出更好的网络通信应用,清楚了解其中的交互过程是非常必要的。

下面用比较直白的话来描述&理解一下这个过程:

TCP 连接建立:三次握手

服务器依次调用 socket,bind,linsten 绑定到指定本机地址,accept 阻塞等待连接。

1. 客户端调用 socket 指定本地/网络地址,connect 主动建立连接,向服务器发送 SYN 同步请求,并标记该连接通道传送数据的初始序号为 J 。

2. 服务器收到 SYN 请求后,响应 ACK(acknowledgement)确认收到,并标记序号为 J + 1 ;

同时服务器也向客户端发送一个 SYN 同步请求,并标记该连接通道传送数据的初始序号为 K 。

3. 客户端收到 SYN 请求后,对服务器响应 ACK 确认收到,并标记序号为 K + 1 。

在完成上面三步之后,TCP连接完成,客户与服务器之间可以互发数据了。

TCP 连接终止:四次挥手

客户或服务器都可以主动发起 close 动作。

1. 客户调用 close 主动关闭连接,此时向服务器发送 FIN(finish)请求,标记连接的数据序号为 M 。

2. 服务器收到客户结束请求后,响应 ACK 确认,并标记连接数据序号为 M + 1 。

3. 服务器被动关闭,向客户发送 FIN 请求,标记连接的数据序号为 N 。

4. 客户收到服务器的 FIN 请求后,响应 ACK 确认,并标记连接的数据序号为 N + 1 。

完成上面四步,TCP连接终止。

TCP连接的分组交换

TCP 的 SO_KEEPALIVE 套接字选项

这是一个检测连接存活的选项,设置了 keep-alive 选项后,如果 2小时内在该套接字的任一方向上都没有数据交换,

TCP 就自动给对端发送一个保持存活探测分节(keep-alive probe),这是一个对端必须响应的 TCP 分节。

如果没有对 TCP 探测分节的响应,套接字待处理错误被置为 TIMEOUT,套接字关闭。

HTTP 的 keep-alive 属性

HTTP 是基于 TCP 之上的无状态的请求-响应式短连接,每一个请求就是一个 TCP 连接,频繁的三次握手和四次挥手会浪费传输之外的大量时间。

为了提高连接和应用效率,服务端设置 keep-alive 后客户端在发起一次请求后,服务器端不会马上关闭这个 TCP 连接,而是在一段时间内等待,有数据传输就复用这个连接。

@todo 用 tcpdump 分析连接的过程。

参考文献:

Unix网络编程1 > 传输层:TCP、UDP、SCTP > TCP连接的建立和终止

Unix网络编程1 > 套接字选项 > 通用套接字选项

Link:http://www.cnblogs.com/farwish/p/7482038.html

@farwish <www.farwish.com>

[TCP/IP]TCP连接的建立和终止的更多相关文章

  1. TCP/IP详解学习笔记(13)-- TCP连接的建立与终止

    1.TCP连接的建立            设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续 ...

  2. TCP/IP协议--TCP协议概括和TCP连接的建立和终止

    TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...

  3. TCP连接的建立和终止

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

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

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

  5. TCP连接的建立与终止

    TCP/IP详解学习笔记(13)-- TCP连接的建立与终止 1.TCP连接的建立            设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请 ...

  6. TCP连接的建立与终止过程详解

    TCP连接的建立与终止: 1.TCP连接的建立      设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客 ...

  7. 网络编程-TCP连接的建立与终止

    TCP是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接. 1.建立连接 请求端(通常称为客户)发送一个 SYN 段指明客户打算连接的服务器的端口,以及初始序号( I ...

  8. 【TCP/IP详解 卷一:协议】第十八章 TCP连接 的建立与终止 (2)其余内容

    18.5 TCP的半关闭 牢记 TCP 是 全双工 的. 半关闭:TCP提供了连接的一端 在结束了它的发送后 还能接收来自另外一端数据的能力.但是只有很少的应用程序利用它. 为了实现这个特性,编程接口 ...

  9. TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

    建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...

随机推荐

  1. Elixir的Phoenix框架:请求处理之道

    本文基于Phoenix1.3,但请求的处理流程跟1.2基本一致,只是模块的命名和目录结构有所差异. 简单介绍,phoenix是一个网站框架,本质就是http请求处理.这篇文章主要就是讲一个请求,在结果 ...

  2. [51nod1213]二维曼哈顿距离最小生成树

    二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间的距离为:横纵坐标的差的绝对值之和,即:Abs(x1 - x2) + Abs(y1 - y2)(也称曼哈顿距离).求这N个点所组成的完全图 ...

  3. NowCoderWannafly挑战赛5-可编程拖拉机比赛-向上取整和向下取整函数

    可编程拖拉机比赛 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 "这个比赛,归根结底 ...

  4. BZOJ 3105: [cqoi2013]新Nim游戏

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题意是要取一些数使得剩余的数xor和的子集不为0 拟阵.求解极大线性无关组.贪心从大到小 ...

  5. solr6.5的安装与配置

    环境介绍 solr 6.5 tomcat8 jdk1.8 win7系统 一.下载solr安装包 下载地址:http://www.apache.org/dyn/closer.lua/lucene/sol ...

  6. [国嵌攻略][127][tty驱动程序架构]

    tty概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. 1.串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备.Lin ...

  7. SSAS属性中更改AllowedBrowsingFolders的值后才能更改其它文件夹的值

    首先 以管理员身份运行 打开SQL Server Management Studio (SSMS). 在Sql Server Analysis Service中的属性中有很多文件夹属性,决定了存放CU ...

  8. 原生JavaScript常用的DOM操作

    之前项目一直都是用JQuery或者Vue来做的,确实好用,毕竟帮我们解决了很多浏览器兼容问题,但是后面发现大公司面试题都是要原生Javascript来做,然后我就一脸懵逼哈哈哈,毕竟大公司需要的框架或 ...

  9. 用于 C&sharp; 图像识别的轮廓分析技术

    用于 C♯ 图像识别的轮廓分析技术 供稿:Conmajia 标题:Contour Analysis for Image Recognition in C# 作者:Pavel Torgashov 此中文 ...

  10. 番外篇--Moddule Zero多租户管理

    番外篇--Moddule Zero多租户管理 2.1.1 关于多租户 强烈建议阅读这个文件前阅读多租户文档. 2.1.2 启用多租户 ASP.NET Boilerplate和module-zero可以 ...