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年的时候就 ...
随机推荐
- 前端base64、baseurl加解密和RSA加解密
由于项目最近要进行安全测试,前端的用户和密码都是明文数据传送给后台那里,其实这样很很不安全的,容易泄露个人信息和密码.中间服务器的同事就提出,可以通过前端接收公钥,利用公钥对密码进行加密,把加密过密码 ...
- Spring 使用介绍(十)—— 单元测试
一.概述 Spring测试框架提供了对单元测试的支持,以便使用spring的依赖注入和事务管理功能 maven依赖: <dependency> <groupId>junit&l ...
- IntelliJ IDEA 导航的 20 大特性
本文由 ImportNew - elviskang 翻译自 dzone.欢迎加入翻译小组.转载请见文末要求. 在前面的文章里,我介绍了IntelliJ IDEA(以下称IntelliJ)中与代码补全及 ...
- BZOJ4712洪水——动态DP+树链剖分+线段树
题目描述 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到 山顶放了格水.于是小A面前出现了一个瀑布.作为平民的小A只好老实巴交地爬山堵水.那么 ...
- EF code first出现错误:列名 Discriminator 无效
转载:https://blog.csdn.net/lanse_my/article/details/38128355 前几天使用code first碰到错误:列名 'Discriminator' 无效 ...
- POJ3417 Network(算竞进阶习题)
LCA + 树上差分(边差分) 由题目意思知,所有主要边即为该无向图的一个生成树. 我们考虑点(u,v)若连上一条附加边,那么我们切断(u,v)之间的主要边之后,由于附加边的存在,(u,v)之间的路径 ...
- CCPC-Wannafly Winter Camp Day1 (Div2, onsite) A B C E F I J
A 机器人 链接:https://www.cometoj.com/contest/7/problem/A?problem_id=92 思路: 分两大类讨论: 1. B区没有点: (1)点都在起点左边 ...
- codeforces 242E - XOR on Segment (线段树 按位数建树)
E. XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...
- Linux qemu-nbd mount qemu disk image
Linux qemu-nbd mount qemu disk image deepin@deepin:~$ deepin@deepin:~$ qemu-nbd --help Usage: qemu-n ...
- BZOJ 2069: [POI2004]ZAW(Dijkstra + 二进制拆分)
题意 给定一个有 \(N\) 个点 \(M\) 条边的无向图, 每条无向边 最多只能经过一次 . 对于边 \((u, v)\) , 从 \(u\) 到 \(v\) 的代价为 \(a\) , 从 \(v ...