TCP状态转换

简介: 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 (监听) 的服务状态。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
网络协议 Linux
Linux网络编程(TCP状态转换关系)
Linux网络编程(TCP状态转换关系)
23 0
|
12月前
|
网络协议 Java
TCP发送数据、接受数据及TCP通信程序练习
TCP发送数据、接受数据及TCP通信程序练习
112 0
|
网络协议
TCP协议的状态
TCP协议的状态
97 0
|
网络协议
TCP状态转换图
TCP状态转换图 注:主动、被动 与 服务器、客户端没有明确的对应关系。 这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。
1801 0
|
网络协议
分析几种TCP状态转换中的非正常转换
  1、服务器从listen状态变成close状态的原因:   服务器在监听端口的时候,此时有些资源加载的有问题导致服务没开启,此时服务器会从listen状态变成closed状态。
947 0
|
网络协议 API
TCP/IP详解 卷1 第十八章 TCP的建立与终止
第十八章 TCP的建立与终止   tcpdump   Tcpdump可以将网络中传送的数据报完截获下来进行分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息 就有点像Wireshark那个工具一样,只不过是命令行的,这里不作详细分析,直接给个实例:    每行输出格式如下:  源 > 目的:标志 这里的标志就是TCP首部中6个标志比特中的4个,下面是标志中5个字符的含义:   ack和urg将做特殊显示。
1104 0
|
网络协议
《UNP》学习之TCP状态转换
CLOSED:TCP起始状态 LISTEN:绑定端口后进入listen状态,一般是服务端 SYN_SENT:发送SYN连接请求,主动打开连接的一方进入SYN_SENT SYN_RCVD:接收到SYN连接请求后进入SYN_RCVD,同时发送SYN,ACK。
1064 0
|
网络协议 应用服务中间件 nginx
|
网络协议 Perl 移动开发