socket通信原理簡(jiǎn)單理解 ktls 原理?
ktls 原理?ktl可以附加到TCP/UDP套接字上,可以直接在內(nèi)核模式下加密并由TLS封裝。TLS握手邏輯還是在用戶(hù)態(tài)完成的,這個(gè)握手協(xié)議其實(shí)是控制平面的事情。在AF_KTLS socket中,除
ktls 原理?
ktl可以附加到TCP/UDP套接字上,可以直接在內(nèi)核模式下加密并由TLS封裝。
TLS握手邏輯還是在用戶(hù)態(tài)完成的,這個(gè)握手協(xié)議其實(shí)是控制平面的事情。在AF_KTLS socket中,除了加密/解密和記錄協(xié)議封裝/解封裝之外,其他所有操作都由附屬于它的TCP/UDP so執(zhí)行。Cket,所以AF _ KTLSocket暴露在用戶(hù)態(tài)的接口就跟標(biāo)準(zhǔn)AF_INET socket的TCP/UDP socket一樣,當(dāng)然你也可以通過(guò)sendfile向它發(fā)送文件!
epoll原理是如何實(shí)現(xiàn)的?
其實(shí)在了解epoll之前,我們必須先了解一件事,那就是進(jìn)程阻塞切換的CPU開(kāi)銷(xiāo)。在高并發(fā)網(wǎng)絡(luò)IO下,性能的最大絆腳石是socket的阻塞導(dǎo)致的進(jìn)程上下文切換。關(guān)于這個(gè),我做過(guò)實(shí)際工作。測(cè)試。過(guò)程上下文切換的成本大約是3-5微秒。
有些同學(xué)可能會(huì)說(shuō),3-5微秒的成本看起來(lái)不錯(cuò)。但是你需要知道的是,從我們的開(kāi)發(fā)工程師 s的觀點(diǎn),這段時(shí)間我們換CPU褲子是沒(méi)用的。
所以epoll作為復(fù)用技術(shù)的代表,相比傳統(tǒng)的阻塞式網(wǎng)絡(luò)IO,省去了很多進(jìn)程上下文切換。Epoll涉及一組復(fù)雜的數(shù)據(jù)結(jié)構(gòu),包括紅黑樹(shù)和現(xiàn)成的鏈表(和epollwait等待隊(duì)列)。都在內(nèi)核狀態(tài)下工作。通過(guò)紅黑樹(shù)高效管理海量連接。當(dāng)數(shù)據(jù)到達(dá)時(shí),數(shù)據(jù)就緒的套接字被連續(xù)地放入就緒鏈表。
這樣,應(yīng)用層與內(nèi)核態(tài)的配合就非常容易,至少需要一個(gè)進(jìn)程來(lái)維護(hù)上千甚至上百萬(wàn)個(gè)連接。這個(gè)過(guò)程簡(jiǎn)單地進(jìn)入就緒隊(duì)列,查看是否有需要處理的就緒套接字。如果有,帶走處理。只要通過(guò)足夠的工作,epoll_wait贏得了 不要阻止這個(gè)過(guò)程。用戶(hù)進(jìn)程會(huì)一直工作,一直工作,直到epoll_wait里真的沒(méi)什么事情可做了才放棄CPU。大大減少了進(jìn)程切換的次數(shù),這就是epol。l高效的地方在哪里!
這是對(duì)epoll工作原理的總結(jié),供大家參考。
最后,讓 讓我們來(lái)談?wù)劙2柕募t黑樹(shù)。有人因?yàn)檫@種紅黑樹(shù)而誤以為epoll高效,夸大了紅黑樹(shù)的作用。其實(shí)紅黑樹(shù)的作用只是管理大量的連接,添加和刪除socket是非常高效的。。如果epoll管理的socket是固定的,實(shí)際上紅黑樹(shù)在數(shù)據(jù)接收和發(fā)送的事件管理過(guò)程中并沒(méi)有起到作用。內(nèi)核在socket上接收到數(shù)據(jù)包后,可以直接找到epitem(epoll項(xiàng))并插入。將其放入就緒隊(duì)列,等待用戶(hù)進(jìn)程取走事件。在這個(gè)過(guò)程中,紅黑樹(shù)的作用不會(huì)體現(xiàn)出來(lái)。