2.迭代型服务器程序编写,并给出客户端,结合这一模式详细介绍Berkeley套接字的使用
3.介绍SYN攻击的原理
TCP连接建立,传输数据,连接释放上层图解。
结合此图来说明SYN攻击。SYN攻击发生在TCP连接的第二个阶段,服务器确认客户端同步信息(SYN),用32位确认号(ACK)确认SYN信息。
知道了SYN攻击的原理,那么如何进行SYN攻击?我们可以不断的发送TCP连接请求,同时把自己隐藏好,不让服务器发现。可以伪造IP,服务器根据IP来寻找客户端,由于IP是伪造的,所以TCP第二次握手会失败。伪造大量的IP可以大幅度消耗系统资源。从技术的角度上说,我们可以利用原始套接字伪造大量IP,从而构造大量数据包,利用原始套接字构造IP数据与服务器进行第一次握手,服务器忙于在处理队列中的连接,从而消耗系统资源。SYN攻击是TCP协议的bug造成,无法避免,除非重新修改TCP协议,但是这样子做不显示。
接下来是学习编写的代码,包括一个迭代型服务器和一个简易客户端,基本上每个编写网络程序的朋友第一次编写网络程序都类似下面的代码
服务器端:server.c
#include#include#include#include#include#include#include#defineLEN(str)(sizeof(char)*strlen(str))intmain(intargc,char**argv){/*variable*/intsock_fd;structsockaddr_inserver;charbuff[1024];intret;/*socket*/sock_fd=socket(PF_INET,SOCK_STREAM,0);if(sock_fd<0){perror("socketfailed");exit(1);}server.sin_family=PF_INET;server.sin_port=htons(5000);if(inet_pton(PF_INET,"127.0.0.1",&server.sin_addr)<0){perror("inet_pton");exit(1);}/*connect*/if((ret=connect(sock_fd,(structsockaddr*)&server,sizeof(server)))<0){perror("connectfailed");exit(1);}/*sendbuff*/sprintf(buff,"HelloWorld");if((ret=send(sock_fd,buff,LEN(buff),0))<0){perror("send");exit(1);}printf("sendmsg\n");/*close*/close(sock_fd);return0;}还是来个图,把套接字API之间的关系与TCP连接过程对应上
接下来将复习迭代模型中,连接过程中的多种异常情况。并将复习情况记录blog。
最后,上传几个思维导图,关于Linux网络模块的,我一直坚信图片比文字,表格都要直观
作者水平有限,有错误的地方可以给我留言可以修改,以免误人子弟