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

亚洲无线码一区二区三区| 97se亚洲国产一区二区三区| 成人激情免费网站| 性欧美在线看片a免费观看| 亚洲精品久久久久久久久久久久| 国产黑人绿帽在线第一区| 成人黄色免费网址| 欧美成人三级| 国产视频一区在线播放| 国产欧美一区二区三区四区| 免费在线观看h片| 国产精品毛片久久久| 色综合网色综合| 三年中文高清在线观看第6集 | 亚洲男人的天堂在线观看| 成人做爰66片免费看网站| 亚洲黄色小说图片| 久久综合av| 亚洲国产成人在线播放| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 午夜精品电影在线观看| 欧美brazzers| 欧美激情成人在线| 日韩精品视频免费在线观看| 日本三级黄色网址| 黄色在线看片| 国产精品区一区二区三区| www.成人三级视频| 欧美另类高清videos的特点| 欧美日韩国产在线一区| 亚洲欧洲在线免费| 久久久高清视频| 色8久久久久| 精品久久中文字幕久久av| 国产系列第一页| 日本中文字幕一区二区有码在线| 狠狠色综合播放一区二区| 欧美激情在线狂野欧美精品| 亚洲国产欧美不卡在线观看| 国产喷水吹潮视频www| 性高湖久久久久久久久| 欧美精品国产精品日韩精品| www欧美com| 偷拍欧美精品| www日韩欧美| 乱老熟女一区二区三区| 欧美一级淫片| 色偷偷88888欧美精品久久久 | 99热这里只有精品1| 久久99国产精品久久| 国产精品美女av| а中文在线天堂| 日韩成人精品在线观看| 国产精品jizz在线观看麻豆| 日韩精品一区不卡| 日韩精品一区第一页| 国产成人精品视频在线| 免费视频网站在线观看入口| 老妇喷水一区二区三区| 日韩av不卡电影| 亚洲 国产 日韩 欧美| 三级亚洲高清视频| 国产精品久在线观看| 中文字幕一区二区三区波野结| 日韩精品免费专区| 成人精品久久久| av免费观看在线| 成人精品视频.| 久久久国产精品一区二区三区| 色视频在线观看福利| 久久久www免费人成精品| 日韩免费三级| h网站久久久| 亚洲mv在线观看| 日韩精品一区二区三区不卡| 欧美韩国日本| 精品卡一卡二卡三卡四在线| 黑丝av在线播放| 国产99精品| 久久伊人色综合| 国产午夜激情视频| 日韩精品欧美成人高清一区二区| 成人有码在线视频| 亚洲风情第一页| 久久久久久久综合日本| 欧美性受xxxx黑人猛交88| missav|免费高清av在线看| 色综合久久久网| 视频免费1区二区三区 | 亚洲白拍色综合图区| 国产精品揄拍100视频| 欧美独立站高清久久| 欧美夫妻性生活视频| 免费看毛片网站| 极品少妇xxxx偷拍精品少妇| 国产综合欧美在线看| 成人影视在线播放| 亚洲黄色性网站| 成人在线免费播放视频| 日韩中文字幕视频网| 亚洲欧美日韩直播| 久久艹精品视频| 美女网站在线免费欧美精品| 国产日韩欧美精品| 欧美高清视频| 欧美性生活大片免费观看网址| 午夜一区二区视频| 九九在线高清精品视频| 精品中文字幕在线| 亚洲免费视频二区| 99久久亚洲一区二区三区青草| 天堂精品视频| 无码小电影在线观看网站免费| 91精品欧美久久久久久动漫| 无码人妻精品一区二区中文| 欧美人成在线| 国产欧美久久久久久| 亚洲 国产 欧美 日韩| 亚洲日本va午夜在线影院| 午夜视频在线瓜伦| 老司机成人在线| 欧美另类高清videos| 一区二区视频播放| 久久久国产综合精品女国产盗摄| 91亚洲精品国产| 99久热在线精品视频观看| 国产亚洲视频在线观看| 久久久久久少妇| 成人福利视频网站| 国产成人一区二区三区别| 日韩专区视频网站| 色青青草原桃花久久综合| 午夜精品免费观看| 久久久久久久国产精品影院| 男人日女人bb视频| 林ゆな中文字幕一区二区| 欧美激情精品久久久久久大尺度| 一区二区三区精| 国产精品欧美一级免费| 天天操天天爱天天爽| 蜜臀av免费一区二区三区| 7777免费精品视频| 手机av在线免费观看| 亚洲成人www| 国产污在线观看| 激情综合电影网| 国产精品美女诱惑| 嗯~啊~轻一点视频日本在线观看| 精品国产凹凸成av人导航| 精品人妻在线播放| 成人av动漫在线| 男的插女的下面视频| 精品精品精品| 欧美一区二区视频97| 男人天堂综合| 在线免费亚洲电影| 99久久久无码国产精品不卡| 麻豆精品视频在线观看视频| 天天操天天干天天插| 日本欧美一区二区三区乱码| 欧美中日韩免费视频| 三级成人在线| 在线播放日韩专区| 亚洲天堂久久久久| 国产精品的网站| 在线观看中文av| 国产一区二区中文| 国产厕所精品在线观看| 妞干网免费在线视频| 亚洲毛片在线看| 在线观看国产黄| 亚洲精品国产a久久久久久| 美女流白浆视频| 亚洲一区二区伦理| 亚洲一区综合| 91精品啪在线观看国产爱臀| 欧美在线视频在线播放完整版免费观看| 欧美日韩免费做爰大片| 欧美日韩国产一区二区三区地区| 91高清免费观看| 99免费精品在线| 成年网站在线播放| 欧美激情五月| 欧美日本韩国一区二区三区| 色综合久久久| 992tv成人免费影院| 超碰国产在线观看| 日韩免费成人网| 免费精品一区二区| 亚洲综合网站在线观看| 亚洲欧美色图视频| 狠狠色丁香九九婷婷综合五月| www.好吊操| 日韩精品第一区| 国产精品青青草| 国产精品伦一区二区| 久久久久免费精品国产| 国产在线电影| 精品国产青草久久久久福利| 国产天堂第一区| 亚洲成av人片观看| 人人干在线观看| 91丨九色丨尤物| 国产成人强伦免费视频网站| 免费日韩av| 男人添女人下部视频免费| 欧洲grand老妇人| 国产精品露出视频| 综合欧美精品| 国产成人综合av| 变态调教一区二区三区| 久久韩剧网电视剧| 国产98在线| 精品无人区乱码1区2区3区在线| 国产欧美综合视频| 欧美视频在线观看一区二区| 国产精品久久久久久99| 亚洲黄色av一区| 国产一区第一页| 国产亚洲欧洲997久久综合| 亚洲精品激情视频| 国产麻豆9l精品三级站| 亚洲高清免费在线观看| 日韩激情av在线| 看av免费毛片手机播放| 一区二区亚洲精品| 国产 国语对白 露脸| 国产精品毛片一区二区在线看| 久久久一本精品99久久精品| 超碰97成人| 99re在线观看| 精品国产麻豆| 91亚洲国产成人久久精品网站 | 91麻豆精品国产91久久久平台| 国产另类第一区| 北条麻妃一区二区三区在线观看 | 国产精品国产三级国产普通话三级| 国产呦小j女精品视频| www.亚洲国产| 亚洲中文字幕无码一区| 丁香天五香天堂综合| 性生交大片免费看l| 国产精品亚洲第一区在线暖暖韩国| 亚洲欧美天堂在线| 激情六月婷婷久久| 污免费在线观看| 国产98色在线|日韩| 午夜性福利视频| 国产91综合一区在线观看| 农村末发育av片一区二区| 高清在线观看日韩| 伊人久久一区二区三区| 91天堂素人约啪| 国产成人福利在线| 国产精品国产a| 国产精品国产精品88| 一区二区三区在线不卡| 精品无码久久久久| 精品久久久久久久久久国产 | 精品久久人人做人人爽| 高潮毛片7777777毛片| 亚洲国产精品久久久久| 婷婷亚洲一区二区三区| 亚洲天堂成人在线| aaa日本高清在线播放免费观看| 最新国产精品亚洲| v片在线观看| 午夜精品久久久久久久99热浪潮| 国产在线美女| 国产精品免费网站| 精品国产鲁一鲁****| 精品免费视频123区| 成人精品亚洲| 无颜之月在线看| 国产精品久久777777毛茸茸 | 亚洲精品男人的天堂| 在线观看视频91| 99热这里只有精品在线观看| 亚洲大胆人体在线| 国产在线小视频| 久久国产精品影片| 一级毛片久久久| 91色中文字幕| 日本亚洲不卡| 在线观看视频黄色| 9色精品在线| 视色视频在线观看| 成人99免费视频| 国产又粗又猛又爽又黄的视频小说| 亚洲在线视频网站| 成人一二三四区| 亚洲成人免费在线视频| 91电影在线播放| 97精品久久久中文字幕免费| 欧美爱爱视频| 久久www免费人成精品| 婷婷伊人综合| 日本免费黄视频| 国产麻豆成人精品| 亚洲精品国产精品国自| 图片区小说区区亚洲影院| 97免费观看视频| 亚洲三级 欧美三级| 日本高清在线观看| 国产精品大片wwwwww| 九色丨蝌蚪丨成人| 久久国产精品久久精品国产| 一二三区不卡| 国产 porn| 2021中文字幕一区亚洲| 久久久久亚洲av成人片| 欧美人伦禁忌dvd放荡欲情| 日本aaa在线观看| 久久99久国产精品黄毛片入口| 成人国产精选| 欧美理论一区二区| 亚洲经典三级| www日本在线观看| 亚洲人成网站精品片在线观看| 自拍偷拍校园春色| 亚洲女人天堂视频| 成人一级福利| ts人妖另类在线| 国产精品第十页| 中文字幕乱码在线人视频| 国产精品欧美久久久久一区二区| 亚洲天堂一区在线观看| 亚洲第一级黄色片| 天天色天天射天天综合网| 国产在线a不卡| 99久久www免费| 一本色道久久亚洲综合精品蜜桃| 91麻豆视频网站| 成人免费视频毛片| 日韩精品黄色网| 麻豆理论在线观看| 九九九九精品九九九九| 一区二区三区四区五区在线| 国内自拍偷拍视频| 亚洲网友自拍偷拍| 国产综合在线播放| 久久久久日韩精品久久久男男| 香蕉成人app| 国内自拍中文字幕| 国产成人在线视频播放| 中国一级片在线观看| 69久久夜色精品国产69蝌蚪网| 免费在线你懂的| 91久久国产婷婷一区二区| 亚洲国产老妈| 三大队在线观看| 亚洲一区二区av电影| 亚洲精品成人电影| 欧美第一页在线| 欧美日日夜夜| 99色精品视频| 国产精品三级电影| 91精品国产乱码久久久| 久久综合国产精品台湾中文娱乐网| 国产一区一区| a级黄色小视频| 久久综合久久99| 国产成人av免费| 成年无码av片在线| 国产精品白丝一区二区三区| 男人亚洲天堂网| 中文字幕欧美一区| 亚洲精品国产精| 国产99久久精品一区二区| 久久免费精品视频在这里| 熟妇无码乱子成人精品| 午夜精品久久久| 91在线不卡| 懂色av一区二区三区在线播放| 99日韩精品| 免费黄色激情视频| 亚洲国产天堂久久国产91| 精品成人免费一区二区在线播放| 中文字幕在线亚洲三区| 99久久夜色精品国产网站| 伊人精品一区二区三区| 久久99精品久久久久久噜噜| 精品影片在线观看的网站| www.99r| 亚洲成人免费在线| 成人在线观看一区| 风间由美一区二区三区| 奇米影视在线99精品| 久久久久久免费观看| 一本色道久久88精品综合| 亚洲一区 二区| 色多多视频在线播放| 亚洲国产wwwccc36天堂| 99中文字幕一区| 国语精品中文字幕| 精品一区二区三区视频在线观看 | 国产女主播一区二区| 日本女人一区二区三区| 精品一区二区三区人妻| 男人午夜免费视频|