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

Linux高性能網絡編程十談 | TCP底層的收發過程

系統 Linux
談完上一篇《Linux高性能網絡編程十談|網絡篇》,我們繼續探索高性能網絡編程,但是我覺得在談系統API之前可以先講一些Linux底層的收發包過程,如下這是一個簡單的socket編程代碼:

談完上一篇《Linux高性能網絡編程十談|網絡篇》,我們繼續探索高性能網絡編程,但是我覺得在談系統API之前可以先講一些Linux底層的收發包過程,如下這是一個簡單的socket編程代碼:

int main() {
    ... 

    fd = socket(AF_INET, SOCKET_STREAM, 0);
    bind(fd, ...);
    listen(fd, ...);

    // 如何建立連接
    ...
    afd = accept(fd, ...);

    // 如何接收數據
    ...
    read(afd, ...);

    // 如何發送數據
    ...
    send(afd, ...);

    // 如何關閉連接
    ...
    close(fd);
    ...
}

第一部分:如何建立連接

從上一篇文章我們介紹了網絡協議,我們知道TCP/IP協議族劃分了應用層、TCP傳輸層、IP網絡層、鏈路層(以太層驅動)。

如上圖看應用層,通常在網絡編程中我們需要調用accept的API建立TCP連接,那TCP如何做的呢?

從上圖的流程可以看到:

(1)client端發起TCP握手,發送syn包;

(2)內核收到包以后先將當前連接的信息插入到網絡的SYN隊列;

(3)插入成功后會返回握手確認(SYN+ACK);

(4)client端如果繼續完成TCP握手,回復ACK確認;

(5)內核會將TCP握手完成的包,先將對應的連接信息從SYN隊列取出;

(6)將連接信息丟入到ACCEPT隊列;

(7)應用層sever通過系統調用accept就能拿到這個連接,整個網絡套接字連接完成;

那基于這個圖,我想問問讀者這里會有什么問題么?

細心的讀者應該可以看出:

1、這里有兩個隊列,必然會有滿的情況,那如果遇到這種情況內核是怎么處理的呢?

(1)如果SYN隊列滿了,內核就會丟棄連接;

(2)如果ACCEPT隊列滿了,那內核不會繼續將SYN隊列的連接丟到ACCEPT隊列,如果SYN隊列足夠大,client端后續收發包就會超時;

(3)如果SYN隊列滿了,就會和(1)一樣丟棄連接;

2、如何控制SYN隊列和ACCEPT隊列的大小?

(1)內核2.2版本之前通過listen的backlog可以設置SYN隊列(半連接狀態SYN_REVD)和ACCEPT隊列(完全連接狀態ESTABLISHED)的上限;

(2)內核2.2版本以后backlog只是表示ACCEPT隊列上限,SYN隊列的上限可以通過/proc/sys/net/ipv4/tcp_max_syn_backlog設置;

3、server端通過accept一直等,豈不是會卡住收包的線程?

在linux網絡編程中我們都會追求高性能,accept如果卡住接收線程,性能會上不去,所以socket編程中就會有阻塞和非阻塞模式。

(1)阻塞模式下的accept就會卡住,當前線程什么事情都干不了;

(2)非阻塞模式下,可以通過輪詢accept去處理其他的事情,如果返回EAGAIN,就是ACCEPT隊列為空,如果返回連接信息,就是可以處理當前連接;

第二部分:接收數據

(1)當網卡接收到報文并判斷為TCP協議后,將會調用到內核的tcp_v4_rcv方法,如果數據按順序收到S1數據包,則直接插入receive隊列中;

(2)當收到了S3數據包,在第1步結束后,應該收到S2序號,但是報文是亂序進來的,則將S3插入out_of_order隊列(這個隊列存儲亂序報文);

(3)接下來收到S2數據包,如第1步直接進入receive隊列,由于此時out_of_order隊列不像第1步是空的,所以引發了接來的第4步;

(4)每次向receive隊列插入報文時都會檢查out_of_order隊列,如果遇到期待的序號S3,則從out_of_order隊列摘除,寫入到receive隊列;

(5)現在應用程序開始調用recv方法;

(6)經過層層封裝調用,接收TCP消息最終會走到tcp_recvmsg方法;

