TCP三次握手如何优化

三次握手在一个HTTP请求中的平均时间占比在10%以上,当网不好,高并发 ,遭遇SYN泛洪攻击的时候,性能就会受影响。

TCP协议是通过OS实现的,调整TCP必须通过OS提供的接口和工具。

客户端的性能优化比服务器简单一些,因为服务器需要在监听端口上被动等待连接,还要保存许多握手的中间状态。

3次握手建立连接的首要目的是同步序列号。因为只有同步了序列号才可以有可靠的传输,TCP协议中的流量控制和消息丢失后的重发等特性都是依赖序列号实现的。所以三次握手中的报文被称为SYN的原因——Synchronize Sequence Numbers

OS实现了三次握手,但是我们看到的是连接状态 ,可以来看下3种状态的意义——
客户端发送SYN开启了三次握手,这个时候在客户端使用netstat命令可以看到连接的状态是SYN_SENT

通常,服务器会在几ms内返回ACK,但是如果客户端一直都没有收到ACK的话,客户端会重发 SYN,重试的次数是tcp_syn_retries参数来控制。

image.png

一般终止3次握手,最长时间超过了2分钟。

可以降低重试次数,从而可以尽快地把错误暴露给应用程序。


服务器收到SYN报文后,会返回给客户端SYN+ACK报文,确认客户端的序列号,同时发送自己的序列号。

这个时候,服务器端出现了新的连接状态,SYN_RCV
netstat -s命令可以得到由于队列已满而引发的失败次数。队列溢出,会导致SYN被丢弃。如果SYN被丢弃的个数一直变多,就应该增大SYN半连接队列(设置Linux的tcp_max_syn_backlog参数)

当SYN半连接队列满的时候,也可以不丢弃队列,而是开启syncookies功能就可以在不使用SYN队列的情况下成功建立连接。使用syncookies建立的连接会导致许多TCP特性均无法使用,所以只有当队列要溢出的时候启动syncookies

SYN泛洪攻击:攻击者使用大量的SYN报文发送给服务器,从而导致SYN半连接队列溢出,从而导致客户端的连接无法建立。

客户端收到服务器回复的SYN+ACK报文后,就会回复ACK 给服务器,同时客户端的连接状态从SYN_SENT会变成ESTABLISHED,表明连接成功

但是服务器端连接成功的建立要晚一些,当收到客户端发送的ACK后服务器的连接状态才会变成ESTABLISHED

image.png

image.png

服务器收到ACK连接建立成功后,OS的内核会把连接(这个连接是什么?)从 SYN半连接队列中移出,再移入到accept队列,等到进程调用accept()函数的时候把连接取出来。

image.png

image.png

image.png

TFO:客户端可以在首个SYN报文中就携带请求,从而节省了1个RTT的时间。

image.png


说了半天,如何优化呢(面试时候怎么答)?

  1. 当客户端发送SYN的时候,控制重发次数。(如果客户端一直没收到服务器回复的ACK,客户端就会重发)。
  2. 调整服务器的SYN半连接队列的长度。(如果SYN半连接队列溢出,SYN报文就会丢失,导致连接建立失败
  3. 当网络稳定的时候,减少服务器重发SYN+ACK报文的次数。(如果服务器没有收到客户端发送的ACK(ACK报文?),就会一直重发SYN+ACK报文)
  4. 当SYN队列满了后,开启syncookie功能,应对泛洪攻击。(保证连接成功建立)
  5. 进程想取出连接是通过调用accept()函数。
  6. 如果accept()队列溢出,系统默认会丢弃ACK,也可以用RST通知客户端连接建立失败。
  7. 当通过netstat发现大量的ACK被丢弃后,可以通过listen()函数提高accept队列的上限。
  8. TFO可以让HTTP请求减少一个RTT的时间。

实际情况:

image.png
image.png
image.png
image.png
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335