python服務(wù)器高并發(fā)編程

python服務(wù)器高并發(fā)編程

1.socket相關(guān)概念

注意:請別關(guān)注圖從哪里來,我只是想把知識(shí)點(diǎn)講清楚

  • 進(jìn)程與進(jìn)程通信的方式
  • [ ] 管道(無名、高級、有名)
  • [ ] 消息隊(duì)列(message queue)
  • [ ] 信號(hào)量
  • [ ] 信號(hào)
  • [ ] 共享內(nèi)存
  • [ ] 套接字

注意:本篇只討論socket通信,其他進(jìn)程間的方式不去論述,羅列的原因是為了說明socket本質(zhì)就是為了解決進(jìn)程間的通信問題,尤其是網(wǎng)絡(luò)上兩個(gè)進(jìn)程通信的問題。

  • socket地址 = ip地址 + 端口號(hào)
ip地址:唯一定位一個(gè)網(wǎng)絡(luò)主機(jī)
端口號(hào):唯一映射一個(gè)需要網(wǎng)絡(luò)服務(wù)的進(jìn)程

socket地址解決了兩個(gè)進(jìn)程通信時(shí)如何相互定位的問題。具體通信時(shí),數(shù)據(jù)怎么傳輸,傳輸多少,那就是Tcp/ip協(xié)議的相關(guān)內(nèi)容了!

這里簡單的描述一下TCP和UDP

上個(gè)圖:網(wǎng)絡(luò)中,不同的層解決不同的問題,因而每一層有個(gè)頭,上層消息被包裹在下層消息體中,其中進(jìn)程間通信的socket數(shù)據(jù)包被包裹在ip包中。


image

image
  • [ ] 1.在鏈路層,由以太網(wǎng)的物理特性決定了數(shù)據(jù)幀的長度為(46+18)-(1500+18),其中的18是數(shù)據(jù)幀的頭和尾,也就是說數(shù)據(jù)幀的內(nèi)容最大為1500(不包括幀頭和幀尾),即MTU(Maximum
  • [ ] Transmission Unit)為1500;
  • [ ] 2.在網(wǎng)絡(luò)層,因?yàn)镮P包的首部要占用20字節(jié),所以這的MTU為1500-20=1480;
  • [ ] 3.在傳輸層:每次傳輸?shù)臄?shù)據(jù)包受到IP包長度的限制,每個(gè)數(shù)據(jù)包連頭部不能超過IP報(bào)的MTU
UDP包是將所有的數(shù)據(jù)放在一個(gè)IP包中傳輸,而UDP包的首部要占用8字節(jié),所以UTP的MTU為1480-8=1472;

TCP則先通過一定的交互建立連接,然后將數(shù)據(jù)切片發(fā)送--具體里面的協(xié)議就不講了!

Tcp數(shù)據(jù)包的圖:TCP連接一旦建立,則開始分片發(fā)送數(shù)據(jù)


image
  • 啰嗦一下TCP三次握手,四次揮手
    首先上圖:
image

問題1:為什么要進(jìn)行第三次握手

第一次握手,客戶端和服務(wù)器一發(fā)一答代表雙方活著,可以發(fā)送數(shù)據(jù)。

而,客戶端再發(fā)一次應(yīng)答的原因:主要是為了防止已失效的連接請求報(bào)文段又突然傳送給B,從而產(chǎn)生了錯(cuò)誤。
問題2:為什么要進(jìn)行四次揮手
過程:

第一次揮手:主機(jī)1向主機(jī)2,發(fā)送FIN報(bào)文段,表示關(guān)閉數(shù)據(jù)傳送,并主機(jī)1進(jìn)入FIN_WAIT_1狀態(tài),表示沒有數(shù)據(jù)要傳輸了 
第二次揮手:主機(jī)2收到FIN報(bào)文段后進(jìn)入CLOSE_WAIT狀態(tài)(被動(dòng)關(guān)閉),然后發(fā)送ACK確認(rèn),表示同意你關(guān)閉請求了,主機(jī)到主機(jī)的數(shù)據(jù)鏈路關(guān)閉,主機(jī)進(jìn)入FIN_WAIT_2狀態(tài) 
第三次揮手:主機(jī)2等待主機(jī)1發(fā)送完數(shù)據(jù),發(fā)送FIN到主機(jī)1請求關(guān)閉,主機(jī)2進(jìn)入LAST_ACK狀態(tài) 
第四次揮手:主機(jī)1收到主機(jī)2發(fā)送的FIN后,回復(fù)ACK確認(rèn)到主機(jī)2,主機(jī)1進(jìn)入TIME_WAIT狀態(tài)。主機(jī)2收到主機(jī)1的ACK后就關(guān)閉連接了,狀態(tài)為CLOSED。主機(jī)1等待2MSL,仍然沒有收到主機(jī)2的回復(fù),說明主機(jī)2已經(jīng)正常關(guān)閉了,主機(jī)1關(guān)閉連接。

為什么:
我告訴你的原因是為了保證TCP的穩(wěn)健性,具體的情況很多,我也說不清楚!


待續(xù)……

2.select相關(guān)原理

3.poll原理

4.epoll原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,367評論 6 174
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • 11.1 引言 UDP是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都正好產(chǎn)生一個(gè)UDP數(shù)據(jù)報(bào),并組裝成一...
    張芳濤閱讀 2,971評論 1 6
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,079評論 1 13
  • 設(shè)想出一個(gè)心臟 收集了所有的坎坷溫柔做作 你可以假設(shè) 但你卻無法否定 對于生活對于交換的一切物質(zhì) 若你爛醉我也不該...
    曹林杰閱讀 363評論 0 0

友情鏈接更多精彩內(nèi)容