accept函数与syn攻击

一:accept函数
accept函数用于从已完成连接队列中的队首(队头)位置取出-项’返回给进程(服务器程序),如果已完成连接队列是空的,accept函数调用就会卡在这里等待(休眠)直到已完成连接队列中有一项内容时才会被唤醒。
所以正常编写程序时,需要尽快调用accept把已完成连接队列中的项取走。另外,也应该很清楚的是,accept返回的是-个套接字(socket)’该套接字代表已经用
三次握手建立起来的TCP连接(因为accept是从巳完成连接队列中取到的连接项)

换句话说’服务器程序必须严格区分2个套接字
(1)监听9000端口的套接字叫监听套接字,只要服务器程序在’该套接字就应该一直存在,目的是随时准备接受(监听到)客户端的连接.
(2)当有客户端连接’操作系统会为每个成功完成三次握手的客户再创建一个套接字(当然是—个已连接套接字)’这个套接字其实就是accept返回的套接字也
就是从已完成连接队列中取得的一项。随后服务器用accept返回的套接字和客户端进行通信。

思考如下说法:
1)如果已完成连接队列和未完成连接队列之和达到了listen所指定的第2参数,即队列满了,此时客户端再发送来-个SYN连接请求’服务器端会怎样反应呢?
服务器端会忽略该SYN不给回应,客户端发现SYN没有回应’过一会就会重发这个SYN包重发几次如果都没回应’就认为连接失败(connect失败)
(2)三次握手完成,连接放到了已完成连接队列中等着accept函数从已完成连接队列中把连接取走.试想当accept还没来得及取走这个连接的时候’因为三次握手已经建立了,客户端如果此时发送数据过来’该数据就会被保存在已经连接的套接字的接收缓冲区里,该接收缓冲区的大小就是能接受的最大数据量。

二:syn攻击
SYN攻击英文叫作synflood,这是一个很恶心的攻击,也是一些黑客常用的手段之一,是一种典型的利用TCP/IP设计的一些弱点进行攻击的手段。

如果某个恶意的黑客通过一些特殊手段,伪造自己的IP地址和端口(源端口源IP地址全部是伪造的),不停地给服务器发送SYN包(注意,该黑客只给服务器发送SYN包,也就是三次握手中的第1次握手包,不发送的第3个包’即ACK包),就会导致服务器端未完成连接队列中的条目越来越多,当未完成连接队列和已完成连接队列满了’服务器就会忽略后续再发来的SYN包,无法建立正常的TCP连接了,因为正常TCP连接的三次握手的第1次握手包(SYN包)被忽略了,换句话说,合法的用户无法得到服务了,这就是拒绝服务
攻击的一种手段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值