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王道考研计算机网络> 学习目的 ...
随机推荐
- memcached整理の内存管理及删除机制
内存的碎片化 如果用C语言直接malloc,free来向操作系统申请和释放内存时,在不断申请和释放的过程中,形成了一些很小的内存片段,无法再利用.这种空闲但无法利用内存的现象称为内存的碎片化. sla ...
- linux命令の ./configure --prefix
源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./con ...
- 关于提交表单时添加自定义值的方式:data中值可绑定function
表单提交时新增自定义值: $.ajaxForm(){ data:{aaa:"12"} } 但是这个是在初始化的时候就绑定进去的,所以值是固定的初始化时候的值,若想添加动态值,可以这 ...
- PMBOK项目管理认知概要
2015年6月,通过努力取得PMP证书,很是欣喜,也是对努力付出的一种奖励吧! 通过学习PMP相关的项目管理的知识,对国外的项目管理技术有更加系统的认知.理解.掌握,熟悉全项目生命周期的管理. 其实对 ...
- 如何使用jQuery写一个jQuery插件
jQuery插件其实是前端框架的思维,构成一个框架,个人认为必须满足以下几个基础条件:1. 可重用,2. 兼容性,3. 维护方便,虽说现在有很多比较成熟的前端框架,但是也有部分存在配置麻烦,学习成本大 ...
- Sublime text3!行首,行尾,批量编辑!
1.Windows下的操作操作步骤 1.Ctrl + H 2.打开正则,输入^,然后Find All,查找所有的行首 3.打开正则,输入$,然后Find All,查找所有的行尾 4.光标闪动,就可以进 ...
- selenium alert JS弹窗问题处理
弹窗一般分为三种类型: 1.警告消息框(alert) 警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操 ...
- 内置函数和numpy中的min(),max()函数
内置min()函数 numpy中的min()函数:
- jquery中animate({left:'-='+width})中的 '-='+是什么意思?
left:'-='+width的意思是:left属性的最终值,是left现有值减去width这个值 例如:left:'200px' 意思是left最终值变成200left:'+200px' 意思与上面 ...
- jvisualvm_使用jstatd连接远程linux应用
[1]确定linux系统正确安装了ssh # sudo ps -e | grep ssh ①注意使用root,使用$会报如下错误: [appadmin@webcsuat2 ~]$ sudo ps -e ...