当前位置:网站首页>关于TCP连接三次握手的详细总结
关于TCP连接三次握手的详细总结
2022-06-25 03:58:00 【生活甜甜好运连连】
三次握手的过程:
开始时客户端状态:CLOSED 开始时服务器状态:LISTEN | 第一次握手 | 第二次握手 | 第三次握手 |
From A to B | 客户端 → 服务器 | 服务器 → 客户端 | 客户端 → 服务器 |
状态 | 客户端: CLOSED → SYN_SENT | 服务器: LISTEN→ SYN_RCVD | 客户端: SYN_SENT → ESTABLISHED 服务器收到ACK报文后: SYN_RCVD → ESTABLISHED |
报文名字 | SYN连接请求报文 | SYN-ACK连接确认报文 | ACK报文 |
发的啥 (TCP标志位) | SYN = 1, ACK = 0 初始序号(ISN):seq = x | SYN = 1,ACK = 1 确认号=客户端初始序列号(ISN)+ 1: ack = x + 1 seq = y | ACK = 1 确认号=服务器初始序列号(ISN)+ 1:ack = y + 1 seq = x + 1(客户端初始seq = x,发送一个SYN报文后消耗掉一个序号,所以这一次是第二个报文段,序号是x + 1) |
消耗序号么? | 消耗1个序号 | 不消耗 | 如果携带数据,则消耗。 如果不携带数据就不消耗。 |
表示啥 |
| 表示服务器已经收到了客户端的SYN | 表示客户端已经收到服务器的SYN。
|
报文能否携带数据? | 不能 | 不能 | 能 |
半连接队列和全连接队列 |
| 服务器端收到客户端的SYN-ACK连接确认报文后,此时服务器处于SYN_RCVD状态,双方还没有完全建连接,服务器将此状态下的连接请求放在半连接队列中。 如果 SYN 半连接队列已满,只能丢弃连接吗? 并不是这样。 开启 syncookies 功能就可以在不使用 SYN 队列的情况下成功建立连接。syncookies 是这么做的:服务器根据当前状态计算出一个值,放在己方发出的 SYN+ACK 报文中发出,当客户端返回 ACK 报文时,取出该值验证,如果合法,就认为连接建立成功。 | 服务器端收到客户端发送的ACK确认后,完成三次握手,TCP连接建立。建立的连接就放到全连接队列中。 当全连接队列满了就可能出现丢包现象。 |
握手失败怎么办? | 客户端发送 SYN 开启了三次握手,之后客户端连接的状态是 SYN_SENT,然后等待服务器回复 ACK 报文。 正常情况下,服务器会在几毫秒内返回 ACK,但如果客户端迟迟没有收到 ACK 会怎么样呢? 客户端会重发 SYN,重试的次数由 tcp_syn_retries 参数控制,默认是 6 次。 | 当第三次握手失败时,服务器并不会重传ACK报文,而是直接发送RST报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。 | |

为什么需要三次握手?(三次握手的目的是什么?能不能用两次握手达到同样的目的?)
| 第一次握手 | 第二次握手 | 第三次握手 |
三次握手的目的: | 1.确认双方的接收能力和发送能力是否正常 2.指定初始化序列号,为后面的可靠性传输做准备。 | ||
进行的操作 | 客户端发包,服务端收到包 | 服务器发包,客户端收到包 | 客户端发包,服务端收到包 |
谁,得出什么结论? | 服务器知道,客户端的发送能力和服务器的接收能力正常。 | 客户端知道,客户端的接收发送ok 服务器的接收发送ok | 服务器知道,客户端的接收能力和发送能力ok,服务器的接收和发送能力ok
|
因此需要三次握手才能确认双方的接收和发送能力是否正常。 | |||
三次握手过程中可以携带数据吗?
只有第三次握手的时候可以携带数据。
为什么这样?
如果第一次握手可以携带数据,会让服务器更加容易收到攻击。
如果第一次握手可以携带数据,如果有人恶意攻击服务器,可以在第一次握手中的 SYN连接请求报文 中放入大量数据。因为攻击者不关心服务器的发送和接收能力是否正常,当客户端疯狂重复发送 SYN连接请求报文,会让服务器花费很多时间空间来接收这些报文。
第三次握手,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。
什么是SYN(同步序列号:Synchronize Sequence Numbers)攻击?
SYN攻击就是客户端在短时间内伪造大量不存在的IP地址,并向服务器不断发送 SYN连接请求报文 ,服务器回复确认包,并等待客户端确认。由于源地址不存在,因此服务器要不断重发 SYN-ACK连接确认报文 直至超时。这些伪造的SYN包将长时间占用 半连接队列 ,导致正常的SYN连接请求报文因为队列已满而被丢弃,从而因此网络拥塞甚至系统瘫痪。
如何检测SYN攻击?或者说SYN攻击的表现是什么?
当在服务器上看到大量的半连接状态,而且源IP地址是随机的,基本可断定这是一次SYN攻击。
常见的防御SYN攻击的方法有哪些?
(1)缩短超时时间(SYN Timeout)
(2)增加最大半连接数
(3)过滤网关防护
(4)SYN cookies技术
参考博文:https://yuanrengu.com/2020/77eef79f.html
边栏推荐
- Openmmlab environment configuration
- IntStream API介绍
- Cesium 拖拽3D模型
- Laravel document sorting 3. CSRF protection
- SEO的5大关键指标:排名+流量+会话+停留时长+跳出率
- numpy np tips: numpy数组的squeeze等处理
- SQL, CTE, FLG CASE问题
- Shutter fittedbox component
- Development of trading system (x) -- fix agreement
- Exercise: how difficult is it to simulate the blessing lottery two-color ball - China 500W grand prize? Just run the code.
猜你喜欢

The 5th series of NFT works of missing parts was launched on the sandbox market platform

小心被偷脸!天天用的人脸识别风险原来这么多?

navicat可不可以直接操作安卓数据库SQLite

95% of programmers fish here

UCLA | 用于黑盒优化的生成式预训练

讲座记录《多种空间大地测量技术的数据处理方法和应用》

智慧风电:数字孪生 3D 风机智能设备运维

数字时代的“文艺复兴”?起底数字藏品,让人欢喜让人愁

cesium 图形标注圆形、正方形、多边形、椭圆等

2. play the chromatic harmonica
随机推荐
SEO的5大关键指标:排名+流量+会话+停留时长+跳出率
Exercise: how difficult is it to simulate the blessing lottery two-color ball - China 500W grand prize? Just run the code.
驻波比计算方法
Doubts about judging the tinyint field type of MySQL
Detailed explanation of flex attributes in flex layout
Numpy NP tips: squeeze and other processing of numpy arrays
Laravel document sorting 6. Response
PHP code audit 1 - php Ini
General steps for QT compiling database plug-ins
Development of trading system (VI) -- HFT high frequency trading
DAP data scheduling function improvement description
Although the Internet in the traditional sense has long ceased to exist, this does not mean that the Internet has long disappeared
【LeetCode】148. 排序链表
"Grammar sugar" -- my new programming knowledge
Laravel document sorting 11. System architecture
kenlm
Shutter fittedbox component
"Comment positionner l'industrie" dans la planification industrielle locale / parc
Read lsd-slam: large scale direct monolithic slam
Watch out for the stolen face! So many risks of face recognition used every day?