day07
本章目标
TCP
11种状态- 连接建立三次握手、连接终止四次握手
TIME_WAIT
与SO_REUSEADDR
SIGPIPE
ACK、SYN和FIN
参考文档:
https://zhidao.baidu.com/question/27114298.html
ACK
:是一种确认应答,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。SYN
:攻击属于DOS
攻击的一种,它利用TCP协议
缺陷,通过发送大量的半连接请求
,耗费CPU和内存资源。是最常见又最容易被利用的一种攻击手法。FIN
:是用来扫描保留的端口,发送一个FIN
包(或者是任何没有ACK或SYN标记的包)到目标的一个开放的端口,然后等待回应。许多系统会返回一个复位标记。
TCP 11种状态
貌似有点不对啊,不是说是11种状态吗???怎么只有10种,莫非打错字了???NO!!!NO!!!NO!!!
第十一种状态为:
CLOSING
关闭请求由双方都可以主动的发起,图中为客户端发起的中断连接,也可以是服务器发起中断连接。
TIME_WAIT
:保留两倍的MSL
时间。参考:MSL,即 Maximum Segment Lifetime,一个数据分片(报文)在网络中能够生存的最长时间,在RFC793中定义MSL通常为2分钟,即超过两分钟即认为这个报文已经在网络中被丢弃了。对于一个TCP连接,在双方进入TIME_WAIT后,通常会等待2倍MSL时间后,再关闭掉连接,作用是为了防止由于FIN报文丢包,对端重发导致与后续的TCP连接请求产生顺序混乱,具体原理这里就不详细解释了,
参考链接:
https://blog.csdn.net/qwertyupoiuytr/article/details/71436967
CLOSING状态
如果客户端和服务器双方同时关闭
close
时,会产生此状态,建议参考连接。参考文档:
验证查看ESTABLISHED、FIN_WAIT2状态
1 | [pip@localhost code]$ netstat -an | grep tcp | grep 6000 |
SIGPIPE信号
往一个已经接收
FIN
的套接字种写是允许的,接收到FIN
仅仅代表对方不再发送数据在收到
RST
段之后,如果再调用write
就会产生SIGNPIPE
信号,对于这个信号的处理,我们通常忽略即可signal(SIGPIPE, SIG_IGN);
参考文档: