TCP/IP的三次握手
TCP Flags
URG 紧急指针标志
ACK 确认序号标志
PSH push标志
RST 重置连接标志
SYN 同步序号,用于建立连接过程
FIN finish标志,用于释放连接
为什么要通过三次握手来建立连接呢?
如何给同行解释,如何给外行解释呢?
给外行解释建议这么说:
A与B 两台机器对话,A:B,你听的到我说话吗?B:我听得到,你听得到我说话吗?A:我听得到,我们现在开始交流吧。
给同行,或者给面试官回答,千万不要这么回答,会显得你很low。专业一点可以这么回答。
是为了初始化Sequence Number 的初始值
首次握手的隐患 --- SYN 超时
Server 收到Client 的SYN ,回复SYN-ACK 的时候 未收到ACK确认,此时Server不断重试直到超时,linux 下默认等待63秒才断开。
针对这样的一个类似漏洞与隐患,针对SYN - Flood 的防护措施
SYN 队列满时,通过tcp_syncookies 参数回发SYN Cookie,若为正常连接,则Client会回发SYN Cookie,直接建立连接。
如果这个时候不是恶意破坏,而Client出现了故障怎么办。
TCP 保活机制
向对方发送保活探测报文,如果未收到响应则继续发送,尝试次数达到保活探测次数未收到响应,则中断连接。