cs架构
osi七层
理解网络通信的原理
两个教室的电脑的软件要沟通的流程
通过ip与端口可以定位到目标位置指定机器的一个具体的应用程序
ip与网卡绑定在一起
有ip可对应上mac信息最终可实现一台电脑的定位
了解socket 所在的位置
》socket是什么
》套接字的发展史与分类
套接字的工作流程
》服务端的模拟 tcp
图中漏了一个conn断开
》完整的tcp客户端,服务端流程
》服务端代码
》客户端代码
》服务端可能出现的问题
当服务端关闭后马上又重开,可能出现这个问题
linux系统下,会有的
原因是
套接字关闭后,会有一段时间,套接字完成断开的操作,有一小段时间的延迟
这段时间的延迟,是tcp套接字在做四次挥手
三次握手,与四次挥手
》了解syn洪水攻击
TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
》解决办法
通过半链接池
这个好比等候区(银行取钱,都围在窗口,服务会崩)