開發(fā)人員必須知道的網(wǎng)絡(luò)基礎(chǔ)知識(shí)
一、五層網(wǎng)絡(luò)模型
1. 主要的網(wǎng)絡(luò)協(xié)議
以下每層列出的協(xié)議,都能夠在代碼或者操作系統(tǒng)中使用和管理,當(dāng)程序進(jìn)行網(wǎng)絡(luò)通信時(shí),需要由這些協(xié)議共同協(xié)作完成。
應(yīng)用層,包括HTTP、TLS(SSL3.1)、DNS、Thrift、FTP等
傳輸層,TCP(傳輸控制協(xié)議)、UDP(用戶報(bào)文協(xié)議)
網(wǎng)絡(luò)層,IP(網(wǎng)際協(xié)議)
鏈路層,ARP(地址解析協(xié)議)
物理層,該層與硬件關(guān)系更為緊密,無(wú)需太過關(guān)注

程序運(yùn)行過程圖解
2. 網(wǎng)絡(luò)通信的過程
網(wǎng)絡(luò)通信的過程
在程序中發(fā)送HTTPS請(qǐng)求時(shí),數(shù)據(jù)經(jīng)過各層的處理,最終到達(dá)目標(biāo)地址。對(duì)各層處理的主要部分進(jìn)行了描述,其中第1、2、3步在程序中進(jìn)行,第4、5、6步在操作系統(tǒng)內(nèi)核中進(jìn)行,第7步由硬件設(shè)備完成,下面對(duì)每一步進(jìn)行詳細(xì)描述:
DNS解析將域名轉(zhuǎn)換為IPv4或IPv6地址,它依托于UDP協(xié)議向DNS服務(wù)器發(fā)送查詢請(qǐng)求并獲取響應(yīng)信息。
HTTP報(bào)文由程序中的httpclient工具生成,包含用戶設(shè)置的HTTP相關(guān)參數(shù)(URL、header、body等)。
TLS協(xié)議通過四次握手機(jī)制協(xié)商出公鑰/私鑰,客戶端生成“會(huì)話密鑰”由公鑰加密發(fā)送到服務(wù)端,服務(wù)端通過私鑰解密獲取,最終使用該“會(huì)話密鑰”對(duì)HTTP報(bào)文進(jìn)行加密。
TCP連接通過三次握手機(jī)制建立,HTTP報(bào)文以字節(jié)流形式寫入,發(fā)送的數(shù)據(jù)都需要經(jīng)過“發(fā)送-確認(rèn)”的過程,以保證其完整送達(dá)到指定IP地址。
IP數(shù)據(jù)包將字節(jié)流按MTU大小進(jìn)行拆分,局域網(wǎng)內(nèi)通常為1500字節(jié),互聯(lián)網(wǎng)通常為512字節(jié)。IP數(shù)據(jù)包的頭信息上記錄了發(fā)送者IP和接收者IP。
MAC幀在發(fā)送時(shí),實(shí)際無(wú)法直接發(fā)送到指定的IP地址,需要內(nèi)核根據(jù)路由表中記錄的信息(本地路由表查看命令route -n),通過“IP地址與子網(wǎng)掩碼”進(jìn)行“與運(yùn)算”得到下一跳的網(wǎng)關(guān)IP。然后,鏈路層通過ARP協(xié)議獲取網(wǎng)關(guān)IP的MAC地址(本地ARP緩存表查看命令arp -a),將發(fā)送者M(jìn)AC地址和網(wǎng)關(guān)MAC地址封裝到MAC幀中。
二、關(guān)鍵的外部服務(wù)
上一節(jié)描述的網(wǎng)絡(luò)通信過程,需要多種外部服務(wù)的參與才能完成,包括DNS服務(wù)、CA服務(wù)、路由器、ISP服務(wù)。
1. DNS服務(wù)
DNS服務(wù)器由DNS服務(wù)提供商進(jìn)行管理,提供根據(jù)域名查詢IP地址的服務(wù),常見的DNS服務(wù)提供商有中國(guó)電信(114.114.114.114)和谷歌(8.8.8.8),Linux系統(tǒng)中在文件/etc/resolv.conf中和目錄/etcc/sysconfig/network-scripts/下使用cat命令查看配置的DNS服務(wù)器IP地址。
2. CA頒發(fā)與驗(yàn)證服務(wù)
CA服務(wù)器提供了TLS協(xié)議中需要的證書頒發(fā)服務(wù),在TLS進(jìn)行四次握手時(shí)通過CA服務(wù)驗(yàn)證服務(wù)器提供的證書是否可信。瀏覽器內(nèi)置了多種CA服務(wù)器的地址,并且也可以在本地配置證書進(jìn)行驗(yàn)證(如:12306.cn需要在瀏覽器安裝私有證書)。
3. 路由器
路由器是個(gè)人電腦發(fā)送IP數(shù)據(jù)包到互聯(lián)網(wǎng)的第一道網(wǎng)關(guān),路由器內(nèi)置了相關(guān)ISP服務(wù)器的信息。
4. ISP服務(wù)器
ISP(Internet Service Provider)互聯(lián)網(wǎng)服務(wù)提供商(如:中國(guó)電信、中國(guó)聯(lián)通)是網(wǎng)絡(luò)服務(wù)的關(guān)鍵角色,ISP服務(wù)器的作用與路由器相同,它們記錄了龐大的路由表提供給數(shù)據(jù)鏈路層進(jìn)行查詢。當(dāng)我們想要將自己的服務(wù)器接入到互聯(lián)網(wǎng)中,需要付費(fèi)給ISP進(jìn)行注冊(cè),本質(zhì)就是在ISP服務(wù)添加了自己服務(wù)器的路由信息(實(shí)際還涉及到光纖建設(shè)等物理層實(shí)施,這里不做描述)。