TCP状态转换

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: TCP状态转换

TCP状态转换示意图如下

针对上面的示意图,主要对以下几点进行解析

  • 有哪些进程状态是可以捕捉到的?
  • LISTEN、ESTABLISHED、等,其他状态时间很短暂,捕捉不到。
  • netstat命令可以捕捉状态。
  • 2MSL是什么?
  • 2MSL是等待时长,主动关闭连接的一方将会处于TIME_WAIT状态。
  • 1MSL大概是30S,处于TIME_WAIT状态的进程(主动断开连接的进程)不会立即终止,而是会等待2MSL的时间;而被动断开连接的一方,在LAST_ACK状态,一旦收到对方的ACK就会立即终止进程。
  • 为什么主动断开的一方要等2MSL而被动断开的一方不需要等呢?
  • 因为有可能会出现这种情况,主动断开的一方(比如是client)属于TIME_WAIT时,向被断开的一方(比如说server)发送ACK,有可能对方没有收到,这时侯server会再发一次FIN,也就需要client再回复一次ACK(如果client没有等待就终止了,那么server发送的FIN就发送不到了,四次挥手就失败了),所以主动断开连接的一方要等待,来保证正常断开连接,而被断开的一方收到ACK就可以终止进程了,此时连接正常断开。
  • 什么是半关闭?
  • 如何理解半关闭
  • A给B发送FIN(A调用了close函数), 但是B没有给A发送FIN(B没有调用close)
  • A断开了与B的连接, B没有断开与A的连接
  • 特点:
  • A不能给B发送数据, A可以收B发送的数据
  • B可以给A发送数据
  • 函数: int shutdown(int sockfd, int how);
  • sockfd: 要半关闭的一方对应的文件描述符
  • 通信的文件描述符
  • how:(可以只关读、只关写,或读写都关)
  • SHUT_RD - 0 - 读
  • SHUT_WR - 1 - 写
  • SHUT_RDWR - 2 - 读写
  • 使用close()函数能否实现半关闭?
  • 不能。使用dup2函数可以复制一个文件描述符fd指向和sfd一样的内容,如果使用close(fd)关闭了对内核缓冲区的读写,但是还存在一个文件描述符sfd可以读写内核缓冲区,也就是说通信依然可以进行,这样并不能实现真正的半关闭。使用shutdown函数可以实现半关闭,是因为shutdown(fd, SHUT_RD)虽然在函数中只对fd关闭了读,但是它实际上是将缓冲区的读给关闭了,所有文件描述符(不管有多少个),都不能再读缓冲区了。

在使用套接字通信时,可以使用netstat命令捕捉进程状态或使用netstat查看网络相关状态信息,netstat的常用参数如下:

  • -a (all)显示所有选项,默认不显示LISTEN相关进程,不加-a就不显示LISTEN进程。
  • -p 显示建立相关链接的程序名。
  • -n 拒绝显示别名,能显示数字的全部转化成数字。
  • -t (tcp)仅显示tcp相关选项。
  • -u (udp)仅显示udp相关选项。
  • -l 仅列出有在 Listen (监听) 的服务状态。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
网络协议
TCP连接释放过程
【8月更文挑战第20天】
81 3
|
3月前
|
网络协议 算法 Linux
|
5月前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
6月前
|
网络协议 Linux
Linux网络编程(TCP状态转换关系)
Linux网络编程(TCP状态转换关系)
59 0
|
网络协议
TCP状态转换图
TCP状态转换图 注:主动、被动 与 服务器、客户端没有明确的对应关系。 这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。
1908 0
|
网络协议
TCP协议的状态
TCP协议的状态
116 0
|
网络协议 网络架构
TCP和UDP之间的区别
TCP和UDP区别 文章转自TCP和UDP区别 - TCP UDP 是否连接 面向连接 面向非连接 传输可靠性 可靠的 不可靠的 应用场合 传输大量的数据 少量数据 速度 慢 快 OSI 和 TCP/IP 模型在传输层定义两种传输协议:TCP(或传输控制协议)和 UDP(或用户数据报协议)。
2799 0
|
网络协议
分析几种TCP状态转换中的非正常转换
  1、服务器从listen状态变成close状态的原因:   服务器在监听端口的时候,此时有些资源加载的有问题导致服务没开启,此时服务器会从listen状态变成closed状态。
968 0
|
网络协议
《UNP》学习之TCP状态转换
CLOSED:TCP起始状态 LISTEN:绑定端口后进入listen状态,一般是服务端 SYN_SENT:发送SYN连接请求,主动打开连接的一方进入SYN_SENT SYN_RCVD:接收到SYN连接请求后进入SYN_RCVD,同时发送SYN,ACK。
1246 0