[tcp] tcp中11种状态详解

栏目: 服务器 · 发布时间: 6年前

内容简介:前言很早以前,去面试,面试官问我,tcp连接一共有多少种状态以及各状态的含义。我一脸懵逼,我知道一些状态,如LISTEN、TIME_WAIT等,但没有关注过总共有多少种状态,更别说每种状态的意义了,后面为了面试详细看了下tcp协议状态,虽然当时记住了(其实也只是粗略的知道),后面总是会忘记,又去搜索,现在将其记下tcp11中状态及变迁其实基本包含在正常的三次握手和四次挥手中,除开CLOSING

前言

很早以前,去面试,面试官问我,tcp连接一共有多少种状态以及各状态的含义。我一脸懵逼,我知道一些状态,如LISTEN、TIME_WAIT等,但没有关注过总共有多少种状态,更别说每种状态的意义了,后面为了面试详细看了下tcp协议状态,虽然当时记住了(其实也只是粗略的知道),后面总是会忘记,又去搜索,现在将其记下

TCP三次握手和四次挥手

tcp11中状态及变迁其实基本包含在正常的三次握手和四次挥手中,除开CLOSING

tcp正常三次握手

[tcp] tcp中11种状态详解

从图片流程看,正常的三次握手从服务端打开监听监听(LISTEN)->客户端先发起SYN请求->服务端发起SYN及ACK确认->客户端再确认即三次握手TCP连接成功

而三次握手里面也包含tcp其中四种状态及变迁

LISTEN服务端状态,应用程序打开监听端口,处理来自客户端TCP端口的连接请求

SYN_SENT

客户端状态,当客户端通过应用程序connect()连接时,客户端TCP发送SYN请求主动建立连接,此时状态为SYN_SENT

SYN_RECV

服务端状态,当收到客户端SYN请求后,服务端会发送一个SYN连接请求及ACK确认到客户端,再等待对方连接请求确认,这时状态为SYN_RECV,如果发现有很多SYN_RCVD状态,可能受到了SYN FLood的Dos攻击

ESTABLISHED

当客户端回复正确的ack值后,就建立一个打开的连接,客户端和服务端就都进入ESTABLISHED状态,此时便可以PSH数据

tcp正常四次挥手

[tcp] tcp中11种状态详解

从图片流程看,正常的四次握手包含6种tcp状态变迁

如主动发起关闭方为客户端

客户端发送FIN进入FIN_WAIT1 -> 服务端发送ACK确认并进入CLOSE_WAIT(被动关闭)状态->客户端收到ACK确认后进入FIN_WAIT2状态 -> 服务端再发送FIN进入LAST_ACK状态 -> 客户端收到服务端的FIN后发送ACK确认进入TIME_WAIT状态 -> 服务端收到ACK确认后进入CLOSED状态断开连接 -> 客户端在等待2MSL的时间如果期间没有收到服务端的相关包请求,则进入CLOSED状态断开连接

FIN_WAIT1

客户端调用close()关闭连接后,TCP发出FIN请求主动关闭连接,然后进入FIN_WAIT1状态

等待远程TCP连接中断请求或者确认

CLOSE_WAIT

被动关闭状态,TCP接收到FIN后,就发送ack回应客户端的FIN请求,然后就进入了CLOSE_WAIT状态

FIN_WAIT2

半关闭状态,主动关闭端(也就是客户端调用close()后)接收到ack确认后,此时进入FIN_WAIT2状态,该状态下,客户端应用程序依然能接收数据

LAST_ACK

服务端发送确认中断后,也发送FIN关闭请求,然后进入LAST_ACK最后确认关闭状态

TIME_WAIT

在主动关闭端接收到FIN后,TCP就发送ACK,并进入TIME-WAIT状态,该状态持保持由内核参数net.ipv4.tcp_keepalive_time控制时间,默认为2小时,之后主动关闭方也进入CLOSED状态关闭连接

CLOSED

TCP连接关闭,被动关闭端在接收到ack包后,进入CLOSED状态关闭TCP连接

CLOSING状态

CLOSING状态一般较少出现,这种是客户端和服务端同时发起了FIN主动请求关闭。如客户端发送FIN主动关闭,但是没有收到服务端发来的ACK确认,而是先收到了服务端发来的FIN请求关闭连接,所以必须是同时

在进入CLOSING状态后,只要收到了对方对自己发送的FIN的ACK,收到FIN的ACK确认就进入TIME_WAIT状态,因此,如果RTT(Round Trip Time TCP包的往返延时)处在一个可接受的范围内,发出的FIN会很快被ACK从而进入到TIME_WAIT状态,CLOSING状态持续的时间就特别短,因此很难看到这种状态


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C# 6.0本质论

C# 6.0本质论

[美] Mark Michaelis(马克·米凯利斯)、[美] Eric Lippert(埃里克·利珀特) / 周靖、庞燕 / 人民邮电出版社 / 2017-2-1 / 108

这是C#领域中一部广受好评的名作,作者用一种易于理解的方式详细介绍了C#语言的各个方面。全书共有21章和4个附录(其中哟2个附录从网上下载),介绍了C#语言的数据类型、操作符、方法、类、接口、异常处理等基本概念,深入讨论了泛型、迭代器、反射、线程和互操作性等高级主题,还介绍了LINQ技术,以及与其相关的扩展方法、分部方法、Lambda表达式、标准查询操作符和查询表达式等内容。每章开头的“思维导图”......一起来看看 《C# 6.0本质论》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具