亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > TCP第三次握手傳數據過程圖解

TCP第三次握手傳數據過程圖解

熱門標簽:激光標記地圖標注 企業辦理400電話收費標準 電銷智能機器人試用 撫州市城區地圖標注 中國地圖標注上各個省 智能電銷機器人真的有用么 新鄉牧野400電話申請 高德地圖標注足跡怎么打標 百度地圖底圖標注

RFC793文檔里帶有SYN標志的過程包是不可以攜帶數據的,也就是說三次握手的前兩次是不可以攜帶數據的(邏輯上看,連接還沒建立,攜帶數據好像也有點說不過去)。重點就是第三次握手可不可以攜帶數據。

先說結論:TCP協議建立連接的三次握手過程中的第三次握手允許攜帶數據。

對照著上邊的TCP狀態變化圖的連接建立部分,我們看下RFC793文檔的說法。RFC793文檔給出的說法如下(省略不重要的部分):

重點是這句 “Data or controls which were queued for transmission may be included”,也就是說標準表示,第三次握手的ACK包是可以攜帶數據。

首先, 第三次握手的包是由連接發起方(以下簡稱客戶端)發給端口監聽方(以下簡稱服務端)的,所以只需要找到內核協議棧在一個連接處于SYN-RECV(圖中的SYN_RECEIVED)狀態時收到包之后的處理過程即可。經過一番搜索后找到了,位于 net\ipv4目錄下tcp_input.c文件中的tcp_rcv_state_process函數處理這個過程。如圖:

這個函數實際上是個TCP狀態機,用于處理TCP連接處于各個狀態時收到數據包的處理工作。這里有幾個并列的switch語句,因為函數很長,所以比較容易看錯層次關系。下圖是精簡了無需關注的代碼之后SYN-RECV狀態的處理過程:

一定要注意這兩個switch語句是并列的。所以當TCP_SYN_RECV狀態收到合法規范的二次握手包之后,就會立即把socket狀態設置為TCP_ESTABLISHED狀態,執行到下面的TCP_ESTABLISHED狀態的case時,會繼續處理其包含的數據(如果有)。

上面表明了,當客戶端發過來的第三次握手的ACK包含有數據時,服務端是可以正常處理的。那么客戶端那邊呢?那看看客戶端處于SYN-SEND狀態時,怎么發送第三次ACK包吧。如圖:

tcp_rcv_synsent_state_process函數的實現比較長,這里直接貼出最后的關鍵點:

一目了然吧?if 條件不滿足直接回復單獨的ACK包,如果任意條件滿足的話則使用inet_csk_reset_xmit_timer函數設置定時器等待短暫的時間。這段時間如果有數據,隨著數據發送ACK,沒有數據回復ACK。

之前的疑問算是解決了。

條件1:sk->sk_write_pending != 0

這個值默認是0的,那什么情況會導致不為0呢?答案是協議棧發送數據的函數遇到socket狀態不是ESTABLISHED的時候,會對這個變量做++操作,并等待一小會時間嘗試發送數據。看圖:

net/core/stream.c里的sk_stream_wait_connect函數做了如下操作:

sk->sk_write_pending遞增,并且等待socket連接到達ESTABLISHED狀態后發出數據。這就解釋清楚了。

Linux socket的默認工作方式是阻塞的,也就是說,客戶端的connect調用在默認情況下會阻塞,等待三次握手過程結束之后或者遇到錯誤才會返回。那么nc這種完全用阻塞套接字實現的且沒有對默認socket參數進行修改的命令行小程序會乖乖等待connect返回成功或者失敗才會發送數據的,這就是我們抓不到第三次握手的包帶有數據的原因。

那么設置非阻塞套接字,connect后立即send數據,連接過程不是瞬間連接成功的話,也許有機會看到第三次握手包帶數據。不過開源的網絡庫即便是非阻塞socket,也是監聽該套接字的可寫事件,再次確認連接成功才會寫數據。為了節省這點幾乎可以忽略不計的性能,真的不如安全可靠的代碼更有價值。