(7)現在需要拷貝數據從內核態到用戶態,如果receive隊列為空,會先檢查SO_RCVLOWAT這個閥值(0表示收到指定的數據返回,1表示只要讀取到數據就返回,系統默認是1),如果已經拷貝的字節數到現在還小于它,那么可能導致進程會休眠,等待拷貝更多的數據;

(8)將數據從內核態拷貝到用戶態,recv返回拷貝數據的大小;

(9)為了選擇降低網絡包延時或者提升吞吐量,系統提供了tcp_low_latency參數,如果為0值,用戶暫時沒有讀數據則數據包進入prequeue隊列,提升吞吐量,否則不使用prequeue隊列,進入tcp_v4_do_rcv,降低延時;

第三部分:發送數據

(1)假設調用send方法來發送大于一個MSS(比如2K)的數據;

(2)內核調用tcp_sendmsg,實現復制數據,寫入隊列和組裝tcp協議頭;

(3)在調用tcp_sendmsg先需要在內核獲取skb,將用戶態數據拷貝到內核態,內核真正執行報文的發送,與send方法的調用并不是同步的,即send方法返回成功,也不一定把IP報文都發送到網絡中了。因此,需要把用戶需要發送的用戶態內存中的數據,拷貝到內核態內存中,不依賴于用戶態內存,也使得進程可以快速釋放發送數據占用的用戶態內存。但這個拷貝操作并不是簡單的復制,而是把待發送數據,按照MSS來劃分成多個盡量達到MSS大小的分片報文段,復制到內核中的sk_buff結構來存放;

(4)將數據拷貝到發送隊列中tcp_write_queue;

(5)調用tcp_push發送數據到IP層,這里主要滑動窗口,慢啟動,擁塞窗口的控制和判斷是否使用Nagle算法合并小報文(上一篇已經有介紹);

(6)組裝IP報文頭,通過經過iptables或者tcpdump等netfilter模塊過濾,將數據交給鄰居子系統(主要功能是查找需要發送的MAC地址,發送arp請求,封裝MAC頭等);

(7)調用網卡驅動程序將數據發送出去;

第四部分:關閉連接

關閉連接就是TCP揮手過程,我們都知道TCP連接是一種可靠的連接,那如何才能完整可靠的完成關閉連接呢?linux系統提供了兩個函數:

close對應tcp_close方法,通過減少socket的引用次數實現關閉,僅當引用計數為0時才會觸發tcp_close;

shutdown對應tcp_shutdown方法,不關心socket被引用次數,直接關閉對應的連接;

(1)shutdown可攜帶一個參數,取值有3個,分別意味著:只關閉讀、只關閉寫、同時關閉讀寫;

(2)若shutdown的是半打開的連接,則發出RST來關閉連接;

(3)若shutdown的是正常連接,那么關閉讀其實與對端是沒有關系的;

(4)若參數中有標志位為關閉寫,那么下面做的事與close是一致的,發出FIN包,告訴對方本機不會再發消息了;

第五部分:思考題

基于本文留幾個思考題,下一篇文章解答。

(1)發送方法返回成功后,數據一定發送到了TCP的對端么?

(調用了IP層的方法返回后,也未必就保證此時數據一定發送成功)

(2)1個socket套接字可能被多個進程在使用,出現并發訪問時,內核是怎么處理這種狀況的?

(3)若socket為默認的阻塞套接字,調用recv方法傳入的len參數,如果網絡包的數據小于len,recv會返回么?

(4)當socket被多進程或者多線程共享時,關閉連接時有何區別?

責任編輯:華軒 來源: 周末程序猿
相關推薦

2024-03-18 13:43:20

Linux架構

2023-11-01 11:59:13

2023-11-01 10:38:46

Linux高性能網絡編程

2023-11-01 11:40:46

Linux高性能網絡編程工具

2023-11-01 10:58:31

系統調用高性能網絡編程Linux

2023-11-01 11:27:10

Linux協程

2023-11-01 11:51:08

Linux性能優化

2023-11-01 11:07:05

Linux高性能網絡編程線程

2023-11-01 11:20:57

2023-11-01 11:13:58

Linux信號處理定時器

2025-06-26 01:27:00

2020-11-06 18:51:17

LinuxTCP服務器

2024-10-06 14:37:52

2024-08-06 08:22:18

2024-09-03 09:15:37

2024-10-16 11:03:30

