TCP状态转移要点
TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。
1、LISTENING状态
FTP服务启动后首先处于侦听(LISTENING)状态。
2、ESTABLISHED状态
ESTABLISHED的意思是建立连接。表示两台机器正在通信。
3、CLOSE_WAIT
对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭
4、TIME_WAIT
我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。
1. socket的状态
1.1 状态说明
CLOSED 没有使用这个套接字[netstat 无法显示closed状态] LISTEN 套接字正在监听连接[调用listen后] SYN_SENT 套接字正在试图主动建立连接[发送SYN后还没有收到ACK] SYN_RECEIVED 正在处于连接的初始同步状态[收到对方的SYN,但还没收到自己发过去的SYN的ACK] ESTABLISHED 连接已建立 CLOSE_WAIT 远程套接字已经关闭:正在等待关闭这个套接字[被动关闭的一方收到FIN] FIN_WAIT_1 套接字已关闭,正在关闭连接[发送FIN,没有收到ACK也没有收到FIN] CLOSING 套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认[在FIN_WAIT_1状态下收到被动方的FIN] LAST_ACK 远程套接字已关闭,正在等待本地套接字的关闭确认[被动方在CLOSE_WAIT状态下发送FIN] FIN_WAIT_2 套接字已关闭,正在等待远程套接字关闭[在FIN_WAIT_1状态下收到发过去FIN对应的ACK] TIME_WAIT 这个套接字已经关闭,正在等待远程套接字的关闭传送[FIN、ACK、FIN、ACK都完毕,这是主动方的最后一个状态,在过了2MSL时间后变为CLOSED状态]
1.2 状态变迁图
摘自《UNIX 网络编程 卷1:套接字联网API》 P35
2. TCP的三次握手和四次挥手
2.1 总结图
左边为客户端的状态转变,后边为服务器的状态转变
2.2 说明
2.2.1 connect返回-1
errno=110(ETIMEDOUT),当服务器端网线拔了的时候,客户端发送SYN过去就会收不到ACK,因此就会出现这个错误,1分钟内就会返 回这个错误。
errno=111(ECONNREFUSED),当服务器未listen时,就会报这个错
2.2.2 ESTABLISHED不一定真的establish
会出现这种情况:client为ESTABLISHED状态而server为SYN_REVD状态。
这是因为LINUX不像其他操作系统在收到SYN为该连接立马分配一块内存空间用于存储相关的数据和结构,而是延迟到接收到client的ACK,即三次握手 真正完成后才分配空间,这是为了防范SYN flooding攻击。 如果是这种情况,那么就会出现client端未ESTABLISHED状态,server为SYN_RECV状态。
并且server的SYN_RECV状态在一定时间后会消失,client的established状态也会消失。这是因为server在SYN_RECV状态时,会像client发送多次的SYN+ACK(因为他以为自己的这个包对方没收到),发送的次数定义在/proc/sys/net/ipv4/tcp_synack_retries中,默认为5.在发送5次之后还没有收到ACK,就将其回收了,所以用netstat查看就看不到这个SYN_RECV状态了。并且会像client发送RST信号。这就会导致client的这种半连接最后也会消失。这个可以通过tcpdump抓包得到(最好知道src这样看到的包比较集中)。
相关推荐
listening_task_1_(2010-3-3)西大
Japanese_Core_2000_Step_01_Listening_Sentence_Vocab__Images
“ 学习英语-听力和口语 ”是PORO正在进行的自学应用程序之一,他们想要轻松有效地说英语。 每天有150个对话对话框,包括从问候,介绍,购物,商务对话,家庭谈话等各种主题的课程列表,适合从初学者到中级以及...
Listening_练习1
U4 Vieing & Listening_srt.wmv
介绍了如何快速提高英语听力的实用手段和方法,有利于中国学生在较短的时间内实现听力的突飞猛进。
网络通信过程中,服务器必然提供监听socket响应客户端连接请求,也必然提供连接...linux中为了管理这两类socket提供了两个哈希链表:tcp_listening_hash和tcp_ehash,下面主要分析下监听哈希表,顺带说下连接hash表。
This is going to be a listening socket, dsap must be 0.
(product name, file description, and so on), the time that the process was created, and the user that created it. In addition, CurrPorts allows you to close unwanted TCP connections, kill the process ...
it is listening file
大学英语4 Further Listening原文、文本 听力原文 及答案
仅用于excel文件的监听打印操作,运行前请选确认安装了.net framework 3.5sp1 及office2007
cluster-kafka集群配置端口9091-9093zookeeper端口2181-2183
TCP协议代码,TCP_Socket,TCP_check_port_listening, TCP_Seek_4_elements
rslidar雷达数据转velodyne数据功能包
如果以太网交换机中某个运行 STP 的端口不接收或转发数据,接收并发送 BPDU,不进行地址学习...那么该端口应该处于______状态。 A. Blocking B. Listening C. Learning D. Forwarding E. Waiting F. Disable Answer: B
Q Skills for Success Level 2 Listening and Speaking!
网上各种教程无法解决这个工具提示 not supported not listening问题,这个安装包给出了所有需要的文件,并给出了详细的指引。 绝大多数情况你会安装成功。如果你成功了,或者失败了,请给我评论。大家看评论区。 ...
这文件有效的说明了数据拟合的方法,用处,也能用于数学建模等,是很好的参考文件。
任务4 STP端口状态 0 1 【知识目标】 识记STP为端口定义了五种状态 【能力目标】 能掌握STP端口状态机 【思政目标】 培养学生的工匠精神,提高综合职业素养,树立社会主义职业精神。 课程目标 临时环路问题 当拓扑...