博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如果 TCP 协议中三次握手不携带序列号,会造成什么样的后果
阅读量:2443 次
发布时间:2019-05-10

本文共 933 字,大约阅读时间需要 3 分钟。

之所以需要三次握手,其实就是要双方相互确认彼此能够通信。
一般要与对方确认可以通信,就要确认自己能够跟对方通信(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可以查出来.

转载地址:http://gmnqb.baihongyu.com/

你可能感兴趣的文章
SQL Server调整以实现更快的查询
查看>>
pl/sql打印_PL / SQL程序打印图案
查看>>
c++stl和std_C ++ STL多集容器– std :: multiset
查看>>
pl/sql查找表_PL / SQL程序查找三个数中的最大值
查看>>
Mac的Movavi屏幕捕获–录制视频的简单解决方案
查看>>
stl 容器适配器_C ++ STL堆栈容器适配器– std :: stack
查看>>
如何开始虚拟现实(VR)开发?
查看>>
Fresco Android教程
查看>>
c++中将字符串转化为数字_在C和C ++中将十进制数转换为罗马数字
查看>>
unity 粒子系统反弹_零反弹-最佳电子邮件验证系统
查看>>
rail_deviceid_C和C ++中的Rail Fence密码程序[加密和解密]
查看>>
数字转日期 pl/sql_交换两个数字的PL / SQL程序
查看>>
stl set容器_C ++ STL设置容器– std :: set
查看>>
HTML和HTML5之间的区别
查看>>
阿姆斯壮数_阿姆斯壮编号的PL / SQL程序
查看>>
如何使用Android Studio将网站转换为Android App
查看>>
c++ stl容器 map_C ++ STL映射容器– std :: map
查看>>
改善网站安全性的5种方法
查看>>
c++stl和std_C ++ STL转发列表容器– std :: forward_list
查看>>
Android Google Analytics(分析)集成教程
查看>>