
第一部分 WEB基礎(chǔ).png
1. 網(wǎng)絡(luò)模型
網(wǎng)絡(luò)模型.png
2. TCP三次握手
- 三次握手是指TCP建立連接需要客戶端和服務(wù)器一共發(fā)三個(gè)包。
- 三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào),交換窗口大小信息。在socket編程中,客戶端執(zhí)行connect()時(shí),將觸發(fā)三次握手。
- 位碼即TCP標(biāo)志位,有6種標(biāo)示:
SYN(synchronous建立聯(lián)機(jī)) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號(hào)碼) Acknowledge number(確認(rèn)號(hào)碼)
- 第一次握手(SYN=1, seq=x):
客戶端發(fā)送一個(gè) 標(biāo)志位 SYN =1,隨機(jī)生成seq number=123456的tcp數(shù)據(jù)包,服務(wù)器解析到SYN=1就知道客戶端要求建立連接。
發(fā)送完畢后,客戶端進(jìn)入 SYN_SEND 狀態(tài)。- 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
主機(jī)B收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送ack number=(主機(jī)A的seq+1),syn=1,ack=1,隨機(jī)產(chǎn)生seq=7654321的包。
發(fā)送完畢后,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。第三次握手(ACK=1,ACKnum=y+1)
主機(jī)A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機(jī)A會(huì)再發(fā)送ack number=(主機(jī)B的seq+1),ack=1,主機(jī)B收到后確認(rèn)seq值與ack=1則連接建立成功。
發(fā)送完畢后,客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)器端接收到這個(gè)包時(shí),也進(jìn)入 ESTABLISHED 狀態(tài),TCP 握手結(jié)束。
tcp-connection-made-three-way-handshake.png
3. HTTP連接處理過(guò)程
- 客戶端發(fā)起請(qǐng)求,訪問(wèn)url
- DNS解析url,轉(zhuǎn)換成對(duì)應(yīng)的IP地址
- 客戶端訪問(wèn)到對(duì)應(yīng)的IP和端口號(hào),建立一條與服務(wù)器的TCP連接
- 客戶端向服務(wù)器發(fā)送HTTP請(qǐng)求報(bào)文
- 服務(wù)器返回HTTP響應(yīng)報(bào)文
- 關(guān)閉連接
4. 提高HTTP連接性能
- 并行連接
通過(guò)建立多條tcp連接并發(fā)進(jìn)行http請(qǐng)求。并行連接不一定更快。- 持久連接
HTTP/1.1(以及HTTP/1.0的各種增強(qiáng)版本)允許HTTP設(shè)備在事務(wù)處理結(jié)束之后將TCP連接保持在打開(kāi)狀態(tài),以便為未來(lái)的HTTP請(qǐng)求重用現(xiàn)存的連接。- 管道化連接
在響應(yīng)到達(dá)之前,可以將多條請(qǐng)求放入隊(duì)列。

