tcp三次握手_TCP 协议:三次握手

0e82afda535cd723208e5edf509e2090.png

握手的目标

同步Sequence序列号:初始序列号 ISN(Initial Sequence Number)

交换TCP通讯参数:如MSS、窗口比例因子、选择性确认、指定校验和算法

三次握手

1e1e24d3b733ad3628413be292575748.png

三次握手(1):SYN报文

6f1affcbd5d21a043dd4c9518913b9a5.png

三次握手(2):SYN/ACK报文

4fe237d06bd917cc138edee1552da414.png

三次握手(3):ACK报文

3da18d5553bb07a4bc3a56490d2cced9.png

特例情况

两端同事发送SYN:双方使用固定源端口且同时建连接,会使用到TCB

fe3b6a22c2a70e7c8bf398de20d24793.png

TCP 中的性能优化和安全问题

服务器三次握手流程示例

45816d91d981c950d600718dd09a5d8d.png

优化:

1、超时时间与缓冲队列

1.1 应用层connect超时时间调整

1.2 操作系统内核调整
1)服务器端SYN_RCV状态:
net.ipv4.tcpmaxsyn_backing:SYNRCVD状态连接的最大个数
net.ipv4.synackretries:被动建立连接时,发SYN/ACK的重试次数
2)客户端SYN_SENT状态:
net.ipv4.synackretries=6 主动建立连接时,发SYN的重试次数
net.ipv4.ip_local_port_range = 32768 60999 建立连接时的本地端口可用范围
3)ACCEPT队列设置

2、Fast Open降低时延

c2233afdd9312120adf4afb310dba505.png

第二次连接时跳过三次握手,使用上次连接时保存在cookie中的连接信息,同时发送数据,如GET请求信息;

Linux上打开TCP Fast Open:

ec81a208afc7fba62a9303c68d124828.png

SYN攻击

攻击者短时间伪造不同IP地址的SYN报文,快速占满backlog队列,使服务器不能为正常用户服务

解决方法1:Linux内核配置

4b19c9e54df7307ff4d364f84fb1b42d.png

解决方法2:tcp_syncookies

1ad349bead627aad6a085aa8fcc8569a.png

TCP_DEFER_ACCEPT功能

收到三次握手最后一步的ACK分组后,内核将报文放在accept队列中,不激活应用程序,待服务器再收到后续实际的报文请求后,再激活对应的应用程序(如Nginx),以应用程序响应效率更高。

aec6c94c991b1f4c6829ad15296379f5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值