蓝盟IT小贴士,来喽!
1 .介绍TCP连接的三次握手? 问题:为什么TCP需要握手三次?
三次握手:
第一步: a向b发送SYN消息,表示想建立连接。
步骤2:b在接收到来自a的分组后,在SYN中知道是建立连接的请求,发送ACK确认,因为是TCP的全双工模式,所以b应该向a发送SYN消息,表示想建立与a的连接。
步骤3 :当a收到b发送的SYN消息时,a向b发送ACK,表示a收到了b的SYN。
追问:
保证双方都有接收和发送消息的能力。
防止请求超时导致脏连接。
由于消息的生存时间可能超过TCP请求的超时时间,因此可以通过两次握手建立连接。 a的消息因某种问题而滞留在网络上,如果消息超时而断开连接,则该超时连接被转发给b、b,a视为创建连接的新请求,a知道这是超时连接,所以b的如果a等待发送数据,b的资源也会浪费。
2 .介绍切断TCP的四次挥手吗? 问题:为什么挥动TCP要四次?
挥手四次:
第一步: a向b发送FIN和ACK信息,表示想切断。
第二步: b收到来自a的请求后,发送ACK以确认断开。
步骤3 :此时b处于半连接状态,b发送FIN和ACK请求切断与a的连接。
步骤4:a接收到从b发送的断开请求时,发送ACK以确认断开。
追问:
允许传输所有数据。
保证所有连接都被切断需要四次。
3 .为什么连接时是3次,挥手时是4次?
一问:
(1)假设连接时为2次,a滞留在网络上的消息随时间被转发给b,b确认该连接。 b单方面确立连接,a废弃b的确认数据消息。 b继续等待a发送数据,浪费b资源。
官方说明:
两次:不能。 为了防止失效。
(2)我们知道三次。 双方已经建立了连接,完全不需要四次。
两个问题:
允许传输所有数据。
a发送FIN后,b可能正在向a传输数据,因此不会立即关闭,在数据全部传输后发送ACK意味着确认关闭。
4. TCP的syn攻击过程? 追究:如何防御?
攻击原理:
b接收到SYN消息后,将相应的半连接记录添加到队列中,然后等待握手包的接收,如果握手成功,则从队列中删除该半连接记录。 或者,如果b没有收到a的确认包,请不要在超时之前从半连接队列中删除此记录。服务器的TCP协议栈中存储的半连接记录有限,服务器收到SYN型DOS攻击时队列很快就满了,客户端在短时间内伪造了大量不存在的IP地址,向服务器发送SYN消息,服务器等待客户端确认的这些伪造的SYN数据包长时间占用未连接队列,放弃正常的SYN请求,目标系统运行缓慢的严重者引起网络拥塞和系统瘫痪,服务器然后接受新的网络连接,
防御:
增加队列SYN的最大数连接数,在linux中最大连接数为256。
缩短半连接时的超时时间
过滤可疑地址。
利用SYN cookie防御DOS攻击
SYN Cookie用一个Cookie响应TCPSYN请求,在通常的TCP连接中服务器接收到一个SYN分组时返回一个SYN-ACK分组,在半开放连接状态下等待最后返回的ACK分组。 服务器用一个数据空间描述所有未解决的连接,但由于此数据空间的大小有限,攻击者将填充此空间,当服务器在SYN Cookie运行期间收到SYN包时,他将返回SYN -ACK包。 这个包的ACK序列号是加密的,是通过TCP连接的源地址和端口号。 如果客户端返回了ACK数据包,服务器将重新计算Cookie,以确定它是否是上一个SYN-ACK返回的数据包。 如果是,服务器可以直接进入TCP连接状态,打开连接。 这样服务器就可以避免等待半开放连接。
文/上海蓝盟 IT外包专家