TCP状态转换

三次握手

四次挥手

TCP状态转换

 TCP的11种状态:

1. CLOSED:表示初始状态,在连接关闭或超时的时候变成此状态。

2. LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接。服务端调用socket、 bind、listen函数后就进入此状态。被动状态(等待客户端来连接)。

3. SYN_RCVD:表示接受到了SYN报文,服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。

4. SYN_SENT: 当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。

5. ESTABLISHED:客户端和服务器端在完成三路握手后,两者最终进入的状态,表示连接已经建立成功,可以传送数据了。对于服务器端来说,就是在SYN_RCVD状态时,收到了来自客户端的ACK。于是SYN_RCVD->ESTABLISHED;对于客户端来说,就是在SYN_SENT状态时,收到了来自服务器端的SYN+ACK分节,状态从SYN_SENT->ESTABLISHED,然后发送ACK。

6. FIN_WAIT_1: 主动关闭的一方发送FIN,从ESTABLISHED -> FIN_WAIT_1

7. FIN_WAIT_2: 主动关闭的一方,接收到对方的FIN、ACK,进入此状态。由此不能再接收对方的数据。但是能够向对方发送数据

8. CLOSE_WAIT: 接收到FIN以后,被动关闭的一方进入此状态。具体动作时接收到FIN,同时发送ACK。过会还要发送FIN表示自己也要关闭了,中间的这段就可以叫做CLOSE_WAIT(等待关闭)

9. LAST_ACK:被动方发送FIN,导致CLOSE_WAIT -> LAST_ACK,TCP终止则还需要等待最后一个ACK,所以状态叫做LAST_ACK,等到最后ACK后,LAST_ACK ->CLOSED

10. CLOSING:主动关闭方处于FIN_WAIT_1状态时,接收FIN,则从FIN_WAIT_1 -> CLOSING

        (举一个此种情况的例子,(前提是两者的tcp连接已经建立)当主动关闭方发送FIN(一般是调用close)给被动关闭方,状态从ESTABLISHED -> FIN_WAIT_1,如果是正常TCP终止,则主动方会收到一个ACK,状态从 FIN_WAIT_1 -> FIN_WAIT_2,然后一段时间后被动方会继续发送FIN给主动方,主动关闭方收到FIN后状态从FIN_WAIT_2 -> TIME_WAIT(2msl后超时,状态最终变为CLOSED),这是最正常的情况

        但当主动关闭方处于FIN_WAIT_1时,被动关闭方的FIN先于之前的自己发送的ACK到达,主动关闭方就直接FIN_WAIT_1 -> CLOSING,(其实就相当于同时关闭),然后迟来的ACK到达时,主动关闭方就从CLOSING -> TIME_WAIT)

11. TIME_WAIT三种转化途径

        FIN_WAIT_1 -> TIME_WAIT: 接收到了FIN,ACK;

        FIN_WAIT_2 -> TIME_WAIT: 在正常TCP终止时,这种情况发生,处于FIN_WAIT_2的主动关闭方接收到被动关闭方的FIN,TCP状态发生改变,然后发送ACK;

        CLOSING -> TIME_WAIT: 处于CLOSING 状态的主动关闭端接收到了迟来的ACK;

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:Linux内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。\[2\]为了解决这些缺陷,Linux内核开发人员所做的一件事就是使内核模块可以在运行时加载和卸载,这意味着您可以动态地添加或删除内核的特性。这不仅可以向内核添加硬件功能,还可以包括运行服务器进程的模块,比如低级别虚拟化,但也可以替换整个内核,而不需要在某些情况下重启计算机。\[3\] 根据引用\[1\]和引用\[3\]的内容,Linux内核采用了宏内核的机制,将所有的代码和子系统打包到一个文件中。这意味着内核中的每一个函数都可以访问到内核中的其他部分。同时,Linux内核也支持模块的动态装卸,可以在运行时加载和卸载内核模块,从而动态地添加或删除内核的特性。 关于TCP状态转换的内核原理,具体的实现细节可能涉及到更多的技术细节。但是可以简单地说,TCP状态转换是指TCP连接在不同的状态之间进行转换,例如建立连接、数据传输、连接关闭等。在Linux内核中,TCP状态转换是通过TCP协议栈的实现来完成的。TCP协议栈是Linux内核中的一个子系统,负责处理TCP连接的建立、维护和关闭等操作。具体的实现细节可以参考Linux内核的源代码和相关文档。 总结起来,Linux内核采用了宏内核的机制,将所有的代码和子系统打包到一个文件中,并支持模块的动态装卸。TCP状态转换是通过TCP协议栈的实现来完成的。 #### 引用[.reference_title] - *1* *2* *3* [一文看懂Linux内核!Linux内核架构和工作原理详解](https://blog.csdn.net/qq_40989769/article/details/113388892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值