條件2:icsk->icsk_accept_queue.rskq_defer_accept != 0

這個條件好奇怪,defer_accept是個socket選項,用于推遲accept,實際上是當接收到第一個數據之后,才會創建連接。tcp_defer_accept這個選項一般是在服務端用的,會影響socket的SYN和ACCEPT隊列。默認不設置的話,三次握手完成,socket就進入accept隊列,應用層就感知到并ACCEPT相關的連接。當tcp_defer_accept設置后,三次握手完成了,socket也不進入ACCEPT隊列,而是直接留在SYN隊列(有長度限制,超過內核就拒絕新連接),直到數據真的發過來再放到ACCEPT隊列。設置了這個參數的服務端可以accept之后直接read,必然有數據,也節省一次系統調用。

SYN隊列保存SYN_RECV狀態的socket,長度由net.ipv4.tcp_max_syn_backlog參數控制,accept隊列在listen調用時,backlog參數設置,內核硬限制由 net.core.somaxconn 限制,即實際的值由min(backlog,somaxconn) 來決定。

有意思的是如果客戶端先bind到一個端口和IP,然后setsockopt(TCP_DEFER_ACCEPT),然后connect服務器,這個時候就會出現rskq_defer_accept=1的情況,這時候內核會設置定時器等待數據一起在回復ACK包。我個人從未這么做過,難道只是為了減少一次ACK的空包發送來提高性能?哪位同學知道煩請告知,謝謝。

條件3:icsk->icsk_ack.pingpong != 0

pingpong這個屬性實際上也是一個套接字選項,用來表明當前鏈接是否為交互數據流,如其值為1,則表明為交互數據流,會使用延遲確認機制。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:延安 海西 邯鄲 忻州 南通 辛集 臨汾 西安

