原创 11.3 TCP內核同步
11.3.1 鎖的結構 由2.1 Socket系統調用我們知道,一個TCP socket在內核有一個數據結構,這個數據結構是不能被兩個及其以上的使用者同時訪問的,否則就會由於數據不一致導致嚴重的問題。在Linux中,TC
原创 10.2 發送緩存管理
應用進程使用TCP發送的數據會先放入發送緩存中,TCP的發送緩存是一個skb隊列。這個隊列存在的意義是:保證應用進程交付TCP的數據能夠可靠地交付目的端。在收到對端的ACK之前,發送緩存中的數據不能刪除。 10.2.1 使
原创 9.6 堅持(Persist)定時器
9.6.1 Why 數據發送方收到接收方的通告窗口爲0時,就不能再發送數據,一直等到對方發送窗口更新爲止。但對端發送的窗口更新報文可能會丟失,如果發送方只是等待的話會導致數據傳輸會一直停滯,最後連接會被斷開。這時堅持定時
原创 OpenSSL-Async mode
一、Async mode的功能 Asyn mode是OpenSSL支持異步I/O(AIO)的模式,在這個模式下openssl把硬件加速卡等不佔用cpu的操作剝離出來,單獨交給一個叫asyn job的結構去做。在asyn job執行的過程中
原创 12.2 擁塞控制簡介
12.1.1 擁塞控制的作用 網絡的帶寬是有限的,如果到達通信子網中某一部分的包數量過多,使得該部分網絡來不及處理,以致引起這部分乃至整個網絡性能下降的現象,嚴重時甚至會導致網絡通信業務陷入停頓, 這種現象就是網絡擁塞。如果
原创 9.5 尾部丟失探測(Tail Loss Probe)定時器
9.5.1 Why 在9.4節中,我們瞭解到如果擁塞窗口較小且數據的最後一段數據丟失時,快速重傳算法會因爲無法收到足夠數量的ACK而無法及時重傳丟失的報文。尾部丟失探測(Tail Loss Probe)定時器就是爲了解決這
原创 RFC 8446 TLS 1.3(翻譯進度:第4章)
1. 介紹 TLS 的主要目標是爲通信的雙方提供一個安全的通道;對下層傳輸的唯一要求是一個可靠的,有序的數據流。特別的地,安全通道應該提供如下屬性: - 認證: 通道的server端應該總是被認證的;client端可以選擇
原创 11.2 epoll系統調用
在完成listen系統調用後,作爲TCP Server的進程就可以等待接受連接請求了。當請求到來時,進程需要調用accept系統調用生成一個新的socket,並用之與客戶端傳輸數據。這時進程需要管理的socket有兩類:1
原创 10.1 緩存管理簡介
TCP連接在進行數據傳輸時內存的佔用主要發生在: (1)發送隊列(包括Small Queue) (2)接收隊列(包括亂序隊列、prequeue隊列、異步等待隊列、backlog隊列) TCP的內存資源主要有
原创 11.1 I/O模型概覽
在1.3 C/S模式中,server端只有一個進程,等待連接時先進行阻塞accept系統調用,新連接到來時阻塞解除,然後進程使用read、write系統調用進行數據收發,最後調用close系統調用關閉新連接的socket。
原创 搭建PXE網絡啓動服務器安裝CentOS7系統
一、服務器系統安裝 PXE服務器使用CentOS7-x86_64位系統。最好配置上網權限,這樣能夠用yum方便地安裝軟件包。 二、安裝TFTP服務 首先安裝tftp軟件包:yum install -y tf
原创 9.7 保活(Keepalive)定時器
9.7.1 Why 當單工模式下TCP數據發送方發送了一些數據後就不再發數據,數據接收方也不會發送報文,這時TCP連接處於靜止狀態(比如Telnet應用)。保活功能可以使用保活定時器向對端發送探測報文來確定對端的連接是否正
原创 9.8 延遲ACK定時器
9.8.1 Why TCP在收到數據後必須發送ACK給對端,但如果每收到一個包就給一個ACK的話會使得網絡中被注入過多報文。TCP的做法是在收到數據時不立即發送ACK,而是設置一個定時器,如果在定時器超時之前有數據發送給對
原创 9.9 FIN_WAIT2定時器
9.9.1 Why 如果應用進程調用close系統調用關閉socket,但此時socket與對端的通信尚未完成,則這個socket被稱爲“孤兒socket”。如果孤兒socekt進入FIN_WAIT2狀態(或socket進
原创 12.1 抵達魚人島
現在我們要進入TCP協議中最複雜也是最關鍵的部分——擁塞控制。如果TCP是一個巨人,我們之前所研究的只是這個巨人的外形、肌肉和骨骼,