精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

TCP三次握手原理,你到底知道多少?

網絡 通信技術 開發工具
最近碰到一個問題,Client 端連接服務器總是拋異常。在反復定位分析、并查閱各種資料搞懂后,我發現并沒有文章能把這兩個隊列以及怎么觀察他們的指標說清楚。

最近碰到一個問題,Client 端連接服務器總是拋異常。在反復定位分析、并查閱各種資料搞懂后,我發現并沒有文章能把這兩個隊列以及怎么觀察他們的指標說清楚。

因此寫下這篇文章,希望借此能把這個問題說清楚。歡迎大家一起交流探討。

問題描述

場景:Java 的 Client 和 Server,使用 Socket 通信。Server 使用 NIO。

問題:

  • 間歇性出現 Client 向 Server 建立連接三次握手已經完成,但 Server 的 Selector 沒有響應到該連接。
  • 出問題的時間點,會同時有很多連接出現這個問題。
  • Selector 沒有銷毀重建,一直用的都是一個。
  • 程序剛啟動的時候必會出現一些,之后會間歇性出現。

分析問題

正常 TCP 建連接三次握手過程,分為如下三個步驟:

  • Client 發送 Syn 到 Server 發起握手。
  • Server 收到 Syn 后回復 Syn +  Ack 給 Client。
  • Client 收到 Syn + Ack后,回復 Server 一個 Ack 表示收到了 Server 的 Syn + Ack(此時 Client 的 56911 端口的連接已經是 Established)。

從問題的描述來看,有點像 TCP 建連接的時候全連接隊列(Accept 隊列,后面具體講)滿了。

尤其是癥狀 2、4 為了證明是這個原因,馬上通過 netstat -s | egrep "listen" 去看隊列的溢出統計數據:    

反復看了幾次之后發現這個 overflowed 一直在增加,可以明確的是 Server 上全連接隊列一定溢出了。

接著查看溢出后,OS 怎么處理:

tcp_abort_on_overflow 為 0 表示如果三次握手第三步的時候全連接隊列滿了那么 Server 扔掉 Client 發過來的 Ack(在 Server 端認為連接還沒建立起來)。

為了證明客戶端應用代碼的異常跟全連接隊列滿有關系,我先把 tcp_abort_on_overflow 修改成 1。

1 表示第三步的時候如果全連接隊列滿了,Server 發送一個 Reset 包給 Client,表示廢掉這個握手過程和這個連接(本來在 Server 端這個連接就還沒建立起來)。

接著測試,這時在客戶端異常中可以看到很多 connection reset by peer 的錯誤,到此證明客戶端錯誤是這個原因導致的(邏輯嚴謹、快速證明問題的關鍵點所在)。

于是開發同學翻看 Java 源代碼發現 Socket 默認的 backlog(這個值控制全連接隊列的大小,后面再詳述)是 50。

于是改大重新跑,經過 12 個小時以上的壓測,這個錯誤一次都沒出現了,同時觀察到 overflowed 也不再增加了。

到此問題解決,簡單來說 TCP 三次握手后有個 Accept 隊列,進到這個隊列才能從 Listen 變成 Accept,默認 backlog 值是 50,很容易就滿了。

滿了之后握手第三步的時候 Server 就忽略了 Client 發過來的 Ack 包(隔一段時間 Server 重發握手第二步的 Syn + Ack 包給 Client),如果這個連接一直排不上隊就異常了。

但是不能只是滿足問題的解決,而是要去復盤解決過程,中間涉及到了哪些知識點是我所缺失或者理解不到位的。

這個問題除了上面的異常信息表現出來之外,還有沒有更明確地指征來查看和確認這個問題。

深入理解 TCP 握手過程中建連接的流程和隊列

如上圖所示,這里有兩個隊列:Syns Queue(半連接隊列);Accept Queue(全連接隊列)。

三次握手中,在第一步 Server 收到 Client 的 Syn 后,把這個連接信息放到半連接隊列中,同時回復 Syn + Ack 給 Client(第二步):

第三步的時候 Server 收到 Client 的 Ack,如果這時全連接隊列沒滿,那么從半連接隊列拿出這個連接的信息放入到全連接隊列中,否則按 tcp_abort_on_overflow 指示的執行。

這時如果全連接隊列滿了并且 tcp_abort_on_overflow 是 0 的話,Server 過一段時間再次發送 Syn + Ack 給 Client(也就是重新走握手的第二步),如果 Client 超時等待比較短,Client 就很容易異常了。

在我們的 OS 中 Retry 第二步的默認次數是 2(Centos 默認是 5 次):

如果 TCP 連接隊列溢出,有哪些指標可以看呢?

上述解決過程有點繞,聽起來懵,那么下次再出現類似問題有什么更快更明確的手段來確認這個問題呢?(通過具體的、感性的東西來強化我們對知識點的理解和吸收。)

netstat -s

比如上面看到的 667399 times ,表示全連接隊列溢出的次數,隔幾秒鐘執行下,如果這個數字一直在增加的話肯定全連接隊列偶爾滿了。

ss 命令

上面看到的第二列 Send-Q 值是 50,表示第三列的 Listen 端口上的全連接隊列最大為 50,第一列 Recv-Q 為全連接隊列當前使用了多少。

全連接隊列的大小取決于:min(backlog,somaxconn)。backlog 是在 Socket 創建的時候傳入的,Somaxconn 是一個 OS 級別的系統參數。

這個時候可以跟我們的代碼建立聯系了,比如 Java 創建 ServerSocket 的時候會讓你傳入 backlog 的值:

半連接隊列的大小取決于:max(64,/proc/sys/net/ipv4/tcp_max_syn_backlog),不同版本的 OS 會有些差異。

我們寫代碼的時候從來沒有想過這個 backlog 或者說大多時候就沒給它值(那么默認就是 50),直接忽視了它。

首先這是一個知識點的盲點;其次也許哪天你在哪篇文章中看到了這個參數,當時有點印象,但是過一陣子就忘了,這是知識之間沒有建立連接,不是體系化的。

但是如果你跟我一樣首先經歷了這個問題的痛苦,然后在壓力和痛苦的驅動下自己去找為什么。

同時能夠把為什么從代碼層推理理解到 OS 層,那么這個知識點你才算是比較好地掌握了,也會成為你的知識體系在 TCP 或者性能方面成長自我生長的一個有力抓手。

netstat 命令

netstat 跟 ss 命令一樣也能看到 Send-Q、Recv-Q 這些狀態信息,不過如果這個連接不是 Listen 狀態的話,Recv-Q 就是指收到的數據還在緩存中,還沒被進程讀取,這個值就是還沒被進程讀取的 bytes。

而 Send 則是發送隊列中沒有被遠程主機確認的 bytes 數,如下圖:

netstat -tn 看到的 Recv-Q 跟全連接半連接沒有關系,這里特意拿出來說一下是因為容易跟 ss -lnt 的 Recv-Q 搞混淆,順便建立知識體系,鞏固相關知識點 。  

比如如下 netstat -t 看到的 Recv-Q 有大量數據堆積,那么一般是 CPU 處理不過來導致的:

上面是通過一些具體的工具、指標來認識全連接隊列(工程效率的手段)。  

實踐驗證一下上面的理解

把 Java 中 backlog 改成 10(越小越容易溢出),繼續跑壓力,這個時候 Client 又開始報異常了,然后在 Server 上通過 ss 命令觀察到:

按照前面的理解,這個時候我們能看到 3306 這個端口上的服務全連接隊列最大是 10。

但是現在有 11 個在隊列中和等待進隊列的,肯定有一個連接進不去隊列要 overflow 掉,同時也確實能看到 overflow 的值在不斷地增大。

Tomcat 和 Nginx 中的 Accept 隊列參數

Tomcat 默認短連接,backlog(Tomcat 里面的術語是 Accept count)Ali-tomcat 默認是 200,Apache Tomcat 默認 100。

Nginx 默認是 511,如下圖:

因為 Nginx 是多進程模式,所以看到了多個 8085,也就是多個進程都監聽同一個端口以盡量避免上下文切換來提升性能。

總結

全連接隊列、半連接隊列溢出這種問題很容易被忽視,但是又很關鍵,特別是對于一些短連接應用(比如 Nginx、PHP,當然它們也是支持長連接的)更容易爆發。

 一旦溢出,從 CPU、線程狀態看起來都比較正常,但是壓力上不去,在 Client 看來 RT 也比較高(RT = 網絡 + 排隊 + 真正服務時間),但是從 Server 日志記錄的真正服務時間來看 rt 又很短。

JDK、Netty 等一些框架默認 backlog 比較小,可能有些情況下導致性能上不去。

希望通過本文能夠幫大家理解 TCP 連接過程中的半連接隊列和全連接隊列的概念、原理和作用,更關鍵的是有哪些指標可以明確看到這些問題(工程效率幫助強化對理論的理解)。

另外每個具體問題都是最好學習的機會,光看書理解肯定是不夠深刻的,請珍惜每個具體問題,碰到后能夠把來龍去脈弄清楚,每個問題都是你對具體知識點通關的好機會。

最后提出相關問題給大家思考:

  • 全連接隊列滿了會影響半連接隊列嗎?
  • netstat -s 看到的 overflowed 和 ignored 的數值有什么聯系嗎?
  • 如果 Client 走完了 TCP 握手的第三步,在 Client 看來連接已經建立好了,但是 Server 上的對應連接實際沒有準備好,這個時候如果 Client 發數據給 Server,Server 會怎么處理呢?(有同學說會 Reset,你覺得呢?)

提出這些問題,希望以這個知識點為抓手,讓你的知識體系開始自我生長。

參考文章:

  • http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html
  • http://www.cnblogs.com/zengkefu/p/5606696.html
  • http://www.cnxct.com/something-about-phpfpm-s-backlog/
  • http://jaseywang.me/2014/07/20/tcp-queue-%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98/
  • http://jin-yang.github.io/blog/network-synack-queue.html#
  • http://blog.chinaunix.net/uid-20662820-id-4154399.html

責任編輯:武曉燕 來源: 阿里技術
相關推薦

2022-07-07 09:00:17

TCP 連接HTTP 協議

2018-07-05 14:25:01

TCP握手原理

2019-02-01 09:38:16

2023-09-07 16:46:54

TCP數據傳遞

2023-10-24 15:22:09

TCPUDP

2022-10-10 07:34:36

TCP三次握手區塊鏈

2020-12-08 06:34:16

TCP握手SYN 報文

2019-06-12 11:26:37

TCP三次握手四次揮手

2015-10-13 09:42:52

TCP網絡協議

2024-01-12 08:23:11

TCPACK服務器

2023-10-17 15:44:19

TCP四次揮手

2024-10-09 20:54:16

2022-07-25 07:07:35

TCP客戶端服務器

2021-03-08 18:08:08

TCP Connect 協議

2023-03-06 15:43:56

2020-08-27 07:41:28

TCP協議數據

2023-09-02 21:57:52

網絡TCP協議

2019-12-12 10:36:43

TCPSYNIP

2021-07-03 17:47:25

TCP控制協議

2022-07-05 22:18:08

TCP網絡
點贊
收藏

51CTO技術棧公眾號

日韩精品一区二区三区第95| 伊人婷婷欧美激情| 国产精品中文在线| 欧洲猛交xxxx乱大交3| 97久久亚洲| 欧美午夜美女看片| 制服诱惑一区| 天天综合网在线| 蜜臀av性久久久久蜜臀aⅴ| 久久国产精彩视频| 成年人网站免费看| 精品一区二区三区在线观看视频| 精品久久香蕉国产线看观看亚洲| 日韩精彩视频| 神马午夜电影一区二区三区在线观看| 日本三级亚洲精品| 欧美精品国产精品日韩精品| 最新中文字幕av| 97精品久久| 在线电影欧美成精品| av动漫在线看| 影院在线观看全集免费观看| 国产亚洲欧美一区在线观看| av资源站久久亚洲| 一级全黄少妇性色生活片| 亚洲一区视频| 色综合久久悠悠| 欧美成人久久久免费播放| 日韩人体视频| 亚洲国内精品在线| 久久久无码人妻精品无码| 日韩福利在线观看| 色婷婷国产精品| 少妇人妻无码专区视频| 尤物视频在线看| 亚洲视频网在线直播| 亚洲欧美久久234| 毛片在线免费| 96av麻豆蜜桃一区二区| 国产高清在线一区二区| 国产精品久久婷婷| 久久精品国产亚洲一区二区三区| 欧美在线视频免费观看| 日韩 国产 在线| 欧美三级在线| 九九热视频这里只有精品| 国产麻豆a毛片| 日韩一级毛片| 中文字幕亚洲一区在线观看| 一级片手机在线观看| 亚洲精品合集| 亚洲剧情一区二区| 一区二区三区免费在线观看视频| 色先锋久久影院av| 亚洲美腿欧美激情另类| 国产成人无码精品久久二区三| 欧美日韩破处| 亚洲精品在线视频| 亚洲做受高潮无遮挡| 狠狠做深爱婷婷综合一区| 亚洲性夜色噜噜噜7777| 亚洲成人黄色av| 色喇叭免费久久综合网| 中文字幕视频在线免费欧美日韩综合在线看| 国产ts丝袜人妖系列视频| 亚洲精品aaaaa| 一本一道久久a久久精品逆3p| 国产aⅴ激情无码久久久无码| 少妇精品久久久一区二区三区| 亚洲欧美在线免费| 青青操在线播放| 国产大片一区| 欧美精品18videosex性欧美| 久视频在线观看| 国产精品久久777777毛茸茸| 日本最新高清不卡中文字幕| 国产乡下妇女三片| 国产一区二区三区四区在线观看| 91视频网页| 亚洲欧美日韩成人在线| 国产欧美日韩另类一区| 正在播放久久| 国产极品人妖在线观看| 欧美视频一二三| 一女二男3p波多野结衣| 视频精品二区| 国产午夜精品一区二区三区| 自拍偷拍第9页| 国产精品xvideos88| 欧美一二三视频| 亚洲视频一区二区三区四区| 国产 日韩 欧美大片| 欧美一区少妇| 日本天码aⅴ片在线电影网站| 大伊人狠狠躁夜夜躁av一区| 老司机久久精品| 久久久久久久久久久久久久久久久久久久| 日韩精品在线观看一区| 欧美一区免费观看| 亚洲欧美清纯在线制服| 亚洲一区二区三区xxx视频| 亚洲aⅴ乱码精品成人区| 国产精品久久夜| 国产白丝袜美女久久久久| 欧美成人一二区| 日韩成人网免费视频| www.黄色com| 久久久久99| 成人动漫视频在线观看免费| 91在线视频| 精品美女国产在线| 精品国产午夜福利在线观看| 美女久久久久| 欧美激情综合色| 91福利免费视频| 久久影院午夜片一区| 国产激情片在线观看| 成人在线视频播放| 日韩精品中文字幕视频在线| 国产成人av免费在线观看| 日韩一区精品字幕| 极品校花啪啪激情久久| 亚洲色图美国十次| 欧美精品免费视频| 中文字幕第24页| 亚洲一区久久| 精品日韩美女| 91美女主播在线视频| 日韩欧美一区二区三区在线| jizzjizz日本少妇| 日本欧美在线观看| 日韩免费三级| 你懂得影院夜精品a| 亚洲精品美女网站| 国产成人无码一区二区三区在线 | 亚洲美女在线一区| 成年网站免费在线观看| 日本一二区不卡| 国产精品盗摄久久久| 免费在线国产| 色伊人久久综合中文字幕| 在线观看av中文字幕| 亚洲精品国产日韩| 精品乱子伦一区二区三区| av手机在线观看| 亚洲成人网在线| 国产精品老女人| 91女厕偷拍女厕偷拍高清| 久久国产亚洲精品无码| 亲子伦视频一区二区三区| 91精品国产乱码久久久久久久久| 国模私拍视频在线| 天天综合日日夜夜精品| 国产乱了高清露脸对白| 亚洲中午字幕| 欧美日韩在线观看一区二区三区| 黑人巨大亚洲一区二区久| 亚洲精品一区中文| 国产乱码在线观看| 亚洲女同女同女同女同女同69| 日韩精品aaa| 欧美日韩p片| 国内成+人亚洲| 日本综合字幕| 久久精品国产亚洲精品| 999国产精品视频免费| 亚洲精品国产精品乱码不99| 超碰caoprom| 久久午夜电影| 日本黄色播放器| av在线亚洲色图| 日本aⅴ大伊香蕉精品视频| jizzjizz在线观看| 日韩手机在线导航| 91在线视频在线观看| 国产日产精品1区| 91视频这里只有精品| 亚洲性人人天天夜夜摸| 久久青青草原| 精品自拍视频| 欧美激情视频免费观看| 日韩一二三四| 欧美精品精品一区| 日本道在线观看| 中文字幕一区二区三区蜜月| 久久无码专区国产精品s| 久久天天综合| 成人国产在线看| 国产一区二区三区日韩精品| 亚洲综合精品伊人久久| 高潮一区二区| 欧美日韩成人在线播放| 理论在线观看| 欧美一级视频精品观看| 无码人妻精品一区二区三区9厂| 国产精品久久久久一区二区三区共| wwwww在线观看| 日本在线播放一区二区三区| 国产日本在线播放| 国产精品毛片久久| 欧美久久在线| 伊人久久噜噜噜躁狠狠躁| 青青精品视频播放| 日韩少妇视频| 色噜噜狠狠色综合网图区| 午夜视频在线免费播放| 91精品婷婷国产综合久久| 你懂的国产在线| 亚洲卡通动漫在线| 成人免费视频入口| 久久综合色一综合色88| 免费黄色av网址| 久久福利视频一区二区| 国产成人精品视频免费看| 欧美日一区二区三区在线观看国产免| 亚洲电影免费| 蜜桃a∨噜噜一区二区三区| 91久久精品www人人做人人爽| h1515四虎成人| 青青草精品毛片| 爱啪视频在线观看视频免费| 久久91亚洲人成电影网站| 麻豆网站在线| 日韩在线国产精品| a黄色在线观看| 亚洲人在线视频| 视频一区二区三区在线看免费看| 日韩精品最新网址| 99精品在线看| 欧美一级片在线观看| 亚洲综合免费视频| 欧美亚洲综合另类| 青青艹在线观看| 日本道精品一区二区三区| 国产午夜免费福利| 一区二区三区精品久久久| 三级在线观看免费大全| 国产精品第一页第二页第三页| 亚洲欧美va天堂人熟伦| 久久久久国产精品厨房| 91精品国产自产| 久久久久久久久久久99999| theav精尽人亡av| 久久综合久久综合久久综合| 少妇一级淫免费观看| 99久久99久久精品国产片果冻| 下面一进一出好爽视频| 国产成人精品免费一区二区| 免费看91视频| 91一区在线观看| 中文字幕5566| 国产精品入口麻豆九色| av最新在线观看| 亚洲激情图片一区| 久久久香蕉视频| 婷婷中文字幕一区三区| 可以免费在线观看的av| 欧美小视频在线| 精品久久久久久久久久久国产字幕| 91精品1区2区| 在线黄色av网站| 日韩一级大片在线| 亚洲AV无码国产精品午夜字幕 | 亚洲黄色免费在线观看| 久久久久久综合| 免费看的黄色录像| 亚洲免费观看高清完整版在线观看熊| 久视频在线观看| 日本韩国一区二区三区| 一区二区www| 欧美精品一区二区三区蜜桃视频| 香蕉久久一区二区三区| 国产亚洲精品久久久优势 | 国产精品美女久久久久久久久| 殴美一级黄色片| 亚洲电影一区二区三区| 香蕉污视频在线观看| 91精品在线麻豆| 全部免费毛片在线播放一个| 亚洲欧美综合图区| jizz性欧美10| 欧美在线视频播放| www.久久久久爱免| 精品伊人久久大线蕉色首页| 日韩精品永久网址| 欧美一级免费播放| 青青草成人在线观看| 久久精品无码一区二区三区毛片| 99re在线视频这里只有精品| 欧美一区二区三区观看| 精品久久久久久久久久ntr影视| 中文字幕网址在线| 亚洲国产私拍精品国模在线观看| chinese偷拍一区二区三区| 久久久久久久电影一区| 性欧美freehd18| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 综合色天天鬼久久鬼色| 久久免费激情视频| 欧美成人一区二区三区 | 欧美久久精品午夜青青大伊人| 日韩电影毛片| aa成人免费视频| 日韩av免费大片| 精品人妻一区二区三区四区在线| 精品伊人久久久久7777人| 精品国产无码在线观看| 亚洲成a人片综合在线| 国产精品嫩草影院精东| 亚洲欧美中文在线视频| 1024在线看片你懂得| 91综合免费在线| 色狮一区二区三区四区视频| 免费在线观看亚洲视频| 国产不卡高清在线观看视频| 黑人狂躁日本娇小| 欧美艳星brazzers| 黄色电影免费在线看| 69影院欧美专区视频| 一区二区三区四区视频免费观看| 一区二区高清视频| 青草av.久久免费一区| 97人妻精品一区二区免费| 欧美日韩国产丝袜另类| 精品国产亚洲av麻豆| 久久午夜a级毛片| 一级欧美视频| 正在播放久久| 国产一区二区三区四| 中文字幕求饶的少妇| 欧美三级中文字| av男人的天堂在线| 国产精品永久在线| 99国产**精品****| 一级做a免费视频| 综合电影一区二区三区 | 国产1区2区3区精品美女| 18岁成人毛片| 日韩一区二区在线观看视频播放| 免费黄色网址在线观看| 成人精品视频在线| 亚洲午夜精品一区二区国产| 在线观看国产一级片| 中文字幕一区二区三区在线不卡| 在线观看不卡的av| 日韩在线不卡视频| 国产精一区二区| 成人高清dvd| 成人看片黄a免费看在线| 日操夜操天天操| 亚洲日本成人网| 日韩精品第一| 欧美日韩亚洲国产成人| 国产成人在线影院| 国产一级二级三级视频| 精品国产免费一区二区三区四区| 国产99在线| 欧美自拍资源在线| 久草热8精品视频在线观看| 麻豆天美蜜桃91| 亚洲第一区中文字幕| 神马久久午夜| 亚洲成人18| 国产v综合v亚洲欧| 久热这里只有精品6| 在线视频中文亚洲| 精品久久国产一区| 久久久久久免费看| 国产亚洲一区二区在线观看| 亚洲一区二区三区网站| 久久手机免费视频| 人人网欧美视频| 色悠悠久久综合网| 一区二区三区精品久久久| 男人天堂亚洲二区| 成人写真视频福利网| 亚洲精选成人| 日韩欧美黄色网址| 欧美va亚洲va| 日本成人片在线| 少妇一晚三次一区二区三区| 91蝌蚪porny| 国产熟女精品视频| 欧美最猛性xxxxx免费| 小处雏高清一区二区三区| 亚洲天堂2024| 欧美高清精品3d| 不卡av播放| 日韩人妻一区二区三区蜜桃视频| 久久综合狠狠综合| av中文在线观看| 国产91在线播放精品91| 欧美成熟视频| 国产一级淫片久久久片a级| 精品国产乱码久久久久久夜甘婷婷 | 亚洲欧洲中文日韩久久av乱码| 五月婷婷伊人网| 99在线热播| 久久精品国产网站| 在线观看 亚洲|