网络编程-TCP连接的建立与终止
TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。
1.建立连接
- 请求端(通常称为客户)发送一个
SYN
段指明客户打算连接的服务器的端口,以及初始序号(ISN
,在这个例子中为1415531521)。这个SYN
段为报文段1。 - 服务器发回包含服务器的初始序号的
SYN
报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN
加1以对客户的SYN
报文段进行确认。一个SYN
将占用一个序号。 - 客户必须将确认序号设置为服务器的
ISN
加1以对服务器的SYN
报文段进行确认(报文段3)。
这三个报文段完成连接的建立。这个过程也称为 三次握手(three-way handshake)。
2.连接终止
建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(halfclose)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN
来终止这个方向连接。当一端收到一个 FIN
,它必须通知应用层另一端已经终止了那个方向的数据传送。发送 FIN
通常是应用层进行关闭的结果。
当服务器收到这个 FIN
,它发回一个 ACK
,确认序号为收到的序号加1(报文段5)。和SYN一样,一个 FIN
将占用一个序号。同时TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个服务器程序就关闭它的连接,导致它的TCP端发送一个 FIN
(报文段6),客户必须发回一个确认,并将确认序号设置为收到序号加1(报文段7)。
3.TCP状态转换图
参考资料
1.TCP/IP详解 卷1:协议 - 第18章 TCP连接的建立与终止
网络编程-TCP连接的建立与终止的更多相关文章
- UNIX网络编程——TCP连接的建立和断开、滑动窗口
一.TCP段格式: TCP的段格式如下图所示: 源端口号与目的端口号:源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接. 序号:序号表示在这个报文段中的第一个数据字节 ...
- TCP连接的建立和终止
TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...
- [TCP/IP]TCP连接的建立和终止
TCP 是支持全双工通信的传输层协议,为了开发出更好的网络通信应用,清楚了解其中的交互过程是非常必要的. 下面用比较直白的话来描述&理解一下这个过程: TCP 连接建立:三次握手 服务器依次调 ...
- 传输层(2)-TCP连接的建立和终止、TIME_WAIT状态
1.TCP连接的建立和终止 1)三路握手 客户端发送一个SYN(同步)分解,告诉服务器客户将在连接中发送的数据的初始序列号. 服务器发送确认客户的SYN(ACK),同时自己也得发送一个SYN分节,它含 ...
- TCP连接的建立与终止
TCP/IP详解学习笔记(13)-- TCP连接的建立与终止 1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请 ...
- TCP/IP协议--TCP协议概括和TCP连接的建立和终止
TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...
- TCP连接的建立与终止过程详解
TCP连接的建立与终止: 1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客 ...
- TCP/IP详解学习笔记(13)-- TCP连接的建立与终止
1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续 ...
- python网络编程--TCP连接的三次握手(三报文握手)与四次挥手
一.TCP连接 运输连接有三个阶段: 连接建立.数据传送和连接释放. 在TCP连接建立过程中要解决以下三个问题: 1,要使每一方能够确知对方的存在. 2.要允许双方协商一些参数(如最大窗口之,是否使用 ...
随机推荐
- HSPICE与非门仿真
一.HSPICE的基本操作过程 打开HSPICE程序,通过OPEN打开编写好的网表文件. 按下SIMULATE进行网表文件的仿真. 按下AVANWAVES查看波形图(仿真结果). 二. 网表文件结构总 ...
- CF760A Petr and a calendar 题解
Content 输入两个数 \(m,d\),请输出 \(2017\) 年 \(m\) 月的日历[其中第一天是星期 \(d\)(如果 \(d=7\) 就是星期天)]需要印的列数. 格式见题目所述. 数据 ...
- CF289B Polo the Penguin and Matrix 题解
Content 有一个 \(n\times m\) 的矩阵 \(A\),每次操作你可以将某一个元素增加或减少 \(d\),求是所有元素相等的最小操作次数,或者不存在这样的操作方案. 数据范围:\(1\ ...
- python 快速启动http监听服务
python3 [root@vm10-20-9-45 ~]# python3 -m http.server 2378 Serving HTTP on 0.0.0.0 port 2378 (http:/ ...
- git pull 拉取报错:fatal: refusing to merge unrelated histories
fatal: refusing to merge unrelated histories(拒绝合并不相关的历史) 使用 git pull origin master --allow-unrelated ...
- UEditor富文本判断是否输入内容
<textarea name="CONTENT" id="CONTENT" maxlength="4000" style=" ...
- 【LeetCode】34. Find First and Last Position of Element in Sorted Array 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetc ...
- computer(hdu2196)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Windows下安装配置MySQL
Windows下安装配置MySQL的基本步骤 一.MySQL下载 MySQL官方下载地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads ...
- Java调用Azkaban的RestFul接口
1.绕过ssl认证的工具类: import java.security.KeyManagementException; import java.security.NoSuchAlgorithmExce ...