簡單記錄下socket之核心操作(之前面試有被問到socket傳送訊息在作業系統底層是怎麼弄的)
首先 客戶端和服務端建立好socket套接字的時候,雙方都可以通過套接字進行訊息的收發,因為socket中維護了兩個佇列,傳送佇列和接受佇列。
傳送時,資料儲存在使用者的記憶體中,使用者呼叫send和write方法時將待傳送的資料依據mss進行拆分,將拆分好的資料拷貝到核心空間的傳送佇列,該佇列存放了所有已傳送的包,有個資料結構sk_buff儲存的就是資料報的資訊,每個包都有乙個序號,和乙個狀態碼,只有當服務端返回ack時,才會把狀態碼改為成功,而且會將該ack報文之前的敖文都確認掉,如果長期沒確認,會重新呼叫tcp_push傳送,如果傳送佇列慢了,則從使用者空間拷貝到核心空間的操作就會阻塞,並清理佇列中已經處理過的包。tcp層會將資料報加上ip頭然後給ip層處理,ip層將資料報加入到乙個qdisc網絡卡驅動程式檢測到qdisc有資料就會呼叫dma engine將sk_buff拷貝到網絡卡並傳送出去,網絡卡驅動通過ringbuffer來指向核心中的資料,因此qdisc的長度也會影響到網路傳送的吞吐量。
Socket 核心原理分享
socket 的個人故事。希望通過這篇文章讓你弄懂什麼是 socket,明白 tcp 和 udp 協議的通訊,明白長連線和短連線的優缺點,明白 bio nio aio的區別。我很榮幸能與 tcp ip 五層模型中的各位大佬站在一起,但我並不屬於他們中的任何一層。我的存在只是為了讓應用層的使用者能更簡...
Socket 核心原理分享
閃念基因 2020 09 21 10 38 58 出處 socket 的個人故事。希望通過這篇文章讓你弄懂什麼是 socket,明白 tcp 和 udp 協議的通訊,明白長連線和短連線的優缺點,明白 bio nio aio的區別。我很榮幸能與 tcp ip 五層模型中的各位大佬站在一起,但我並不屬於...
Socket 核心原理分享
socket 的個人故事。希望通過這篇文章讓你弄懂什麼是 socket,明白 tcp 和 udp 協議的通訊,明白長連線和短連線的優缺點,明白 bio nio aio的區別。我很榮幸能與 tcp ip 五層模型中的各位大佬站在一起,但我並不屬於他們中的任何一層。我的存在只是為了讓應用層的使用者能更簡...