在最近的求职面试过程中,关于"建立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)的更多相关文章

  1. TCP系列07—连接管理—6、TCP连接管理的状态机

            经过前面对TCP连接管理的介绍,我们本小节通过TCP连接管理的状态机来总结一下看看TCP连接的状态变化 一.TCP状态机整体状态转换图(截取自第二版TCPIP详解) 二.TCP连接建立 ...

  2. 多图详解 TCP 连接管理,太全了!!!

    TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...

  3. NIO 服务端TCP连接管理的方案

    最近做的一个项目需要在服务端对连接端进行管理,故将方案记录于此. 方案实现的结果与背景 因为服务端与客户端实现的是长连接,所以需要对客户端的连接情况进行监控,防止无效连接占用资源. 完成类似于心跳的接 ...

  4. tcp连接管理

    [root@ok etc]# cat /proc/sys/net/core/netdev_max_backlog 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 ...

  5. TCP/IP 笔记 - TCP连接管理

    TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...

  6. TCP三次握手及TCP连接状态 TCP报文首部格式

    建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchron ...

  7. 计算机网络知识(TCP连接,TCP/UDP区别,HTTP与HTTPS,Socket原理等等)

    1.网络七层协议包含,物理层.数据链路层.网络层(ip协议).传输层(TCP传输控制协议.UDP用户数据报协议).会话层.表示层.应用层(http协议).是一个提供的概念架构协议. 2.TCP/IP协 ...

  8. TCP 连接管理

    实验代码和内容:https://github.com/ZCplayground/Understanding-Unix-Linux-Programming/tree/master/11.socket 明 ...

  9. 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090 学习课程:<2019王道考研计算机网络> 学习目的 ...

随机推荐

  1. php数组倒叙支持多维数组

    <?php //一维数组 $test1 = array("a"=>"苹果","b"=>"香蕉",&qu ...

  2. 微软编程一小时 题目2: Longest Repeated Sequence

    题目2 : Longest Repeated Sequence 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a sequence of i ...

  3. ajax 解析

    1.通过适当的Ajax应用达到更好的用户体验; 2.把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的. 二 ...

  4. Pycharm中安装Pygame并写第一个程序

    第一步:打开Pycharm 第二步:点File ->Default Settings->Project Interpreter->点加号 第三步: 搜索Pygame->Inst ...

  5. 点击隐藏显示和点击body空白处隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 原生态js回顶部

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Access MongoDB Data with Entity Framework 6

    This article shows how to access MongoDB data using an Entity Framework code-first approach. Entity ...

  8. [ 转 ] 为 phpstorm 自定义默认 Web 服务器

    phpstorm自带web 服务器,可以直接执行调试,这个之前的文章专门讲过,可以看下. 同时你也可以选择在phpstorm集成apache服务器,下面是我自己的亲测的步骤. 如何修改apache默认 ...

  9. iOS 进阶---推送通知之本地通知

    1.推送通知的2种方式 1)本地推送通知(Local Notification) 2)远程推送通知(Remote Notification) 2.通知的作用 可以让不在前台运行的app,告知用户app ...

  10. 安装php,nginx 带debug

    gdb安装包   在CentOS6.4下使用gdb进行调试的时候, 使用bt(breaktrace)命令时,会弹出如下的提示: 头一天提示: Missing separate debuginfos, ...