精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线观看视频一区| 久久综合九色综合97_久久久| 久久综合电影一区| 蜜臀aⅴ国产精品久久久国产老师| 成入视频在线观看| 国产三区在线成人av| 国产欧美一区二区白浆黑人| 免费在线观看一级片| 欧美日韩一本| 欧美日韩一本到| 国产日韩av网站| 国产精品ⅴa有声小说| 国产在线精品一区二区三区不卡 | av色综合久久天堂av色综合在| 成人丝袜视频网| 国产精品人人做人人爽| 国产主播在线观看| 91综合久久一区二区| 日韩高清免费观看| 免费欧美一级片| avav成人| 欧美日韩亚洲视频| 日本女人高潮视频| 国产视频精品久久| 99精品热视频| 亚洲va久久久噜噜噜| 日日夜夜操视频| 亚洲高清免费| 欧美成人在线免费| 国产在线免费看| 女厕嘘嘘一区二区在线播放 | 奇米影视888狠狠狠777不卡| 国产又黄又大久久| 国产精品三级美女白浆呻吟| 99久久精品国产亚洲| 欧美激情第8页| 日韩视频中文字幕| 国产三级黄色片| 蜜臀av免费一区二区三区| 欧美电影精品一区二区| 成人av毛片在线观看| 成人四虎影院| 欧美性猛交xxxxxx富婆| 男女av免费观看| 国产高潮在线| 亚洲成av人片一区二区梦乃| 国产一级不卡视频| 七七成人影院| 亚洲综合在线第一页| 手机看片日韩国产| 国产三区在线观看| 亚洲精品国产一区二区精华液| 伊人久久99| 美女羞羞视频在线观看| 中文字幕永久在线不卡| 亚洲欧美综合一区| 日本网站在线免费观看视频| 国产精品国产a级| 亚洲精品一区二区三区四区五区| 电影在线一区| 欧美国产一区视频在线观看| 日韩在线电影一区| 91欧美在线视频| 国产欧美精品一区| 亚洲日本精品| av毛片在线播放| 亚洲国产日韩a在线播放| 嫩草影院中文字幕| av中文字幕在线看| 欧美日韩午夜视频在线观看| aaa毛片在线观看| 丁香久久综合| 欧美一区二区黄色| 91丨porny丨对白| 亚洲影院天堂中文av色| 国产亚洲欧洲高清| av在线免费播放网址| 欧美精品大片| 992tv成人免费视频| 激情视频网站在线观看| 麻豆精品视频在线观看视频| 成人亚洲欧美一区二区三区| 亚洲国产精品久久久久久6q| jizz一区二区| 翔田千里亚洲一二三区| 菠萝蜜视频国产在线播放| 亚洲成精国产精品女| 成年人免费大片| 一区二区三区日本视频| 日韩精品中文字幕在线一区| 性囗交免费视频观看| 第一社区sis001原创亚洲| 久久亚洲国产成人| 久久免费激情视频| 激情久久五月天| 精品欧美一区二区三区久久久 | 久久伊人免费视频| 免费一级肉体全黄毛片| 玖玖在线精品| 91精品国产高清久久久久久91裸体 | 欧美日韩视频一区二区三区| 欧美亚洲另类制服自拍| 国产精品无码天天爽视频| 99精品视频在线观看| 黄色www在线观看| 亚洲涩涩在线| 欧美成人a在线| 国产三级在线观看完整版| 亚洲黄色免费| 成人综合网网址| 黄视频在线观看免费| 亚洲自拍偷拍图区| gogogo高清免费观看在线视频| 另类图片第一页| 久久精品国产一区二区三区| 天天干,天天干| 成人在线综合网站| 中文字幕欧美日韩一区二区三区| 丰满的护士2在线观看高清| 欧美优质美女网站| 国产精品久久无码| 欧美福利专区| 国产精品一区专区欧美日韩| 青青青草网站免费视频在线观看| 亚洲一区在线视频| 国产亚洲视频一区| 欧洲杯足球赛直播| 日本一区二区在线免费播放| 亚洲av永久纯肉无码精品动漫| 国产精品日日摸夜夜摸av| 欧洲黄色一级视频| 大香伊人久久精品一区二区| 成年人精品视频| 五月婷婷激情五月| 久久精品无码一区二区三区| 欧美黑人经典片免费观看| 超碰97久久国产精品牛牛| 久久伊人精品天天| 国产精品视频在线观看免费 | 欧美成人女星排名| 亚洲欧美小视频| 精品一区二区影视| 亚洲在线不卡| 亚洲我射av| 久久国内精品一国内精品| 在线免费看av的网站| 欧美激情自拍偷拍| 欧美三级理论片| 欧美一级精品片在线看| 国产精品美乳在线观看| 91porn在线观看| 欧美日韩中文国产| 2014亚洲天堂| 国产一区二区精品在线观看| 国产又黄又爽免费视频| 成人豆花视频| 欧美人与性动交| 亚洲精品国产av| 香蕉成人啪国产精品视频综合网 | 久久99久久99精品免观看粉嫩| 国产精品九九九九| 亚洲精品国产视频| 婷婷五月精品中文字幕| 国产农村妇女精品一二区| 欧美日韩在线精品| 国产国产一区| 欧美成人激情视频| 日韩一级片免费看| 色婷婷国产精品综合在线观看| 人妻少妇无码精品视频区| 日日夜夜免费精品视频| 亚洲精品高清视频| 欧州一区二区三区| 久久久噜噜噜久久中文字免| 先锋av资源站| 欧美丝袜丝交足nylons| 外国一级黄色片| 99视频一区二区| 亚洲人辣妹窥探嘘嘘| 99视频精品全部免费在线视频| 亚洲影院在线看| 国产美女精品写真福利视频| 国产午夜精品免费一区二区三区| 国产麻豆一精品一男同| 午夜精品久久久久久久久久 | jizz18女人| 欧美成人69av| 久久综合给合久久狠狠色| 久久69成人| 久久久女人电视剧免费播放下载| 欧美偷拍视频| 6080午夜不卡| 欧美激情黑白配| 亚洲婷婷国产精品电影人久久| 在线黄色免费网站| 美女视频一区在线观看| 国产爆乳无码一区二区麻豆| 一本色道久久综合亚洲精品酒店| 国产在线视频欧美| 国产激情视频在线看| www日韩中文字幕在线看| 无码国精品一区二区免费蜜桃| 欧美日韩一区二区在线观看视频 | 亚洲一区亚洲二区亚洲三区| 涩涩视频网站在线观看| 久久亚洲电影天堂| 国产h视频在线观看| 欧美精品一区二区精品网| 中文字幕第315页| 天天操天天色综合| 国产精品 欧美激情| 亚洲国产成人午夜在线一区| 国产精品扒开腿做爽爽爽a片唱戏| 蜜臀久久久久久久| 国产网站免费在线观看| 欧美日韩国产探花| 亚洲国产一区二区在线 | 手机成人在线| 国产一区二区三区亚洲| 91色p视频在线| 99只有精品| 日韩免费av片在线观看| av手机免费在线观看| 欧美另类xxx| 午夜看片在线免费| 国产一区二区三区精品久久久| 天堂在线资源库| 精品少妇一区二区三区免费观看| 一区二区三区精| 在线观看91视频| 中文字幕激情小说| 午夜激情久久久| 精品在线免费观看视频| 亚洲男人的天堂在线aⅴ视频| 久久久久久成人网| 欧美国产日韩亚洲一区| 色欲av无码一区二区三区| 99久久久精品免费观看国产蜜| 国产乱淫av麻豆国产免费| 国产一区二区三区视频在线播放| 国内外成人免费在线视频| 青青草国产精品亚洲专区无| 免费观看成人网| 丝袜美腿亚洲一区| 日韩精品免费播放| 青娱乐精品视频在线| 亚洲成人av免费看| 蜜臀va亚洲va欧美va天堂| 天天操天天摸天天爽| 捆绑紧缚一区二区三区视频| 欧美黄色性生活| 蜜桃av一区二区在线观看| 天天影视综合色| 免费观看30秒视频久久| 天天综合网久久| 国内成人精品2018免费看| 亚洲网中文字幕| 粉嫩一区二区三区在线看| 少妇一级淫免费观看| 91免费视频网址| 亚洲码无人客一区二区三区| 中日韩av电影| 自拍偷拍第9页| 亚洲精品成人精品456| 国产精品a成v人在线播放| 精品国产91久久久| 国产主播第一页| 欧美高清视频一二三区| 精品人妻无码一区二区三区蜜桃一| 精品日韩欧美在线| 日本不卡视频一区二区| 中文字幕成人在线| av网站免费在线观看| 91高潮在线观看| 视频一区在线免费看| 成人午夜在线观看| 久久精品色综合| 日韩欧美第二区在线观看| 国产精品久久久久久麻豆一区软件 | 日韩激情在线| 日韩欧美视频免费在线观看| 欧美久久99| av免费在线播放网站| 狠狠色丁香婷婷综合| 亚洲 欧美 日韩在线| 国产欧美日韩麻豆91| 日韩女优一区二区| 大荫蒂欧美视频另类xxxx| 国产一区二区三区四区视频| 亚洲电影av在线| 午夜免费福利在线观看| 久久久免费电影| 欧美一级在线| 国产免费一区二区| 久久成人综合| 亚洲熟妇无码av在线播放| 老司机精品福利视频| 久久人人爽人人片| 久久久午夜电影| 精品无码一区二区三区电影桃花 | 国产免费高清av| 日韩精品极品在线观看播放免费视频| 一级毛片视频在线观看| 国内精品在线一区| 国产美女视频一区二区| 欧洲精品码一区二区三区免费看| 亚洲一区二区三区| www.日本xxxx| 99re8在线精品视频免费播放| 久久精品一区二区三区四区五区| 一本一道久久a久久精品| www.黄色av| 在线观看国产精品91| 麻豆理论在线观看| 99久久久久国产精品免费| 色小子综合网| 黄在线观看网站| 大陆成人av片| 天天做夜夜爱爱爱| 欧美日韩中文字幕一区| 国产片在线观看| 欧美中文在线观看国产| www.久久东京| 天天想你在线观看完整版电影免费| 青青青爽久久午夜综合久久午夜 | 最新精品国偷自产在线| 少妇大叫太大太粗太爽了a片小说| 蜜臀a∨国产成人精品| a级在线免费观看| 欧美日韩亚洲一区二区| 欧美一级特黄aaaaaa| 欧美老女人性生活| 欧洲精品99毛片免费高清观看| 亚洲国产综合自拍| 日本网站在线观看一区二区三区| 欧美黑人欧美精品刺激| 婷婷丁香激情综合| 少妇av一区二区| 91禁国产网站| 久久精品色播| 欧美亚洲一二三区| 99国产欧美另类久久久精品| 日操夜操天天操| 亚洲国内精品在线| 成人黄色动漫| 免费一区二区三区| 久久精品欧洲| 无码国产69精品久久久久同性| 福利二区91精品bt7086| 色视频免费在线观看| 日韩美女在线观看| 成人午夜av| 色噜噜狠狠永久免费| 亚洲四区在线观看| 精品毛片在线观看| 久久久噜噜噜久久| 日韩伦理一区二区三区| 任你操这里只有精品| 欧美国产欧美综合| 国产美女永久免费| 欧美伦理91i| 久久免费视频66| 99蜜桃臀久久久欧美精品网站| 久久精品欧美日韩| 中文字幕一区二区三区波野结| 日韩在线观看高清| 日韩08精品| 国产视频一视频二| 国产婷婷色一区二区三区在线| 夜夜狠狠擅视频| 欧美黑人巨大xxx极品| 久久人人爽人人爽人人片av不| 男女av免费观看| √…a在线天堂一区| 丰满人妻一区二区三区免费| 97在线看福利| 日本一区二区高清不卡| 日韩精品在线播放视频| 精品国产乱码久久久久久婷婷 | 久久成人亚洲精品| 911精品国产| 无码精品国产一区二区三区免费| 中文字幕国产一区| 粉嫩小泬无遮挡久久久久久| 日本不卡免费高清视频| 91麻豆精品国产91久久久平台 | 久久国产亚洲精品无码| 中文字幕乱码久久午夜不卡 | 夜夜嗨av一区二区三区四区| av在线国产精品| 欧美v在线观看| 亚洲欧美影音先锋| 无码精品人妻一区二区| 成人有码在线视频| 一本综合精品| 免费在线观看黄色小视频| 日韩高清不卡av| 激情综合五月| 日本老熟妇毛茸茸| 亚洲午夜一区二区|