Last active
August 29, 2015 14:07
-
-
Save parachvte/e68fb913a4e9291ab034 to your computer and use it in GitHub Desktop.
[Network Programming] Homework 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 1、编写一个程序判断当前系统的字节顺序。 | |
| 2、请编写一个程序输出以下变量的字节表示(由低位到高位),需要给出16进制表示的输出结果。 | |
| float a = 2.3; | |
| long b = 1; | |
| double c = 1.0; | |
| struct st{ | |
| int num; | |
| char name[2]; | |
| } s; | |
| 3、请结合本课程介绍内容阐述SYN flooding攻击的原理,并提出抵御的方法? | |
| Deadline: Oct 20, 2014 |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
3、请结合本课程介绍内容阐述SYN flooding攻击的原理,并提出抵御的方法?
SYN flooding是最常见的DoS/DDoS攻击,主要利用了TCP三次握手的设计/缺陷:
『背景知识1』通常
listen()system call的函数是这样的:int listen(int socket, int backlog);,该函数告诉Kernel我们要在socket这个socket descriptor监听连接。『背景知识2』TCP三次握手流程:客户端发送SYN请求,服务端发送SYN/ACK应答,然后客户端再发送ACK,数据传送开始。
『背景知识3』在三次握手完成、数据传送之前(在编程上来讲是
accept()被调用之前),需要有个地方来保存这些或者处于「SYN Received」状态或者处于「ESTABLISHED」状态的连接,这个地方就是backlog queue,而上面listen()函数里的参数backlog就是指这个queue的大小。关于backlog可以看看这篇文章,通过查查文档也可以知道在Unix上,backlog的最大取值是128。『攻击原理』攻击者使用肉机往攻击目标的主机发送大量SYN请求,之后会收到目标主机的SYN/ACK应答,这时候肉机不再往目标主机发ACK。那么目标主机的backlog queue一会儿就会填满了各种「SYN Received」状态的连接,没有办法再接受新的连接,out of service了。
『抵御方法』常见抵御方法:
accept()掉。所以当backlog很小,或者攻击速度足够快的时候,该方法很容易爆掉。参考资料: