一、OSI七層協(xié)議(參考模型):
應(yīng)用層:規(guī)定發(fā)送發(fā)和接收方必須使用一個(gè)固定長(zhǎng)度的消息頭,消息頭必須使用某種固定的組成,且消息頭中必須記錄消息體的相關(guān)信息。HTTP協(xié)議。數(shù)據(jù)。
表示層:解決不同系統(tǒng)之間的通信語(yǔ)法問(wèn)題。數(shù)據(jù)。
會(huì)話層:建立和管理應(yīng)用程序之間的通信。保證應(yīng)用程序自動(dòng)收發(fā)包和尋址。數(shù)據(jù)。
傳輸層:解決了數(shù)據(jù)之間的傳輸。接受上一層的數(shù)據(jù),在必要的時(shí)候把數(shù)據(jù)進(jìn)行分割,并將這些數(shù)據(jù)交給網(wǎng)絡(luò)層,且保證這些數(shù)據(jù)段有效到達(dá)對(duì)端。 TCP/UDP協(xié)議。分段。
網(wǎng)絡(luò)層:如何找到目標(biāo)節(jié)點(diǎn),選擇最佳路徑。主要功能是將網(wǎng)絡(luò)地址轉(zhuǎn)換為物理地址。路由器工作于該層。該層的數(shù)據(jù)為數(shù)據(jù)包。分組。
數(shù)據(jù)鏈路層:在比特流傳輸過(guò)程中存在錯(cuò)傳或者傳輸不完整的可能,該層定義了如何格式化數(shù)據(jù)以進(jìn)行傳輸和控制對(duì)物理介質(zhì)的訪問(wèn)。通常還有數(shù)據(jù)檢測(cè)和糾正以確保數(shù)據(jù)傳輸?shù)目煽啃?。該層將?shù)據(jù)包裝成幀。交換機(jī)工作于該層。
物理層:解決兩臺(tái)物理機(jī)之間的通信需求,機(jī)器A向機(jī)器B發(fā)送比特流。主要作用傳輸比特流,即0101001的二進(jìn)制轉(zhuǎn)換為電流。網(wǎng)卡工作于該層。
二、TCP/IP標(biāo)準(zhǔn)模型:

TCP協(xié)議:面向鏈接的(握手)和可靠數(shù)據(jù)傳輸服務(wù),有序(序號(hào)),速度慢。
UDP協(xié)議:輕量級(jí)運(yùn)輸協(xié)議,無(wú)連接的。
TCP和UDP都沒(méi)有提供任何加密機(jī)制,安全套接字層(SSL),用SSL加強(qiáng)后的TCP不僅能夠做傳統(tǒng)TCP所能做的一切,而且提供了關(guān)鍵的進(jìn)程到進(jìn)程的安全性服務(wù),包括加密、數(shù)據(jù)完整性和端點(diǎn)鑒別。
| 應(yīng)用 | 應(yīng)用層協(xié)議 | 支撐的運(yùn)輸協(xié)議 |
|---|---|---|
| 電子郵件 | SMTP | TCP |
| 遠(yuǎn)程終端訪問(wèn) | Telnet | TCP |
| Web | HTTP | TCP |
| 文件傳輸 | FTP | TCP |
| 流式多媒體 | HTTP | TCP |
| 因特網(wǎng)電話 | SIP、RTP | UDP或TCP |
A、HTTP:請(qǐng)求頭
GET /index.html HTTP/1.0
Host:www.google.com
Connection:close
User-agent:Mozille/5.0
Accept-language:fr
B、Cookie:有四個(gè)組件:
1、在HTTP響應(yīng)報(bào)文中的一個(gè)cookie首部行
2、在HTTP請(qǐng)求報(bào)文中的一個(gè)cookie首部行
3、在用戶端系統(tǒng)中保留一個(gè)cookie文件,并由用戶的瀏覽器進(jìn)行管理
4、位于Web站點(diǎn)的一個(gè)后段數(shù)據(jù)庫(kù)
C、DNS解析過(guò)程:
1、瀏覽器檢查緩存中有沒(méi)有這個(gè)域名對(duì)應(yīng)的解析過(guò)的IP。
2、瀏覽器中不存在,檢查操作系統(tǒng)中是否存在。windows配置文件 C:\Windows\System32\driver\etc\hosts;linux配置文件/etc/hots
3、本地區(qū)域名服務(wù)器LDNS,也就是網(wǎng)絡(luò)設(shè)置中配置的DNS
4、如果LDNS仍飯沒(méi)有命中,直接到根域名服務(wù)器Root Server域名服務(wù)器請(qǐng)求解
5、根域名服務(wù)器會(huì)返回給本地域名服務(wù)器一個(gè)所查詢的主域名服務(wù)器(gTLD Server地址),gTLD是頂級(jí)域名服務(wù)器。
6、本地域名再向上一步分會(huì)gTLD服務(wù)器發(fā)送請(qǐng)求。
7、接收請(qǐng)求的gTLD服務(wù)器查找并返回此域名對(duì)應(yīng)的Name Server域名服務(wù)器的地址,這個(gè)Name Server通常就是你注冊(cè)的域名服務(wù)器,那么這個(gè)域名解析任務(wù)就由這個(gè)域名提供商的服務(wù)器來(lái)完成。
8、Name Server域名服務(wù)器會(huì)查詢域名和IP的映射關(guān)系,返回IP和TTL(time to line 最大緩存時(shí)間)
9、返回該域名的IP和TTL值,LDNS會(huì)緩存這個(gè)域名和IP的對(duì)應(yīng)關(guān)系,緩存的時(shí)間由TTL值控制。
吧解析的記過(guò)返回給用戶,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過(guò)程結(jié)束。
當(dāng)用戶在地址欄輸入www.baidu.com然后會(huì)車會(huì)發(fā)生什么?
A、請(qǐng)求DNS,解析IP
B、根據(jù)IP查找服務(wù)器
C、TCP鏈接
D、發(fā)送HTTP請(qǐng)求
E、負(fù)載均衡分配用戶請(qǐng)求,如果由負(fù)載均衡
F、服務(wù)器內(nèi)部業(yè)務(wù)邏輯,返回?cái)?shù)據(jù)
G、靜態(tài)資源,訪問(wèn)CDN(第二次HTTP請(qǐng)求)
TCP(全雙工):報(bào)文格式

網(wǎng)絡(luò)中可以使用三元組(主機(jī)IP地址、服務(wù)器端口號(hào)、協(xié)議)來(lái)唯一標(biāo)示一個(gè)進(jìn)程。
序號(hào):假設(shè)數(shù)據(jù)流由一個(gè)包含500 000字節(jié)的文件組成,其中MSS為1000字節(jié),數(shù)據(jù)流的首字母編號(hào)是0,給第一個(gè)報(bào)文段分配的序號(hào)0,第二個(gè)報(bào)文段分配的序號(hào)1000,第三個(gè)報(bào)文段分配序號(hào)2000以此類推。
確認(rèn)號(hào):主機(jī)A填充的確認(rèn)號(hào)是主機(jī)A期望從主機(jī)B收到的下一字節(jié)的序號(hào)。假設(shè)主機(jī)A收到來(lái)自主機(jī)B的包含字節(jié)0-535和900-1000的報(bào)文段。由于某種原因主機(jī)A還沒(méi)有收到536-899的報(bào)文段,因此A到B的下一個(gè)報(bào)文段減災(zāi)確認(rèn)號(hào)字段中包含536,因?yàn)門CP只確認(rèn)流中第一個(gè)丟失字節(jié)為止的字節(jié)。所以TCP被成為提供累計(jì)確認(rèn)。
URG:緊急指針標(biāo)志
ACK:確認(rèn)序號(hào)標(biāo)志。
PSH:PUSH標(biāo)志。
RST:重置鏈接標(biāo)志。
SYH:同步序號(hào),用于建立鏈接過(guò)程。
FIN:finash標(biāo)志,用于釋放連接。
窗口大?。河糜跇?biāo)志發(fā)送接收端緩存的大小。
檢驗(yàn)和:奇偶校驗(yàn)。
緊急指針:當(dāng)URG為1時(shí)會(huì)指出報(bào)文段中緊急指針的字節(jié)數(shù)。
選項(xiàng):定義一些可選參數(shù)。
TCP三次握手:

為什么需要三次握手:
客戶端和服務(wù)器端都需要初始化sequence number,以提供后續(xù)數(shù)據(jù)傳輸使用。
TCP首次握手SYN超時(shí)問(wèn)題:
Server收到Client的SYN,回復(fù)SYN-ACK的時(shí)候未收到ACK確認(rèn),Server不斷重試直至超時(shí),重試次數(shù)為五次,每次時(shí)間翻倍(1,2,4,8,16),Linus默認(rèn)等待63秒后才斷開(kāi)鏈接,
針對(duì)SYN flood的惡意攻擊防護(hù)措施:
SYN隊(duì)列滿以后,通過(guò)tcp_syncookies參數(shù)回?fù)躍YN Cookie
若為正常則Client會(huì)回?fù)躍YN Cookie,直接建立鏈接。
建立鏈接后Client突然故障:
保活機(jī)制,向?qū)Ψ桨l(fā)送保活探測(cè)報(bào)文,如果未收到則繼續(xù)發(fā)送,嘗試次數(shù)達(dá)到?;畲螖?shù)仍未回應(yīng)則中斷連接。
四次揮手:

TIME_WAIT原因:
確保由足夠的時(shí)間讓對(duì)方收到ACK。避免新舊鏈接混淆。
為社么需要四次揮手:
因?yàn)槭侨p工的,發(fā)送方和接收方都需要FIN和ACK。
TCP滑動(dòng)窗口(使用滑動(dòng)窗口做流量控制與亂序重排):作用:保證TCP可靠性,保證TCP的流控特性。
RTT:發(fā)送一個(gè)數(shù)據(jù)包到收到對(duì)應(yīng)的ACK,所花費(fèi)的時(shí)間。
RTO:重傳時(shí)間間隔。
滑動(dòng)窗口:

AdvertisedWindow = MaxBuffer - (LastByteRcvd - LastByteRead)
LastByteSent - LastByteAcked <= AdvertisedWindow
還能繼續(xù)發(fā)送的數(shù)據(jù)大小:
EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)
HTTP簡(jiǎn)介:
特點(diǎn):支持客戶端-服務(wù)器端模式、簡(jiǎn)單快捷、靈活、無(wú)連接、無(wú)狀態(tài)。
狀態(tài)碼:1開(kāi)頭:表示已經(jīng)接收,繼續(xù)處理。
2開(kāi)頭:表示已經(jīng)被接收,處理成功。200
3開(kāi)頭:重定向,需要完成需要進(jìn)一步操作。
4開(kāi)頭:請(qǐng)求由語(yǔ)法錯(cuò)誤或者請(qǐng)求無(wú)法實(shí)現(xiàn)。400:請(qǐng)求有語(yǔ)法錯(cuò)誤;401:請(qǐng)求未授權(quán);403:服務(wù)器接收到,但拒絕提供服務(wù);404:未找到資源;
5開(kāi)頭:服務(wù)器錯(cuò)誤。500:服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤;503:服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求;
HTTPS:
傳輸過(guò)程:瀏覽器將支持的加密算法信息發(fā)送給服務(wù)器;服務(wù)器選擇一條瀏覽器支持的加密算法,以證書(shū)的形式回發(fā)瀏覽器;瀏覽器驗(yàn)證證書(shū)的合法性,并結(jié)合證書(shū)公鑰加密信息發(fā)送給服務(wù)器;服務(wù)器使用私鑰解密信息,驗(yàn)證哈希,加密響應(yīng)消息回發(fā)瀏覽器;瀏覽器解密響應(yīng)消息,并對(duì)消息進(jìn)行驗(yàn)真,之后進(jìn)行加密交互數(shù)據(jù)。
HTTPS和HTTP區(qū)別:
HTTPS需要到CA申請(qǐng)證書(shū),HTTP不需要
HTTPS密文傳輸,HTTP明文傳輸
連接方式不同
HTTPS=HTTP+加密+認(rèn)證+完整性保護(hù),較HTTP安全
參考:《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下法》、《深入分析Java Web》