架构性能优化_TCP详解_三次握手(建立连接)

本文详细解析了TCP协议的基本概念,包括TCP报文格式及其关键字段的作用,如序号、确认序号和标志位等。同时深入介绍了三次握手的过程及非正常连接建立的情况,例如三次握手失败、SYN攻击及已建立连接但客户端掉线等问题。
一、 TCP报文格式


上图中有几个字段需要重点介绍下:
  

(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  

(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
  

(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
  

(A)URG:紧急指针(urgent pointer)有效。
  

(B)ACK:确认序号有效。
  

(C)PSH:接收方应该尽快将这个报文交给应用层。
  

(D)RST:重置连接。
  

(E)SYN:发起一个新连接。
  

(F)FIN:释放一个连接。

需要注意的是:
  

(A)不要将确认序号ack与标志位中的ACK搞混了。
  

(B)确认方Ack=发起方Req+1,两端配对。



二、三次握手(建立tcp连接)
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,握手过程如下图:


正常建立连接过程描述:
1、第一次握手:客户端向服务器端发送一个数据包,里面包括标志位SYN置为1,seq序号随机生成一个值为J,此时,客户端状态为SYN_SENT,等待服务器端的请求确认。
2、第二次握手:服务器端收到客户端发送的数据包,拆包后得到相关信息,由标志位SYN=1得知客户端要请求建立连接,于是再向客户端发送一个新的数据包,里面包括确认号ack=J+1,标志位ACK置为1,seq序号随机产生一个值K,标志位SYN置为1,此时,服务器端状态为SYN_RCVD,表示第一次握手成功了,再发给服务器端一个确认数据包就可以建立连接了。
3、第三次握手:客户端收到服务器端发送的数据包,拆包后得到相关信息,由标志位SYN=1和ACK=1得知服务器端已经收到请求确认了,客户端检查确认号ack是否J+1,标志位SYN是否为1,标志位ACK是否为1,检验后,此时,客户端的状态为ESTABLISHED,表示已经建立连接,客户端再向服务器端发送一个新的数据包,里面包括确认号ack=K+1,标志位ACK置为1;服务器端收到数据包后,检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,此时,服务器端的状态为ESTABLISHED。


常见异常情况(非正常建立连接情况,也是linux内核优化所关注的点):
1、TCP第三次握手失败怎么办?
当客户端收到服务端的SYN+ACK应答后,其状态变为ESTABLISHED,并会发送ACK包给服务端,准备发送数据了。如果此时ACK在网络中丢失,过了超时计时器后,那么Server端会重新发送SYN+ACK包,重传次数根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认是5次。如果重传指定次数到了后,仍然未收到ACK应答,那么一段时间后,Server自动关闭这个连接。但是Client认为这个连接已经建立,如果Client端向Server写数据,Server端将以RST包响应,方能感知到Server的错误。

总结:因此可以调整linux内核参数/etc/sysctl.conf的net.ipv4.tcp_synack_retries = 1来减少丢包后重传的时间,以优化系统的高并发性能


2、SYN攻击:
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
#netstat -nap | grep SYN_RECV

总结:因此可以调整linux内核参数/etc/sysctl.conf的net.ipv4.tcp_syncookies = 1,该值表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;


3、如果已经建立TCP连接,但是客户端已经掉线,服务器端怎么办?
已经建立连接后,如果客户端久久发送数据,未响应,则服务器端会重新发送数据检测客户端是否已经掉线,如果超过重新发送检测次数,则断开连接,释放资源。
总结:因此可以调整linux内核参数/etc/sysctl.conf的net.ipv4.tcp_retries2 = 5,控制内核向已经建立连接的远程主机重新发送数据的次数,低值可以更早的检测到与远程主机失效的连接,因此服务器可以更快的释放该连接,可以修改为5





外贸管理系统 单机永久免费使用,无录入数量限制,无打印限制,无间限制。1、该版本=进销存+财务+多币种+多语言外贸管理系统适用于国内外中小型外贸行业企业,针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件。它将企业的财务、采购、销售、库存和其它业务功能整合到一个信息管理平台上,从而实现信息数据标准化,系统运行集成化,业务流程合理化,绩效监控动态化,管理改善持续化。软件界面清晰、操作简单、人性化的流程设计,普通用户不需要培训也能很快掌握软件的操作使用方法。2、系统特征:(1). 专业性强:针对外贸中小型企业各种管理方式进行灵活的设置;(2). 覆盖性广:系统包括物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件;(3). 技术先进:系统在利用主流技术的同,在条码技术、无线射频技术等与软件完美的配合;(4). 业务灵活:系统贯穿整个工作流程,所有部门都能灵活设置使用;(5). 管理清晰:系统针对企业关心的成本、利润等信息详细体现,也可对异常问题进行预警;(6). 扩展性强:可增加新的业务流程、流程细节的提升和完善等,只要用户需要,我们就可以做得到!3、功能简介: 支持双语言:中文、英文; 支持条码扫描、打印功能; 支持多币种、多单位、多仓库的采购、销售方式; 可根据不同客户预设定不同的单价级别; 支持仓库商品上、下限报警; 支持消息管理、日程安排、文件共享等OA协同办公功能; 打印输出的报表用户可以自由设置,满足各种不同的单据需求; 支持商品组装拆分; 支持多用户操作; 完整的供应商和客户管理系统; 可设置用户查看单价、客户、商品、仓库、单据的权限; 支持EXCEL格式导出导入; 安全可靠的数据库备份和恢复功能; 所有控件用户可以灵活调整; 细化的权限分配,每个功能模块都可设置读、新增、修改、删除、审核功能; 支持现金存取、支票入账、转账、网上支付、阿里巴巴支付宝、银行票据收入支出银行业务管理,清晰反应每一笔业务流水账目、及反应公司利润清况; 强大的报表中心,汇集所有数据焦点,实查看供应商、客户应收、应付流水明细,业务员提成情况,清楚分晰企业经营状况; 提供柱形、饼形图表,不同程序剖析供应商、客户、商品、业务员、仓库、资金等不同期的分析数据 整合人力资源方便各企业对公司人员进行人事管理、绩效考核、工资管理。4、功能信息多用户(多操作员)√打印功能√更换主机√自定义打印报表√软件功能全部数据量无限使用期限永久电脑操作系统Windows数据备份手动备份/自动备份系统效果图:https://blog.csdn.net/yzd6789/article/details/120066951
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值