TCP详解——连接建立与断开
一、报文结构介绍
在开始讲TCP连接过程时,还是先看看TCP报文的格式如图1所示。IP数据报此时由IP头部+TCP头部+TCP数据组成。不带选项的TCP头部是20字节长,而带选项的,TCP头部最长可达60字节。常见的选项包括最大的大小(MSS),时间戳(传输控制时使用)、窗口缩放(流量控制时使用)、选择性ACK(传输控制时使用)。我们来具体看下TCP头部字段如图2所示。

图1 IP数据报中TCP封装
图2所示的即是TCP头部的详细结构。源端口与目的端口和源IP及目的IP这四元组唯一标识每个TCP连接。序列号(Sequence Number)字段标识TCP的一端到另一端的数据流的第一个开始字节(例如发送端发送的数据总字节长度为1000字节,假定序列号从1开始,总的序列号是1-1000,TCP会给每个字节赋予一个序列号)。通过序列号来代表发送端到接收端的数据,接收端接收到数据后,即可通过确认号(ACK)来发送给发送端,让发送端知道数据已被接受。这个ACK号是由接收到的数据的序列号加1,代表接收端希望接收的下一个数据的序列号。(注:ACK是不占用序列号的,原因是接收端发送ACK给发送端后,发送端的ISN是等于此时接收到的ACK号)。

图2 TCP头部结构
头部长度的单位32bit,所以这也定义了TCP的长度最大为4*15=60字节。八个标志位中(CWR、ECE。。。等),这里先每个介绍,后面文章有用到时在另行介绍。我们来主要了解下ACK、SYN、FIN。ACK即确认,连接建立后一般都是启用状态。SYN用于初始化一个连接的同步序列号。当发送方已经结束数据的发送时,即发送FIN报文段给接收端。窗口大小在TCP流量控制中会重点讲解。
二、TCP连接的建立与终止
如图3所示即为TCP连接建立与终止的过程图。

