当前位置:网站首页>TCP/UDP 通信问题整理
TCP/UDP 通信问题整理
2022-07-01 07:26:00 【chenyfan_】
https://baijiahao.baidu.com/s?id=1693383134922615393&wfr=spider&for=pc
1. 三次握手
2. 四次挥手
3. 为什么是三次握手、四次挥手
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。通俗来说,两次握手就可以释放一端到另一端的 TCP 连接,完全释放连接一共需要四次握手。
4. 服务器保持了大量TIME_WAIT状态
TIME_WAIT是主动关闭连接的一方保持的状态,对于爬虫服务器来说他本身就是“客户端”,在完成一个爬取任务之后,他就会发起主动关闭连接,从而进入TIME_WAIT的状态,然后在保持这个状态2MSL(max segment lifetime)时间之后,彻底关闭回收资源。
TIME_WAIT状态保持的作用
(1)保证可靠的TCP全双工终止
(2)允许旧的重复的数据包在网络中消逝
5. 服务器保持了大量CLOSE_WAIT状态
就是在对方关闭连接之后服务器程序自己没有进一步发出 ACK 信号。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,没有调用 close(),于是这个资源就一直被程序占着;一般是代码编写问题。
6. 如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP 还设有一个保活计时器,显然,客户端如果出现故障,此时处于半打开状态,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为 2 小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
7. ISN (Initial Sequence Number) 是固定的吗
三次握手的其中一个重要功能是客户端和服务端交换 ISN (初始序号,Initial Sequence Number),以便让对方知道接下来接收数据的时候如何按序列号组装数据。
当一端为建立连接而发送它的 SYN 时,它会为连接选择一个初始序号。ISN 随时间而变化,因此每个连接都将具有不同的 ISN。如果 ISN 是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。
8. 三次握手过程中可以携带数据吗
只有第三次握手的时候,是可以携带数据的。但是,第一、二次握手绝对不可以携带数据。
假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据,然后疯狂重复发 SYN 报文的话(因为攻击者根本就不用管服务器的接收、发送能力是否正常,它就是要攻击你),这会让服务器花费很多时间、内存空间来接收这些报文。
简单的记忆就是,请求连接/接收 即 SYN = 1 的时候不能携带数据。
而对于第三次的话,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以当然能正常发送/携带数据了。
9. 半连接队列
服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把这种状态下的请求连接放在一个队列里,我们把这种队列称之为半连接队列。
当然还有一个全连接队列,完成三次握手后建立起的连接就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。
10. SYN 洪泛攻击
SYN 攻击(半连接攻击)就是 Client 在短时间内伪造大量不存在的 IP 地址,并向 Server 不断地发送 SYN 包,Server 则回复确认包,并等待 Client 确认,由于源地址不存在,因此 Server 需要不断重发直至超时,这些伪造的 SYN 包将长时间占用半连接队列,导致正常的 SYN 请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
11. 如果第三次握手丢失了,客户端服务端会如何处理
服务器发送完 SYN + ACK 包,如果未收到客户端响应的确认包,也即第三次握手丢失。那么服务器就会进行首次重传,若等待一段时间仍未收到客户确认包,就进行第二次重传。如果重传次数超过系统规定的最大重传次数,则系统将该连接信息从半连接队列中删除。
注意,每次重传等待的时间不一定相同,一般会是指数增长,例如间隔时间为 1s,2s,4s,8s…
12. tcp rst产生的几种情况
13. 对于 socket 的水平触发和边沿触发模式的选择
- 对于监听的 sockfd,最好使用水平触发模式,边缘触发模式会导致高并发情况下,有的客户端会连接不上。如果非要使用边缘触发,网上有的方案是用while来循环accept()。
- 对于读写的 connfd,水平触发模式下,阻塞和非阻塞效果都一样,不过为了防止特殊情况,还是建议设置非阻塞。
- 对于读写的 connfd,边缘触发模式下,必须使用非阻塞IO,并要一次性全部读写完数据。
14. TCP 通信时的 SIGPIPE、EINTR、EAGAIN
边栏推荐
- Redisson uses the complete solution - redisson official documents + Notes (Part 1)
- MySQL and redis consistency solution
- 微软宣布开源 (GODEL) 语言模型聊天机器人
- Cadence OrCAD capture "network name" is the same, but it is not connected or connected incorrectly. The usage of nodeName of liberation scheme
- 组件的自定义事件①
- Apple账号密码自动填充
- Are there any practical skills for operation and maintenance management
- 继妹变继母,儿子与自己断绝关系,世界首富马斯克,为何这么惨?
- [chapter 72 of the flutter problem series] a solution to the problem that pictures taken in the flutter using the camera plug-in are stretched
- 赌上了绩效,赢了公司CTO,我要搭DevOps平台!
猜你喜欢

Open source! Wenxin large model Ernie tiny lightweight technology, accurate and fast, full effect

The computer has a network, but all browser pages can't be opened. What's the matter?

ctfshow-web355,356(SSRF)

Mysql与Redis一致性解决方案
![[chapter 72 of the flutter problem series] a solution to the problem that pictures taken in the flutter using the camera plug-in are stretched](/img/8d/cf259b9bb8574aa1842280c9661d1e.jpg)
[chapter 72 of the flutter problem series] a solution to the problem that pictures taken in the flutter using the camera plug-in are stretched

C# Newtonsoft. Use of job in JSON

【图像处理】图像直方图均衡化系统含GUI界面

Eigen矩阵运算库快速上手
![[image processing] image histogram equalization system with GUI interface](/img/3b/52c241c48c91dd58300af58478129e.png)
[image processing] image histogram equalization system with GUI interface

redisson使用全解——redisson官方文档+注释(上篇)
随机推荐
Image style migration cyclegan principle
Félicitations pour l'inscription réussie de wuxinghe
Redisson uses the complete solution - redisson official documents + Notes (Part 1)
运维管理有什么实用的技巧吗
Is it safe to buy funds on the brokerage account
Are there any practical skills for operation and maintenance management
Paging in servlets and JSPS
Solution to the problem that objects in unity2021 scene view cannot be directly selected
C# 读写自定义的Config文件
How to create an exclusive vs Code theme
redisson使用全解——redisson官方文档+注释(上篇)
ctfhub-端口扫描(SSRF)
[microservice openfeign] feign's log record
C语言实现【三子棋游戏】(步骤分析和实现源码)
AUTOSAR learning record (1) – ECUM_ Init
LeetCode+ 71 - 75
Unity2021-Scene视图中物体无法直接选中的解决办法
Cadence OrCAD capture "network name" is the same, but it is not connected or connected incorrectly. The usage of nodeName of liberation scheme
[programming compulsory training 3] find the longest consecutive number string in the string + the number that appears more than half of the times in the array
2022电工(中级)复训题库及答案