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ù)……