TCP/IP实现以及常见问题

三次握手连接建立

简单三次握手

其实看图会发现其实是很简单的一个过程

  • 首先,Client会发送一个SYN包,简单情况是SYN发送成功了,然后Client会把这个连接的Socket放入一个Socket等待队列,是Client这边维护的一个队列,,但是如果这里发送失败了,Server如果不给回复,它会按这个间隔去重新发送,3、6、12、24…重试十几次,会返回一个Connect Time out
  • 第二步,Server收到SYN包,然后把这个Socket放入Server这边维护的SYN队列,然后返回SYN+ACK报文,max(64,/proc/sys/net/ipv4/tcp_max_syn_backlog)
  • 第三步Client收到Server发过来的ACK+SYN报文,相当于Client这边来看的话其和Server端的连接完成了,然后会返回一个ACK给Server
  • 第四步正常情况是ACK收到,然后Server端看来建立也连接成功,然后把Socket从维护的SYN队列放入到Accept队列,这样整个连接建立。但是有这样一种情况,Accept队列满了,它没办法加入到Accept,这时候的处理逻辑是按照这个参数来控制的,/proc/sys/net/ipv4/tcp_abort_on_overflow,如果这个参数是1的话,首先它会丢弃ACK,然后返回一个RST,这样的话就需要整个重新建立连接,Client会返回来一个Connection reset by peer。如果这个参数是0的话,那么Server这边会不处理这个ACK,直接丢弃,那么Clinet是怎么知道的呢,其实是在靠Read函数来确定的,Client在确定建立连接之后会紧接着发数据给Server,但是Server还没有建立连接,所以它会不理会,然后会一直重发,直到超时,这时候返回一个Read timeout

三次握手连接建立
1.首先Client需要两次交互就就能够确立连接了,但是Server需要三次才能确定建立连接
2。SYN flood攻击及其防护。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值