图3 TCP连接的建立与终止
TCP建立的三次握手:
1、发送端发送一个SYN报文段(SYN位被置位),SYN中包含TCP目的端口和发送端的初始序列号(图中ISN(c)),同时携带着TCP选项数据。
2、接收端收到发送端连接请求后,接收端发送自己SYN报文段(包含ISN(s)),同时对发送端的SYN进行确认,如前所述,接收端发送的ACK是ISN(c)+1。此时ACK位与SYN位都被置位。接收端发送SYN+ACK到发送端。
3、发送端接收到接收端的SYN+ACK数据后,对ISN(s)进行确认,发送ACK为ISN(s)+1的报文段给接收端。
TCP断开的四次握手:
1、TCP协议规定通过发送一个FIN段(FIN被置位)来发起关闭操作,图3中发送端发送FIN段给接收端,告知它数据已发送完毕,请求断开TCP连接。同时FIN报文段还包含着对最近收到的数据进行ACK。
2、接收端接收端FIN报文段后,对FIN进行确认,发送ACK=k+1给发送端。
3、接收端将连接关闭发送给上层应用程序,由应用程序发起连接关闭操作。此时接收端由被动关闭连接壮成主动,并发送FIN报文段给发送端。报文的序列号为L(这里也可看出上一步骤中发送ACK序列号也为L,因为ACK不占用序列号,所以这里的FIN的序列号也为L)。
4、发送端接收到FIN后,发送回ACK给接收端后,TCP连接终止。如果FIN丢失,发送FIN的那端需要重新发送FIN,知道接收到ACK为止。
三:总结
如前所述,建立一个TCP连接需要3个报文段,而关闭TCP连接需要4个报文段。
TCP详解——连接建立与断开的更多相关文章
- 转载:tcp详解
TCP详解 转自:http://www.cnblogs.com/kzloser/articles/2582957.html 首部格式 图释: 各个段位说明: 源端口和目的端口: 各占 2 字节.端口是 ...
- 【TCP/IP】TCP详解笔记
目录 前言 17. TCP 传输控制协议 17.1 引言 17.2 TCP 服务 17.3 TCP的首部 18. TCP连接的建立与终止 18.1 引言 18.2 连接的建立与终止 18.2.1 建立 ...
- java网络编程(TCP详解)
网络编程详解-TCP 一,TCP协议的特点 面向连接的协议(有发送端就一定要有接收端) 通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...
- 网络通信和TCP详解
交换机.路由器.服务器组网 1. 通信过程(pc+switch+router+server) 较为复杂的通信过程如:访问 www.baidu.com 注意:一定要配置 PC:IP.NETMASK.DF ...
- TCP详解
1. 数据进入协议栈的封装过程 2. TCP连接的三次握手 3. TCP连接的三次握手和关闭时的四次握手 各个状态的意义如下: LISTEN - 侦听来自远方TCP端口的连接请求: SYN-SENT ...
- TCP/IP笔记(七)TCP详解
TCP的特点及其目的 为了通过数据包实现可靠性传输,需要考虑很多事情,例如数据的破坏.丢包.重复记忆分片顺序混乱等问题.如不能解决这些问题,也就无从谈起可靠传输. TCP通过检验和.序列号.确认应答. ...
- HTTP.Socket.TCP详解
这会没事,整理了一下HTTP,socket,TCP之间的关系与区别,我们在面试的时候应该会经常问到这方面的东西,那么什么是HTTP呢? HTTP属于老话题了,在项目中我们经常需要往服务端发POST或者 ...
- Linux系统编程(31)—— socket编程之TCP详解
TCP有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认序号.窗口大小稍后详细解释.4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头 ...
- TCP 详解
计算机网络中比较中要的无非就是 TCP/IP 协议栈,以及应用层的 HTTP 和 HTTPS . 前几天一直炒的的比较火的就是 HTTP/2.0 了,但是其实 HTTP/2.0 早在2015年的时候就 ...
随机推荐
- Spring 使用介绍(十)—— 单元测试
一.概述 Spring测试框架提供了对单元测试的支持,以便使用spring的依赖注入和事务管理功能 maven依赖: <dependency> <groupId>junit&l ...
- fastjson的JSONArray和JSONObject
转自: http://blog.csdn.net/tangerr/article/details/76217924 Fastjson是国内著名的电子商务互联网公司阿里巴巴内部开发的用于java后台处理 ...
- .net mvc 基类属性覆盖问题
一,问题是这样的 我使用.net mvc设计架构时, 为了方便大家的获取UserInfo信息, 把UserInfo对象,放在了自定义的基类BaseController中, 二,问题出现了 我发觉多个人 ...
- 51Nod1778 小Q的集合 【组合数】【Lucas定理】
题目分析: 题解好高深...... 我给一个辣鸡做法算了,题解真的看不懂. 注意到方差恒为$0$,那么其实就是要我们求$\sum_{i=0}^{n}\binom{n}{i}(i^k-(n-i)^k)^ ...
- 「POJ3311」Hie with the Pie
题目链接 >http://poj.org/problem?id=3311< 题意:从0出发,经过所有点(点可以重复走)后回到0点,问最短路 思路分析: 这题和普通的最短路不太一样,因为题目 ...
- Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)
mplot3d是matplotlib里用于绘制3D图形的一个模块.关于mplot3d 绘图模块的介绍请见:https://blog.csdn.net/dahunihao/article/details ...
- 使用 dmidecode 查看Linux服务器信息
使用 dmidecode 查看Linux服务器信息 来源 http://www.laozuo.org/6682.html 对于大部分普通服务器用户来说,我们选择VPS.服务器产品的时候比较关心的是产 ...
- PHP no input file specified 三种解决方法
一.IIS Noinput file specified (IIS上报的错误) 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.i ...
- Android stadio 生成项目 Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE)
解决方法 File-->Project-->Structrue-->SDK Location-->JDK location Use embedded JDK 前面勾去掉,指定一 ...
- Android热点回顾第一期
本文由 ImportNew - 陈强 翻译自 androidweekly.如需转载本文,请先参见文章末尾处的转载要求. Importnew注:欢迎Android爱好者参与翻译文中提及的教程,请私信联系 ...