如果 TCP 协议中三次握手不携带序列号,会造成什么样的后果

之所以需要三次握手,其实就是要双方相互确认彼此能够通信。
一般要与对方确认可以通信,就要确认自己能够跟对方通信(1),且能够收到对方的通信(2),反过来对方也能够和自己通信(3),且能收到自己的通信(4)。基于这一点,流程就简化为3次握手通信。
首先,client发送一个SYN=1,seq=X(X随机)到server,server收到这个消息,则确认了client能够与server通信这件事(1),这时,server将SYN=1,ACK=1,ack=X+1,seq=Y(Y随机)发送给client;client收到这个消息,则确认了client能够收到对方的通信(2)和server能够与client通信这件事(3),最后client发送ack=Y+1,ACK=1返回给server,server收到后,确认了server能够收到client的通信这件事(4)。至此,双方的通信确认过程完成且建立了连接。(总结上面的发送信息,简单的说就是:SYN:表示一个想要连接对方的请求;ACK、ack表示一个答复对方连接请求的响应;中间随机数seq:请求连接的信物)
这里的三次握手重点每一次都有关联,seq随机一个数发送给对方,对方收到后用ack=seq+1的方式表示针对上一个通信的准确回复。如果不用序列号的话,client在最后一步的发送中可以发送任意数据给server,确认最后的连接过程且最终建立连接。由于client可以随意伪造任意多的ip,那么最终server建立了很多不存在且无用的TCP连接。
但是这个机制同样存在一个问题,就是SYN攻击。client伪造大量随机ip,向server发送SYN=1,seq=X的第一步的连接请求,server给不存在的ip发送SYN=1,ACK=1,ack=X+1,seq=Y响应,由于client的ip不是实际存在的,所以server发出的消息不能到达,server不断的重试直到超时,那么server的连接队列会被占满,正常的TCP握手请求就无法到达server,影响了正常的连接请求,导致网络阻塞或者server系统瘫痪。
这种SYN攻击通过命令netstat -nap | grep SYN_RECV可以查出来.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值