巨人網絡通訊聲明:本文標題《TCP第三次握手傳數據過程圖解》,本文關鍵詞  TCP,第三次,握手,傳,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《TCP第三次握手傳數據過程圖解》相關的同類信息!
  • 本頁收集關于TCP第三次握手傳數據過程圖解的相關信息資訊供網民參考!
  • 推薦文章
    国产亚洲男人的天堂在线观看| 午夜在线观看视频免费 成人| 999久久66久6只有精品| 午夜激情视频在线观看| 一级女性全黄生活片免费| 欧美日本免费| 日韩男人天堂| 午夜精品国产自在现线拍| 日日日夜夜操| 精品久久久久久综合网| 国产视频一区二区在线播放| 精品视频免费看| 成人高清视频在线观看| 亚洲 欧美 91| 黄色短视频网站| 日本免费看视频| 亚洲第一页乱| 精品国产一区二区三区国产馆| 91麻豆国产福利精品| 国产成人精品一区二区视频| 国产视频在线免费观看| 韩国妈妈的朋友在线播放| 可以免费看毛片的网站| 日韩在线观看免费| 国产91素人搭讪系列天堂| 午夜欧美福利| 欧美一级视频免费观看| 成人免费网站视频ww| 91麻豆国产福利精品| 国产视频一区二区在线观看| 免费的黄视频| 麻豆系列国产剧在线观看| 久久国产精品永久免费网站| 高清一级片| 欧美另类videosbestsex| 国产激情一区二区三区| 99色视频在线| 九九久久国产精品| 国产网站在线| 成人高清护士在线播放| 亚洲天堂免费| 欧美激情一区二区三区在线| 久草免费资源| 一a一级片| 精品美女| 国产一区二区精品| 亚欧视频在线| 成人影院一区二区三区| 久久精品免视看国产成人2021| 欧美日本免费| 天天色成人| 欧美大片a一级毛片视频| 黄色短视频网站| 精品国产一区二区三区久久久狼| 黄视频网站免费观看| 久久精品大片| 国产视频一区二区在线观看| 国产成人精品一区二区视频| 九九九在线视频| 亚洲天堂免费| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品国产亚洲人成在线| 国产美女在线观看| 97视频免费在线| 日韩中文字幕在线亚洲一区| 四虎影视久久| 日韩专区在线播放| 黄视频网站在线免费观看| 精品国产香蕉伊思人在线又爽又黄| 香蕉视频久久| 日韩一级黄色| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩在线观看视频免费| 国产一区二区精品久| 99久久精品国产麻豆| 精品久久久久久影院免费| 香蕉视频三级| 天天做人人爱夜夜爽2020| 精品视频在线观看一区二区| 免费一级片网站| 青青久在线视频| 国产亚洲精品成人a在线| 精品久久久久久中文| 日日日夜夜操| 亚洲www美色| 韩国三级视频网站| 二级特黄绝大片免费视频大片| 青青久热| 国产一区二区精品久| 精品在线观看国产| 亚洲 欧美 91| 日本伦理黄色大片在线观看网站| 台湾毛片| 国产一区国产二区国产三区| 可以免费看毛片的网站| 午夜激情视频在线观看| 黄视频网站在线看| 日韩专区亚洲综合久久| 国产成人啪精品| 免费毛片播放| 四虎影视久久久| 天天做日日干| 九九免费精品视频| 国产亚洲免费观看| 麻豆系列 在线视频| 国产a免费观看| 在线观看导航| 国产麻豆精品视频| 国产高清在线精品一区a| 色综合久久天天综合绕观看| 中文字幕一区二区三区 精品| 欧美一级视| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产精品12| 日本在线www| 久久国产影院| 国产成人精品一区二区视频| 国产高清在线精品一区二区| 欧美激情伊人| 久久精品免视看国产成人2021| 日韩中文字幕一区| 九九久久国产精品| 欧美激情一区二区三区视频| 欧美激情一区二区三区视频| 亚久久伊人精品青青草原2020| 欧美大片aaaa一级毛片| 成人高清视频免费观看| 日韩免费片| 国产a视频| 999久久狠狠免费精品| 精品在线免费播放| 精品国产香蕉伊思人在线又爽又黄| 国产麻豆精品高清在线播放| 可以免费在线看黄的网站| a级毛片免费全部播放| 九九干| 成人av在线播放| 国产欧美精品| 免费毛片播放| 91麻豆爱豆果冻天美星空| 日日日夜夜操| 黄视频网站免费观看| 四虎影视库| 午夜激情视频在线观看| 高清一级做a爱过程不卡视频| 美女免费黄网站| 久久久久久久免费视频| 精品视频在线看| 久久久久久久网| 色综合久久天天综合绕观看| 日韩一级精品视频在线观看| 精品国产一区二区三区精东影业| 精品国产亚洲人成在线| 国产不卡精品一区二区三区| 久久精品大片| 麻豆系列 在线视频| 99热精品在线| 成人在激情在线视频| 日韩专区亚洲综合久久| 国产视频网站在线观看| 久久国产影院| 二级特黄绝大片免费视频大片| 沈樵在线观看福利| 欧美国产日韩久久久| 欧美1区| 日本伦理黄色大片在线观看网站| 夜夜操天天爽| 日本伦理片网站| 尤物视频网站在线观看| 午夜欧美福利| 国产伦精品一区二区三区在线观看| 999精品在线| 午夜激情视频在线观看| 国产成人女人在线视频观看| 麻豆午夜视频| 亚洲天堂免费| 99久久精品国产麻豆| 精品视频一区二区三区免费| 成人高清视频免费观看| 九九久久99综合一区二区| 天堂网中文字幕| 沈樵在线观看福利| 九九久久99综合一区二区| 欧美18性精品| 国产成人精品影视| 免费一级生活片| 亚洲 激情| 精品久久久久久中文字幕2017| 国产激情视频在线观看| 久久精品店| 日韩在线观看视频黄| 99热精品在线| 成人免费网站久久久| 国产成人精品一区二区视频| 日本特黄特黄aaaaa大片| 成人高清视频在线观看| 精品国产一区二区三区免费| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 韩国妈妈的朋友在线播放| 国产高清视频免费|