Linux高性能編程

2012-09-25 15:02:50

C#網絡協議

2021-02-06 09:40:11

LinuxCPU高性能

2022-03-21 14:13:22

Go語言編程

2023-04-14 14:35:35

網絡
點贊
收藏

51CTO技術棧公眾號

伊人久久99| 国产999在线观看| 日本一区二区免费视频| 自拍一区在线观看| 国产精品久久久久一区| 国产91精品入口17c| 亚洲av无码精品一区二区| 91精品国产调教在线观看| 亚洲国产成人av在线| 又色又爽又高潮免费视频国产| 黄色网址在线免费播放| 99久久精品一区| 成人亲热视频网站| 久久青青草视频| 66国产精品| 亚洲欧美在线一区二区| 日本中文字幕有码| 欧洲精品一区二区三区| 亚洲一区在线观看免费 | 日韩av成人| 国产精品一级二级三级| 国产精品欧美日韩一区二区| 五月天综合在线| 久久久久久美女精品| 亚洲欧美国产一区二区三区| 性欧美18—19sex性高清| 成人51免费| 欧美三级三级三级爽爽爽| 欧美二区在线视频| 青春草视频在线观看| 中文字幕在线观看一区| 欧美日韩在线高清| 午夜视频在线免费播放| 国产成人免费视频网站 | 久久成年人视频| 欧美激情视频二区| 美女毛片一区二区三区四区| 精品国产第一区二区三区观看体验| 日本美女视频一区| 久久亚洲精品人成综合网| 懂色av影视一区二区三区| h无码动漫在线观看| 国产在线1区| 国产精品全国免费观看高清| 久久精品丝袜高跟鞋| 亚洲av电影一区| 91在线丨porny丨国产| 国产伦精品一区二区三区照片91 | 一本色道久久综合狠狠躁篇怎么玩| yy1111111| 美女主播精品视频一二三四| 精品国产麻豆免费人成网站| 丰满人妻一区二区三区免费视频棣| 国产午夜久久av| 欧美一级日韩不卡播放免费| 国产性生活一级片| 成人在线啊v| 91精品国产色综合久久| 99久久综合狠狠综合久久止| 日本高清不卡视频| 日本成人看片网址| 男女视频在线观看免费| 久久老女人爱爱| 欧美一区二区三区在线播放 | 国产素人在线观看| 麻豆视频在线看| 日韩欧美亚洲范冰冰与中字| 成人在线激情网| 日本.亚洲电影| 欧美男女性生活在线直播观看 | 99久久精品国产网站| 精品视频在线观看| 久草在线青青草| 国产精品久线在线观看| 久久香蕉视频网站| 人人草在线视频| 欧美午夜精品一区二区蜜桃 | 国产精品国产精品国产| 久久电影网电视剧免费观看| 亚洲a中文字幕| 人妻精品一区一区三区蜜桃91| 26uuu欧美| 亚洲国产欧洲综合997久久| 国产激情在线| 激情成人在线视频| 一级黄色录像在线观看| 波多野结衣欧美| 一区二区三区四区精品| 久久精品波多野结衣| 久久久精品午夜少妇| 92福利视频午夜1000合集在线观看| 亚洲精品911| 国产亚洲自拍一区| 国产精品88久久久久久妇女| 亚洲同志男男gay1069网站| 欧美图区在线视频| 熟妇高潮一区二区| 欧美a级片视频| 8090成年在线看片午夜| 这里只有精品6| 99久久精品国产网站| 精品少妇人妻av一区二区| 小h片在线观看| 日韩一级二级三级| xxxx日本黄色| 91久久亚洲| 91视频-88av| 国模吧精品人体gogo| 亚洲自拍欧美精品| 伊人影院综合在线| 欧美美女黄色| 久久99久久亚洲国产| 日韩精品在线一区二区三区| 成人亚洲一区二区一| 亚洲欧洲精品在线观看| 久草在线中文最新视频| 欧美大片日本大片免费观看| 日本不卡一区视频| 香蕉精品999视频一区二区| 99se婷婷在线视频观看| 香蕉视频网站在线观看| 色香蕉久久蜜桃| xxxx黄色片| 亚洲小说欧美另类社区| 91久久精品在线| 午夜视频在线免费观看| 欧美中文字幕一二三区视频| 深爱五月激情网| 伊人精品成人久久综合软件| 亚洲一区二区中文字幕| 日韩免费网站| 欧美性猛交xxxx乱大交| 中文字幕一区二区人妻电影丶| 久久久久亚洲| 91网站免费观看| 午夜视频在线免费观看| 欧美日韩一级片在线观看| 美女爆乳18禁www久久久久久| 国产毛片一区| 女人一区二区三区| 欧美大胆成人| 亚洲视频免费一区| 天天干在线播放| 久久久不卡影院| 成人免费在线小视频| 欧美日韩大片免费观看| 97在线精品视频| 深夜视频在线免费| 精品国产老师黑色丝袜高跟鞋| 日本道中文字幕| 亚洲深夜激情| 日本一区高清在线视频| 日韩性xxx| 少妇激情综合网| 国产又粗又猛又黄| 日韩一区在线免费观看| 欧美大片久久久| 中文字幕亚洲综合久久五月天色无吗''| 成人在线中文字幕| 色www永久免费视频首页在线 | 伊人成人网在线看| 精品国产电影| 91精品影视| 久久九九国产精品怡红院| 国产特级aaaaaa大片| 亚洲一卡二卡三卡四卡五卡| 香蕉视频黄色在线观看| 日韩在线观看一区二区| 亚洲国产精品一区在线观看不卡| 亚洲伊人精品酒店| 欧美激情视频网站| 亚洲av毛片成人精品| 欧美系列日韩一区| 久草网站在线观看| 91视频一区二区| 免费黄色一级网站| 一区二区在线| 精品国产一区二区三区免费| 色天使综合视频| 久久国产精品免费视频| 午夜性色福利影院| 欧美日韩国产高清一区二区三区| 久久久久久久国产视频| 久久免费看少妇高潮| 日韩欧美中文视频| 六月丁香综合| 无码人妻精品一区二区三区99v| 动漫av一区| 国产精品黄色av| 欧美wwww| 日韩视频中文字幕| 欧美视频一二区| 欧美日本精品一区二区三区| 日韩欧美三级在线观看| 国产精品美女一区二区| 男女一区二区三区| 狠狠色狠狠色合久久伊人| 99999精品视频| 亚洲先锋影音| 亚洲不卡1区| 136导航精品福利| 国产美女久久精品香蕉69| 欧美xxxhd| 欧美肥老妇视频| 麻豆网站视频在线观看| 国产视频自拍一区| 丰满人妻av一区二区三区| 欧美日韩三级在线| 欧美日韩综合一区二区三区| 亚洲综合色网站| 国产在视频线精品视频| 91原创在线视频| 久久久久亚洲av片无码v| 久久久噜噜噜久久狠狠50岁| 日b视频免费观看| 外国成人免费视频| 日韩欧美亚洲v片| 伊人久久大香线蕉av不卡| aa日韩免费精品视频一| 国产精品久久久久久吹潮| 欧美有码在线观看| 91超碰在线| 久久99久久99精品免观看粉嫩| 免费观看久久久久| 中文字幕视频一区二区在线有码| 台湾av在线二三区观看| 精品国产麻豆免费人成网站| www.国产欧美| 欧美一级片在线| 国产欧美日韩成人| 在线播放91灌醉迷j高跟美女 | 在线中文字幕播放| 午夜精品一区二区三区av| 成年人视频免费在线播放| 欧美日韩国产999| 日本中文字幕中出在线| 欧美大尺度激情区在线播放| 在线免费观看污| 欧美区在线播放| 欧美人与动牲性行为| 欧美俄罗斯乱妇| 国产美女一区视频| 欧美精品videosex牲欧美| 日本h片在线观看| 久久久久久久久亚洲| 24小时免费看片在线观看| 国内精品模特av私拍在线观看| 超碰在线视屏| 欧美一区在线直播| 亚洲a∨精品一区二区三区导航| 国产999在线观看| 久久91视频| 91精品中国老女人| 日韩欧美中文字幕一区二区三区| 99爱精品视频| 日韩三区视频| 四虎永久在线精品免费一区二区| 日韩激情一区| 中文字幕制服丝袜在线| 狠狠噜噜久久| www.国产在线播放| 亚洲一区黄色| 中文字幕 91| 国产成人综合在线观看| 日本黄色免费观看| 久久亚区不卡日本| 少妇的滋味中文字幕bd| 亚洲精品免费在线播放| 欧美不卡视频在线观看| 日韩欧美在线免费| 一区二区三区播放| 日韩视频一区二区三区| 色视频精品视频在线观看| 亚洲午夜精品视频| 好了av在线| 午夜精品一区二区三区视频免费看 | 国产精品丝袜91| 日本老熟俱乐部h0930| 天天亚洲美女在线视频| 中文字幕理论片| 欧美不卡在线视频| 麻豆导航在线观看| 操日韩av在线电影| 国产调教在线| 91精品国产综合久久香蕉922| 一区二区日韩| 亚洲 国产 日韩 综合一区| 激情欧美一区| 天天碰免费视频| 国产91精品在线观看| 无码 人妻 在线 视频| 一区二区三区在线视频观看| youjizz在线视频| 欧美一区二区黄色| 国产一级在线| 久久免费视频观看| 久久av日韩| 鲁丝片一区二区三区| 亚洲精品二区三区| wwwwww.色| 91丨九色丨蝌蚪丨老版| 极品颜值美女露脸啪啪| 在线视频综合导航| 五月天婷婷视频| 欧美大片va欧美在线播放| 91综合国产| 美女被啪啪一区二区| 欧美涩涩视频| 国产免费中文字幕| 国产日韩欧美激情| 一级片中文字幕| 精品国产一区二区精华| 国产盗摄在线观看| 国产日韩欧美自拍| 国产尤物久久久| 黄色www网站| 福利一区福利二区| 日本中文字幕免费在线观看| 欧美日韩一卡二卡| av中文在线| 国产成人高清激情视频在线观看 | 麻豆精品蜜桃视频网站| 精品成人av一区二区三区| 亚洲成人tv网| 人妻精品一区二区三区| 欧美成人激情视频免费观看| 亚洲国产综合在线观看| 日日夜夜精品网站| 美女尤物久久精品| 免费观看一级一片| 亚洲va国产va欧美va观看| 国产成人精品一区二三区四区五区| 色偷偷88888欧美精品久久久 | 丁香五月网久久综合| 亚洲精品tv久久久久久久久久| 天天看片天天操| 中文字幕一区二区日韩精品绯色| 在线视频 中文字幕| 中文字幕免费精品一区| 电影一区二区| 在线看无码的免费网站| 老司机精品视频导航| 娇小11一12╳yⅹ╳毛片| 51精品国自产在线| 国产在线一区二区视频| 亚洲专区中文字幕| 欧美日韩精品| 91九色蝌蚪porny| 疯狂做受xxxx欧美肥白少妇| 秋霞av在线| 国产精品久久久久久久久久久新郎 | 日韩精品在线私人| 亚洲精品动漫| 亚洲精品国产精品国自产观看| 精品一区二区三区免费观看| 一区二区视频免费看| 欧美tk—视频vk| 91精品产国品一二三产区| 欧美日韩一区二区三区在线观看免| 三级欧美韩日大片在线看| 中文字幕黄色网址| 91精品国产日韩91久久久久久| 岛国毛片av在线| 欧美xxxx黑人又粗又长精品| 免费精品视频最新在线| 日韩精品一区二区亚洲av性色| 精品黑人一区二区三区久久| 中文在线资源| 樱花www成人免费视频| 大尺度一区二区| 伊人久久久久久久久久久久 | 国产精品一品二品| 国产无套在线观看| 亚洲视频在线免费看| 久久天堂久久| 成人免费观看视频在线观看| 国产精品高潮久久久久无| 亚洲av综合色区无码一区爱av | 国产午夜精品一区二区三区嫩草 | 成人精品一区二区三区中文字幕| 羞羞影院体验区| 久久精彩免费视频| 欧美freesex8一10精品| 性猛交ⅹ×××乱大交| 亚洲777理论| 视频一区二区三区不卡| 精品日本一区二区三区| 理论片日本一区| 羞羞影院体验区| 久久九九免费视频| 嫩草一区二区三区| 少妇献身老头系列| 欧美性感一区二区三区| 超碰在线视屏| 中文字幕一区二区三区四区五区人 | 亚洲影院在线看| 欧美aaa在线| 天天操天天干视频| 色在人av网站天堂精品| 日韩欧美午夜|