- 論壇徽章:
- 0
|
本帖最后由 pwp_cu 于 2013-10-24 16:36 編輯
原文是openoffice寫(xiě)的,圖片什么不太好弄,我只把目錄和第一章放在這里。
全文的pdf從這里下載。
listen_backlog.pdf
(317.95 KB, 下載次數(shù): 101)
2013-10-23 22:29 上傳
點(diǎn)擊文件名下載附件
再發(fā)個(gè)流程圖。
tcp連接建立流程圖.pdf
(79.77 KB, 下載次數(shù): 72)
2013-10-24 16:36 上傳
點(diǎn)擊文件名下載附件
Linux kernel tcp 連接建立詳解
——由listen系統(tǒng)調(diào)用的backlog參數(shù)引發(fā)的長(zhǎng)篇大論
目錄
Linux kernel tcp 連接建立詳解 1
第0章 本文的目的 2
第1章 listen()系統(tǒng)調(diào)用的困惑 2
1.1 前提條件 2
1.2 分析client程序 2
1.3 分析server程序 2
1.4 第一次觀察程序行為 2
1.5 第二次觀察程序行為 5
1.6 第三次觀察程序行為 7
1.7 略作猜測(cè)與分析 10
第2章 tcp 三次握手代碼分析 11
2.1 client/server程序結(jié)構(gòu) 13
2.2 server端listen()系統(tǒng)調(diào)用 13
2.3 client端connect()系統(tǒng)調(diào)用 19
2.4 server端處理SYN包 23
2.5 client端處理SYN/ACK包 32
2.6 server端處理ACK包 34
第3章 accept()系統(tǒng)調(diào)用分析 42
3.1 accept()系統(tǒng)調(diào)用的分析 42
3.2 連接請(qǐng)求的生命周期 47
第4章 listen()系統(tǒng)調(diào)用的參數(shù)backlog詳解 48
4.1 listen()系統(tǒng)調(diào)用的參數(shù)backlog的作用 48
4.2 分析1.4節(jié)中程序的行為 49
4.3 分析1.5節(jié)中程序的行為 52
4.4 分析1.6節(jié)中程序的行為 53
4.5 backlog參數(shù)的用法 53
附錄1 client.c 54
附錄2 server.c 55
第0章 本文的目的
一直以來(lái),對(duì)tcp的連接的建立過(guò)程只停留在三次握手的層面,閱讀代碼時(shí)發(fā)現(xiàn)好多邏輯流程不是很清楚。還有就是對(duì)系統(tǒng)調(diào)用int listen(int sockfd, int backlog)的第二個(gè)參數(shù)backlog似懂非懂。它到底是限制server端能同時(shí)處理的連接請(qǐng)求數(shù)量,還是限制同時(shí)建立的連接數(shù)量,還是限制等待建立連接隊(duì)列的長(zhǎng)度?
代碼面前,了無(wú)秘密,關(guān)鍵是得探求。如果你也有同樣的困惑,不妨讀讀本文。
我分析的是v3.12-rc4的代碼,commit 0e7a3ed04f0c 。本文偏重于連接建立的函數(shù)調(diào)用過(guò)程、sock狀態(tài)變化,以及backlog參數(shù),其他的也很重要的內(nèi)容,如tcp序號(hào)、擁塞控制等,但是本文從略,否則可以寫(xiě)本書(shū)了。并且本文只關(guān)注tcp層,IP層及以下也忽略。
第1章是簡(jiǎn)單的client/server程序,如果你對(duì)第1章中的程序行為全部理解,那么恭喜你,完全可以略過(guò)本文。 |
評(píng)分
-
查看全部評(píng)分
|