一模燥、計算機網(wǎng)絡(luò)體系結(jié)構(gòu)
二强岸、物理層
1. 物理層主要任務(wù)
物理層考慮的是怎樣才能在連接各臺計算機的傳輸媒體上傳輸數(shù)據(jù)的比特流锻弓,確定與傳輸媒體的接口有關(guān)的特性:
- 機械特性(引線數(shù)目等)
- 電氣特性(電壓高低,阻抗匹配)
- 功能特性(某一電平的電壓表示何種意義)
2. 傳輸方式
- 電路交換:專用的物理通信路徑
- 報文交換
- 分組交換
- 虛電路
- 數(shù)據(jù)報
三蝌箍、數(shù)據(jù)鏈路層
1. 數(shù)據(jù)鏈路層任務(wù)
為網(wǎng)絡(luò)層提供可靠的數(shù)據(jù)傳輸青灼、鏈路管理、幀定界妓盲、幀同步與透明傳輸杂拨、流量控制和差錯控制。
2. 基本數(shù)據(jù)單位
幀
3. 主要的協(xié)議
以太網(wǎng)協(xié)議
四悯衬、網(wǎng)絡(luò)層
1. 網(wǎng)絡(luò)層任務(wù)
實現(xiàn)異構(gòu)網(wǎng)絡(luò)互聯(lián)弹沽、路由與轉(zhuǎn)發(fā)、擁塞控制筋粗。
2. IPv4地址分類
- 主機號全為1策橘,表示本網(wǎng)絡(luò)上的廣播地址,不用作主機的IP地址
- 主機號全為0娜亿,表示本網(wǎng)絡(luò)本身丽已,不用作主機的IP地址。
3. IP協(xié)議(網(wǎng)際協(xié)議)
IP協(xié)議族包含配套的協(xié)議:
- ARP(地址解析協(xié)議):將IP地址轉(zhuǎn)換為MAC地址买决。
- ICMP(網(wǎng)際控制報文協(xié)議):給主機和路由器報告差錯和異常情況沛婴,分為詢問報文和差錯報文吼畏。
4. 路由選擇協(xié)議
- 內(nèi)部網(wǎng)關(guān)協(xié)議(IGP):
- RIP:與相鄰路由器交換整個路由表
- OSPF:與全部路由器交換相鄰節(jié)點鏈路狀態(tài)
- 外部網(wǎng)關(guān)協(xié)議(EGP):
- BGP:尋找的并非最佳路由。路由更新時瘸味,BGP只發(fā)送更新的路由宫仗。
五、傳輸層
傳輸層任務(wù)
提供進(jìn)程之間的端到端的邏輯通訊旁仿、差錯檢測藕夫、UDP與TCP。
UDP
無連接盡最大努力交付枯冈,支持廣播和多播(而TCP不支持)
TCP
有連接毅贮、一對一、可靠尘奏、全雙工通信
TCP的三次握手建立
- 第一步:客戶機的TCP首先向服務(wù)器的TCP發(fā)送一個請求報文段滩褥,這個特殊報文段不包含應(yīng)用層數(shù)據(jù),其SYN位置為1炫加。另外瑰煎,客戶機會隨機選擇一個起始序號
seq = x
(連接請求報文不攜帶數(shù)據(jù),但要消耗一個序號) - 第二步:服務(wù)器收到請求報文后俗孝,若同意連接酒甸,則向客戶機發(fā)回確認(rèn),并為該TCP連接分配TCP緩存和變量赋铝。在確認(rèn)報文中插勤,SYN和ACK都置為1,確認(rèn)號字段的值為
x + 1
革骨,并且服務(wù)器隨機產(chǎn)生起始序號seq = y
(確認(rèn)報文不攜帶數(shù)據(jù)农尖,但也要消耗一個序號)。 - 第三步:當(dāng)客戶機收到確認(rèn)報文段后良哲,還要向服務(wù)器給出確認(rèn)盛卡,并且也要給該連接分配緩存和變量。這個報文的ACK為置為1臂外,序號字段為
x + 1
窟扑,確認(rèn)號字段為ack = y + 1
TCP四次揮手釋放
- 第一步:客戶機打算關(guān)閉連接時,發(fā)送一個連接釋放報文段漏健,并停止發(fā)送數(shù)據(jù)嚎货,主動關(guān)閉TCP連接,該報文字段的FIN被置為1蔫浆,
seq = u
殖属,它等于前面已經(jīng)傳送過的數(shù)據(jù)的最后一個字節(jié)序號加1(FIN報文段不攜帶數(shù)據(jù),但也要消耗一個序號)瓦盛。TCP是全雙工的洗显,即可以想象為一條TCP連接上有兩條數(shù)據(jù)通路外潜。發(fā)送FIN報文時,發(fā)送FIN的一端不能再發(fā)送數(shù)據(jù)挠唆,即關(guān)閉了其中一條數(shù)據(jù)通路处窥,單對方還可以發(fā)送數(shù)據(jù)。 - 第二步:服務(wù)器收到連接釋放報文段后即發(fā)出確認(rèn)玄组,確認(rèn)號是
ack = u + 1
滔驾,而這個報文段自己的序號是v,等于它前面已經(jīng)傳送過的數(shù)據(jù)的最后一個字節(jié)序號加1俄讹。此時客戶端到服務(wù)器這個方向的連接就釋放了哆致,TCP連接處于半關(guān)閉狀態(tài)。但服務(wù)器發(fā)送數(shù)據(jù)患膛,客戶機仍要接收摊阀,即從服務(wù)器到客戶機這個方向的連接并未關(guān)閉。 - 第三步:若服務(wù)器已經(jīng)沒有要向客戶機發(fā)送的數(shù)據(jù)踪蹬,就通知TCP釋放連接胞此,此時發(fā)出
FIN = 1
的連接釋放報文段。 - 第四步:客戶機收到連接釋放報文段后跃捣,必須發(fā)出確認(rèn)豌鹤。在確認(rèn)報文段中,ACK位被置為1枝缔,確認(rèn)序號
ack = w + 1
, 報文序號seq = u + 1
。此時TCP連接還未釋放蚊惯,必須經(jīng)過時間等待計時器設(shè)置的時2MSL后愿卸,客戶機才進(jìn)入連接關(guān)閉狀態(tài)。
注:為什么要等待2SML截型?
- 如果客戶機不等待2SML趴荸,若客戶機返回的最后確認(rèn)報文已丟失,則服務(wù)器不能進(jìn)入正常關(guān)閉狀態(tài)宦焦,而此時客戶機已經(jīng)關(guān)閉发钝,也不可能再重傳。
- 客戶機在發(fā)送最后一個確認(rèn)報文后波闹,再經(jīng)過2MSL才可以保證本連接持續(xù)時間內(nèi)所產(chǎn)生的所有報文段從網(wǎng)絡(luò)中消失酝豪。
SYN攻擊
三次握手中,服務(wù)器發(fā)送SYN-ACK后等待客戶端發(fā)送ACK精堕,此時服務(wù)器處于SYN-RCVD狀態(tài)孵淘。SYN攻擊指的是在短時間內(nèi)偽造大量不存在的IP地址,向服務(wù)器不斷發(fā)送SYN數(shù)據(jù)段歹篓,服務(wù)此時會回復(fù)確認(rèn)包瘫证,由于源地址不存在揉阎,服務(wù)器需要不斷的重傳直至超時,這些偽造的SYN長時間占用未連接隊列背捌,正常的SYN請求被丟棄毙籽,導(dǎo)致目標(biāo)系統(tǒng)運行緩慢。
防御SYN攻擊可以使用:
- 縮短超時時間
- 增大最大半連接數(shù)
- 過濾網(wǎng)關(guān)
TCP可靠傳輸機制
- 序號
- 確認(rèn)
- 重傳
TCP流量控制
滑動窗口機制
TCP擁塞控制
- 慢開始
- 擁塞避免
- 快重傳
- 快恢復(fù)
TCP KeepAlive
當(dāng)TCP連接中一方出現(xiàn)掉電毡庆、死機等異常情況時坑赡,TCP連接未來得及正常釋放,連接的另一方并不知道這個問題扭仁,會一直維護(hù)這個連接垮衷,造成系統(tǒng)資源的浪費」宰梗可以在傳輸層利用TCP的KeepAlive機制搀突。
TCP KeepAlive基本原理是隔一段時間給對方發(fā)一個探測包,如果對方收到回應(yīng)并發(fā)送ACK熊泵,則認(rèn)為連接存活仰迁,否則在重試次數(shù)還沒收到回應(yīng),則丟棄該TCP連接顽分。
六徐许、應(yīng)用層
1. 應(yīng)用層協(xié)議服務(wù)器熟知端口
HTTP:80
DNS:53
FTP:控制鏈接端口21,數(shù)據(jù)鏈接端口20
STMP:25
POP3:110
2. HTTP協(xié)議
(1)報文結(jié)構(gòu)
HTTP請求報文和響應(yīng)報文的區(qū)別是開始行不同卒蘸。
請求報文
- 請求方法:
- POST(傳輸實體主體)
- GET(獲取資源)
- HEAD(獲得報文的首部雌隅,它和GET方法一樣,只是不返回報文主體部分)
- OPTIONS(詢問支持的方法)
- CONNECT(要求用隧道協(xié)議連接代理服務(wù)器)
- 請求頭部
- Connection:該字段為Close表示使用非持續(xù)連接缸沃,為Keep-Alive表示持續(xù)連接(默認(rèn))恰起。
- Cookie:由服務(wù)器生成,由客戶端保存
- Content-Type:用于表明發(fā)送數(shù)據(jù)流的類型和網(wǎng)頁的編碼趾牧,multipart/form-data(表單)
- Transfer-Ecoding:傳輸報文主體時采用的編碼方式
響應(yīng)報文
- 狀態(tài)碼
- 1XX:信息性狀態(tài)碼(如:接收到請求正在處理)
- 2XX:成功
- 3XX:重定向
- 4XX:客戶端錯誤
- 5XX:服務(wù)器錯誤
- 請求頭部
- Location:一般該字段配合3XX:Redirection的響應(yīng)检盼,提供重定向的URI。
(2)HTTPS
HTTP通信使用明文內(nèi)容可能被竊聽翘单;不驗證通信方的身份吨枉;無法證明報文的完整性。HTTPS添加了加密和認(rèn)證機制:
- HTTPS通信部分接口使用SSL和TSL協(xié)議哄芜。
- 加密:使用混合加密方式貌亭,在交換密鑰環(huán)節(jié)使用公開密鑰加密方式,之后建立通信交換報文階段使用共享密鑰加密方式认臊。
- 認(rèn)證:使用由數(shù)字證書認(rèn)證機構(gòu)(CA)和其相關(guān)機關(guān)頒發(fā)的公開密鑰證書属提。
- HTTPS比HTTP慢2到10倍。
(3)JSON
JSON是一種取代XML的數(shù)據(jù)結(jié)構(gòu),和xml相比,它更小巧但描述能力卻不差,由于它的小巧所以網(wǎng)絡(luò)傳輸數(shù)據(jù)將減少更多流量從而加快速度。
- {} 雙括號表示對象
- [] 中括號表示數(shù)組
- "" 雙引號內(nèi)是鍵或值
- JSON能夠處理的數(shù)據(jù)類型有false/null/true/對象/數(shù)組/字符串這7種類型
- 不管是鍵或值最好都用雙引號引起來
(4)HTTP2.0
HTTP2.0和HTTP1.1的區(qū)別
- 使用多路復(fù)用:多個請求可以在同一個連接中并行執(zhí)行(不像HTTP1.1中的一個連接需要等待上一個請求完畢才能請求下一個)
- Header壓縮:降低傳輸頭部產(chǎn)生的流量冤议。
- 服務(wù)端推送:服務(wù)端推送能把客戶端所需要的資源伴隨著index.html一起發(fā)送到客戶端斟薇,省去了客戶端重復(fù)請求的步驟。
HTTP1.0和HTTP1.1的區(qū)別
- 長連接:在一個TCP連接上可以傳送多個HTTP請求和響應(yīng)恕酸,減少了建立和關(guān)閉連接的消耗和延遲堪滨。默認(rèn)開啟keep-alive。
- 允許只請求資源的某個部分:在請求頭引入了range域蕊温,允許只請求資源的某個部分袱箱。
- 引入了更多的緩存控制策略。
3. URI和URL
- URI(統(tǒng)一資源標(biāo)識符):某個協(xié)議類型表示的資源的定位標(biāo)識符义矛,如:
file://ftp.linkwan.com/ (也是URL)
http://homepage.yesky.com/175/2603675.html (也是URL)
tel:+1-816-555-1212 (這個就不是URL啦)
- URL(統(tǒng)一資源定位符)
- URI用來標(biāo)識某一互聯(lián)網(wǎng)資源发笔,而URL用來表示資源在互聯(lián)網(wǎng)上所處的位置×狗可見URL是URI的子集了讨。
4. Socket編程
Socket是對TCP/IP協(xié)議族的一種封裝,是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件的抽象層制轰。利用三元組(ip地址前计,協(xié)議,端口)就可以唯一標(biāo)識網(wǎng)絡(luò)中的進(jìn)程垃杖。
一個簡易的 Server 的流程如下:
- 1.建立連接男杈,接受一個客戶端連接。
- 2.接受請求调俘,從網(wǎng)絡(luò)中讀取一條 HTTP 請求報文伶棒。
- 3.處理請求,訪問資源彩库。
- 4.構(gòu)建響應(yīng)苞冯,創(chuàng)建帶有 header 的 HTTP 響應(yīng)報文。
- 5.發(fā)送響應(yīng)侧巨,傳給客戶端。
5. 瀏覽器輸入 url 到頁面顯示的過程
- DNS解析:網(wǎng)址到IP地址的轉(zhuǎn)換鞭达。
- TCP連接:HTTP使用TCP作為傳輸層協(xié)議司忱。
- 服務(wù)器處理請求并返回HTTP報文。
- 瀏覽器解析渲染頁面畴蹭。
推薦一個鏈接:計算機網(wǎng)絡(luò)基礎(chǔ)知識總結(jié)