TCP连接管理(TCP Connection Management)
在最近的求职面试过程中,关于"建立TCP连接的三次握手"不止一次被问到了,虽然我以前用同样的问题面试过别人,但感觉还是不能给面试官一个很清晰的回答。本文算是对整个TCP连接管理做一个比较系统的梳理。
1. TCP报文段结构(TCP Segment Structure)(i.e. TCP Header)

- source port: 源端口,占16位。
- dest port: 目标端口,占16位。
- sequence number: 序列号,占32位。该字段指定了TCP分组在数据流中的位置,在数据丢失后需要重传时很重要。
- acknowledgment number: ACK号,占32位。该字段在确认收到TCP分组时使用。
- receive window: 接收窗口,占16位。 该字段用于流量控制。
- header length: 报头长度,占4位。该字段指示了TCP报头的长度(以占32个比特的word(即4字节)为单位)。有了这一字段,那么TCP报头的长度就是可变的。(TCP报头的典型长度就是20个字节,因为Options字段通常为空) 4个比特可以表示的最大数是1111b(=0xf=15),那么TCP报头的最大长度为(4*15=)60个字节。
- ...
| 标志位 | 含义 | 说明 |
| URG | Urgent Pointer field significant | 紧急指针控制位,指出当前数据段中是否有紧急数据。 |
| ACK | Acknowledgment field significant | 确认控制位,指示TCP段中的"确认号"字段是否有效。 |
| PSH | Push Function | 推控制位,指示是否需要立即把收到的该数据段提交给应用进程。 |
| RST | Reset the connection | 重置控制位,用于重置,释放一个已经混乱的传输连接,然后重建新的传输连接。 |
| SYN | Synchronize sequence numbers | 同步控制位,用来在传输连接建立时同步传输连接序号。 |
| FIN | No more data from sender (Final) | 最后控制位,用于释放一个传输连接。 |
2. 建立TCP连接的三次握手

一个更好的图,来自book 《The TCP/IP Guide》

3. 关闭TCP连接

一个更好的图,来自book 《The TCP/IP Guide》

4. TCP连接的状态转移
4.1 TCP连接状态

4.2 TCP传输连接有限状态机转换流程

4.3 客户端TCP经历的典型的TCP状态序列

4.4 服务器端TCP经历的典型的TCP状态序列

参考文献:
1. Book: Computer Networking: A Top-Down Approach (6th Edition) (By James F. Kurose, Keith W. Ross) Chapter 3 Transport Layer
2. Book: Computer Networks (5th Edition) (By Andrew S. Tanenbaum) Chapter 6 The Transport Layer
3. Book: 《深入理解计算机网络》(第1版)(王达著)第10章 传输层
4. Book: 《深入Linux内核架构》(第1版)(Wolfgang Mlauerer著 郭旭译)第12章 网络
5. RFC793 : Transmission Control Protocol : 3. FUNCTIONAL SPECIFICATION
6. RFC3168 : 6.1. TCP
TCP连接管理(TCP Connection Management)的更多相关文章
- TCP系列07—连接管理—6、TCP连接管理的状态机
经过前面对TCP连接管理的介绍,我们本小节通过TCP连接管理的状态机来总结一下看看TCP连接的状态变化 一.TCP状态机整体状态转换图(截取自第二版TCPIP详解) 二.TCP连接建立 ...
- 多图详解 TCP 连接管理,太全了!!!
TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...
- NIO 服务端TCP连接管理的方案
最近做的一个项目需要在服务端对连接端进行管理,故将方案记录于此. 方案实现的结果与背景 因为服务端与客户端实现的是长连接,所以需要对客户端的连接情况进行监控,防止无效连接占用资源. 完成类似于心跳的接 ...
- tcp连接管理
[root@ok etc]# cat /proc/sys/net/core/netdev_max_backlog 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 ...
- TCP/IP 笔记 - TCP连接管理
TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...
- TCP三次握手及TCP连接状态 TCP报文首部格式
建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchron ...
- 计算机网络知识(TCP连接,TCP/UDP区别,HTTP与HTTPS,Socket原理等等)
1.网络七层协议包含,物理层.数据链路层.网络层(ip协议).传输层(TCP传输控制协议.UDP用户数据报协议).会话层.表示层.应用层(http协议).是一个提供的概念架构协议. 2.TCP/IP协 ...
- TCP 连接管理
实验代码和内容:https://github.com/ZCplayground/Understanding-Unix-Linux-Programming/tree/master/11.socket 明 ...
- 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090 学习课程:<2019王道考研计算机网络> 学习目的 ...
随机推荐
- [QPlugins]学习大纲
QPlugins是一个DELPHI实现的插件框架,官方网址是:http://www.qdac.cc/ . 把学习QPlugins的过程和心得做一个记录,以便应用到项目中,同时学习一些实现方法和思想. ...
- java-04流程控制语句
这里先简单介绍几种流程控制语句 包括if/if-else.switch语句 1.三大流程控制结构 所谓流程控制,就是说要控制程序的执行方式,根据不同的情况执行不同的代码,从而得到不同情况下的不同结果. ...
- c#设计模式系列:观察者模式(Observer Pattern)
引言 在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用.在这一章将分享我对观察者模式的理解,废话不多说了,直接进入今天的主题. 观察者模 ...
- 常用的jQuery学习文档及使用经验
分享几个jQuery学习的API在线文档 1. 首推 http://hemin.cn/jq/ 原因是全中文文档,文档排列通俗易懂,容易查找,示例清楚. 2. https://www.jquery123 ...
- c# 用户输入一个字符串,求字符串的长度
C# 用户输入一个字符串,求字符串的长度使用字符串的length: class Program { static void Main(string[] args) { Console.WriteLi ...
- [Perl]通过GD模块获取字符/汉字的点阵
原来Perl获取汉字的点阵如此简单 示例脚本应保存为utf8格式 Code: [全选] [展开/收缩] [Download] (Untitled.pl) use GD; use utf8; my $g ...
- GPU大百科全书 第一章:美女 方程与几何
沉鱼落雁 前言:当你酣战在星际2的时候,或者当你在艾泽拉斯游历的时候,你有没有想过,眼前的这些绚丽的画面究竟是怎么来的呢?也许对大多数人来说,GPU对于图形的处理过程并不是那么重要,但总会有些人, ...
- How to mount a remote directory in Linux using sshfs
Q. I have access rights to one of the remote server through SSH protocol and there is no File share ...
- 快速上手日期插件laydate
1.laydate 这款插件有独立版的,也有作为layui模块的,两种使用方式差不多,就引入有区别而已 <!--这是作为模块使用--><!DOCTYPE html> <h ...
- luogu4383 [八省联考2018]林克卡特树(带权二分+dp)
link 题目大意:给定你 n 个点的一棵树 (边有边权,边权有正负) 你需要移除 k 条边,并连接 k 条权值为 0 的边,使得连接之后树的直径最大 题解: 根据 [POI2015]MOD 那道题, ...