OSI模型(共七層)
1.物理層 2.數(shù)據(jù)鏈路層 3.網(wǎng)絡(luò)層 4.運輸層 5.會話層 6.表示層 7.應(yīng)用層
TCP/IP協(xié)議模型
1.網(wǎng)絡(luò)接口層(Network Access) 2.網(wǎng)際層(Internet)3.運輸層(Transport)4.應(yīng)用層(Application)
應(yīng)用層 ? FTP,HTTP杨幼,SMTP济榨,DNS,DHCP ? ?報文左刽,用戶數(shù)據(jù)
運輸層 ? TCP煤蚌,UDP ?段
網(wǎng)絡(luò)層 ?IP豪嚎,ARP锯茄,ICMP ?包
數(shù)據(jù)鏈路層 ?CSMA/CD, PPP 幀
物理層 ? ? ? 比特流
物理層通信模型
局域網(wǎng)模型:
PC——(網(wǎng)線厢塘,數(shù)字信號)——集線器/交換機(jī)——(網(wǎng)線,數(shù)字信號)——PC
廣域網(wǎng)通信模型
PC——(網(wǎng)線肌幽,數(shù)字信號)——調(diào)制解調(diào)器——(電話線晚碾,模擬信號)——調(diào)制解調(diào)器——(網(wǎng)線,數(shù)字信號)——PC
PC——(網(wǎng)線牍颈,數(shù)字信號)——光電轉(zhuǎn)換器——(光信號,光纖)——光電轉(zhuǎn)換器——(網(wǎng)線琅关,數(shù)字信號)——PC
數(shù)據(jù)鏈路層
Ethernet V2協(xié)議煮岁,使用CSMA/CD技術(shù),(同軸電纜涣易,集線器)
以太網(wǎng)幀的格式:
首部:源MAC(6字節(jié))+目標(biāo)MAC(6字節(jié))+網(wǎng)絡(luò)類型(2字節(jié)画机,IPV4還是IPV6)
以太網(wǎng)幀:首部+數(shù)據(jù)+FCS(4字節(jié))
數(shù)據(jù)的長度46-1500字節(jié)
整個以太網(wǎng)幀的長度是64-1518字節(jié)
PPP協(xié)議(點對點協(xié)議)
網(wǎng)絡(luò)層
網(wǎng)絡(luò)層數(shù)據(jù)包由首部(至少20個字節(jié),包含版本,首部長度新症,區(qū)分服務(wù)步氏,總長度,標(biāo)識徒爹,標(biāo)志荚醒,片偏移芋类,生存時間,協(xié)議界阁,首部檢驗和侯繁,源IP地址,目標(biāo)IP地址泡躯,可選字段(最多40個字節(jié)))+數(shù)據(jù)2部分組成
由于幀的數(shù)據(jù)不能超過1500字節(jié)贮竟,過大的IP數(shù)據(jù)包,需要分成片傳輸給數(shù)據(jù)鏈路層
每一片都有自己的網(wǎng)絡(luò)層首部
傳輸層
TCP:面向連接较剃,可靠傳輸咕别,首部占用空間大(至少20個字節(jié),最多60個字節(jié))写穴,傳輸速率慢惰拱,資源消耗大,應(yīng)用場景:瀏覽器确垫,文件傳輸弓颈,郵件發(fā)送,對應(yīng)的應(yīng)用層協(xié)議:HTTP删掀,HTTPS翔冀,F(xiàn)TP,SMTP披泪,DNS
首部:源端口+目的端口+序號+確認(rèn)號+數(shù)據(jù)偏移+保留+標(biāo)志位+窗口+檢驗和+緊急指針+選項(長度可變)+填充
標(biāo)志位
URG=1時纤子,緊急指針字段才有效,表明前多少位的是緊急數(shù)據(jù)款票,應(yīng)當(dāng)盡快傳輸
ACK=1時控硼,確認(rèn)號才有效
PSH(push)
RST=1時,表明連接中出現(xiàn)問題艾少,需要重連
SYN=1卡乾,ACK=0時,表明這是一個建立鏈接的請求
SYN=1缚够,ACK=1時幔妨,服務(wù)器回復(fù)客戶端可以建立連接
FIN=1時,表明數(shù)據(jù)已經(jīng)發(fā)送完畢谍椅,要求釋放連接
序號seq4 字節(jié):建立連接后误堡,序號代表這一次給對方的TCP數(shù)據(jù)部分的第一個字節(jié)的編號
確認(rèn)號ack 4字節(jié):建立連接后,期望下一次傳過來的數(shù)據(jù)部分的第一個字節(jié)的編號
可靠傳輸:ARQ停止等待自動重傳請求雏吭,連續(xù)ARQ+滑動窗口協(xié)議锁施,SACK選擇性確認(rèn)
流量控制(點對點):通過確認(rèn)報文中的窗口字段來控制發(fā)送方的發(fā)送速率
當(dāng)窗口為0時,開始定時器詢問最新窗口
擁塞控制:避免網(wǎng)路中的路由器或鏈路過載,涉及到所有的主機(jī)和路由器
發(fā)送窗口=min(擁塞窗口悉抵,接收窗口)
慢開始(慢啟動):cwnd的初始值比較小肩狂,然后隨著數(shù)據(jù)包被接收方確認(rèn)(收到一個ACK),cwnd就成倍增長
擁塞避免:ssthresh:慢開始閾值基跑,cwnd達(dá)到閾值后婚温,以線性方式增加,丟包后網(wǎng)絡(luò)可能出現(xiàn)擁塞媳否,閾值乘法減小同時cwnd執(zhí)行慢開始算法(老版本)
快速重傳:
接收方:每收到一個失序的分組后就立即發(fā)出重復(fù)確認(rèn)
發(fā)送方:只要連續(xù)收到三個重復(fù)確認(rèn)(總共4個相同的確認(rèn))栅螟,就應(yīng)當(dāng)立即重傳對方尚未收到的報文段
快速恢復(fù)
當(dāng)發(fā)送方連續(xù)三個重復(fù)確認(rèn)后,執(zhí)行乘法減小篱竭,把ssthres減半力图,cwnd不恢復(fù)初始值,直接開始執(zhí)行擁塞避免算法
連接管理:3次握手掺逼,4次揮手
第一次握手:SYN=1吃媒,ACK=0 ,客戶端的序號初始值
第二次握手:SYN=1吕喘,ACK=1赘那,服務(wù)器的序號初始值
第三次握手:SYN=0,ACK=1
第一次揮手:主機(jī)1發(fā)出FIN報文氯质,表示主機(jī)1已經(jīng)沒有數(shù)據(jù)要發(fā)送了募舟,但是此時主機(jī)1還是可以接收來自主機(jī)2的的數(shù)據(jù)
第二次揮手:主機(jī)2返回ACK報文,表示主機(jī)2已經(jīng)知道主機(jī)1沒有數(shù)據(jù)發(fā)送了闻察,但是主機(jī)2還是可以發(fā)送數(shù)據(jù)到主機(jī)1的
第三次揮手:主機(jī)2發(fā)送FIN報文拱礁,表示主機(jī)2已經(jīng)沒有數(shù)據(jù)要發(fā)送了
第四次揮手:主機(jī)1返回ACK報文,表示主機(jī)1已經(jīng)知道主機(jī)2沒有數(shù)據(jù)發(fā)送了辕漂,隨后(一般為2倍的MSL呢灶,MSL建議為2分鐘)正式斷開整個TCP連接
UDP:無連接,不可靠傳輸钉嘹,首部占用空間醒炷恕(8個字節(jié),源端口跋涣,目標(biāo)端口缨睡,長度,檢驗和)仆潮,傳輸速率快宏蛉,資源消耗小遣臼,應(yīng)用場景:音視頻通話性置,直播,對應(yīng)的應(yīng)用層協(xié)議:DNS
應(yīng)用層:
HTTP:
ABNF語言規(guī)定
請求行
request-line = method SP request-target SP HTTP-version CRLF
例:GET /hello/ HTTP/1.1
請求頭:
head-field = field-name ":" OWS field-value OWS
User-Agent:瀏覽器身份標(biāo)識字符串
Host:服務(wù)器的域名揍堰,端口號
Date:發(fā)送的時間
Referer:前一個鏈接
Content-Type:請求體的類型鹏浅,application/x-www-form-urlencoded(表單提交)嗅义,multipart/form-data(文件上傳)
Content-Length:請求體的長度
Accept:能夠接受的響應(yīng)內(nèi)容類型,text/plain
Accept-Charset:能夠接受的字符集隐砸,utf-8
Accept-Encoding:能夠接受的編碼方式列表
Accept-Language:能夠接受的響應(yīng)內(nèi)容的自然語言列表en-US
Range:僅請求某個實體的一部分之碗,斷點續(xù)傳
Origin:發(fā)起一個針對跨域資源共享的請求
Cookie:之前通過服務(wù)器Set-Cookie發(fā)送的Cookie
Connection:該瀏覽器想要優(yōu)先使用的鏈接類型
Cache-Control:用來指定在這次的請求/響應(yīng)鏈中的所有緩存機(jī)制都必須遵守的指令
message-body = *OCTET
status-line = HTTP-version SP status-code SP reason-phrase CRLF
例:HTTP/1.1 200 或者 HTTP/1.1 200 OK
響應(yīng)頭
Date
Last-Modified
Server
Expires
Content-Type:text/html; charset=utf-8
Content-Encoding
Content-Length
Content-Disposition:一個可以讓客戶端下載文件并建議文件名的頭部
Accept-Ranges:服務(wù)器支持哪些種類的部分內(nèi)容范圍:bytes
Content-Range:這部分消息是屬于完整消息的哪部分
Range
Origin:跨域
Cookie:
Connection
Cache-Control
Accept
Accept-Charset
Accept-Encoding
Accept-Language
響應(yīng)體
請求方法:
GET:常見于讀取操作,參數(shù)直接拼接在URL的后面(URL長度有限制)
POST:常用于添加季希,修改褪那,刪除,請求參數(shù)放在請求體里面
HEAD:請求得到與GET請求相同的響應(yīng)式塌,但沒有響應(yīng)體博敬,使用場景:在下載一個大文件前,先獲取其大小峰尝,再決定是否下載
OPTIONS:獲取服務(wù)器支持哪些方法
PUT:用于對存在的資源進(jìn)行覆蓋
PATCH:用于對資源進(jìn)行部分修改偏窝,資源不存在會創(chuàng)建
DELETE:用于刪除指定的資源
TRACE:環(huán)回測試,主要用于HTTP請求的測試或診斷
狀態(tài)碼分為5類:
信息響應(yīng):100-199
成功響應(yīng):200-299
重定向:300-399
客戶端錯誤:400-499
服務(wù)器錯誤:500-500
常見狀態(tài)碼:
100:Continue,繼續(xù)發(fā)送剩余請求
200:OK 成功
302:Found 請求的資源被暫時的移動到了由Location頭部指定的URL上武学,重定向
304:Not Modified 可以使用緩存的內(nèi)容
400:Bad Request 語法無效
401:缺乏目標(biāo)資源要求的身份驗證憑證
403:拒絕授權(quán)訪問
404:無法找到請求資源
405:服務(wù)器禁止了使用當(dāng)前HTTP方法的請求
406:服務(wù)器無法提供與Accept-Charset以及Accept-Language指定的值相匹配的響應(yīng)
408:服務(wù)器想要將沒有在使用的連接關(guān)閉
500:服務(wù)器出問題了
501:請求的方法不被服務(wù)器支持
503:服務(wù)器停機(jī)維護(hù)或超載