tcp的几个半状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcp的几个半状态相关的知识,希望对你有一定的参考价值。
参考技术A当TCP连接中 A 向 B 发送FIN请求关闭,另一端B回应ACK之后,B没有立即发送FIN给A,A处于半连接状态,此时A可以接收B发送的消息,但是A已经不能再向B发送消息。
发送在三次握手中。
如果A向B发起连接,B也按照正常情况响应了,但是A不进行三次握手,这就是半连接。
半连接攻击 :半连接,会造成B分配的内存资源就这么一直耗着,直到资源耗尽(SYN攻击)
如果一方关闭或者异常关闭(断电,断网),而另一方并不知情,这样的连接称之为半打开。
处于半打开的连接,如果双方不进行数据通信,是发现不了问题的;只有再次通信时才会知道这个连接处于半打开状态。
如:A和B连接,B异常关闭了,A并不知道B关闭了,直到A给B发送消息B无响应,这时A才知道B出了异常。
解决办法 : 心跳机制 ,A隔一段时间给B发 特定消息 ,B收到这个 特定消息 后,回复A 特定消息(RST包) ,A如果没收到RST包,就说明需要重新建立连接了。
TCP的几个状态TIPS:
TIPS
状态
flags list:SYN, FIN, ACK, PSH, RST, URG.
##NOTE
SYN:建立连接的握手信号,小包;
FIN:关闭连接,发送方字节流结束,与SYN不可能同时为1;
ACK:表示响应;
PSH:表示有 DATA数据传输
RST表示连接重置。
URG(紧急位):设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义。
URG=1,表示紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指向字节就是紧急数据)不进入缓冲区
如果tcp的time_wait过多怎么办:
- 改小tcp_tw_max_buckets,改小允许tcp sockets的最大数量;
- 开启net.ipv4.tcp_tw_reuse=1. 允许将time_wait的sockets用于新的tcp连接;
- 开启tcp_tw_recycle表示开启tcp对time_wait的sockets的回收;
- 开启tcp_syncookies防止tcp的攻击,开启连接TCP syn的连接缓存
- 修改默认tcp_fin_timeout的默认时间,默认60,改小点,影响fin_wait2,该状态比较少
以上是关于tcp的几个半状态的主要内容,如果未能解决你的问题,请参考以下文章
TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)