## OSI模型wiki
(開放式系統(tǒng)互聯(lián)通信參考模型)(1984年)
- 應(yīng)用層--提供為應(yīng)用軟件而設(shè)的接口,以設(shè)置與另一應(yīng)用軟件之間的通信。例如: HTTP,HTTPS,F(xiàn)TP,TELNET,SSH,SMTP,POP3等。
- 表示層--把數(shù)據(jù)轉(zhuǎn)換為能與接收者的系統(tǒng)格式兼容并適合傳輸?shù)母袷健?/li>
- 會話層--負責(zé)在數(shù)據(jù)傳輸中設(shè)置和維護計算機網(wǎng)絡(luò)中兩臺計算機之間的通信連接。
- 傳輸層--把傳輸表頭(TH)加至數(shù)據(jù)以形成數(shù)據(jù)包。傳輸表頭包含了所使用的協(xié)議等發(fā)送信息。例如:TCP、UDP等。
- 網(wǎng)絡(luò)層--決定數(shù)據(jù)的路徑選擇和轉(zhuǎn)寄,將網(wǎng)絡(luò)表頭(NH)加至數(shù)據(jù)包,以形成分組。網(wǎng)絡(luò)表頭包含了網(wǎng)絡(luò)數(shù)據(jù)。例如:互聯(lián)網(wǎng)協(xié)議(IP)等。
- 數(shù)據(jù)鏈路層--負責(zé)網(wǎng)絡(luò)尋址、錯誤偵測和改錯。當(dāng)表頭和表尾被加至數(shù)據(jù)包時,會形成幀。數(shù)據(jù)鏈表頭(DLH)是包含了物理地址和錯誤偵測及改錯的方法。數(shù)據(jù)鏈表尾(DLT)是一串指示數(shù)據(jù)包末端的字符串。例如以太網(wǎng)、無線局域網(wǎng)(Wi-Fi)和通用分組無線服務(wù)(GPRS)等。
- 物理層--在局部局域網(wǎng)上傳送數(shù)據(jù)幀(data frame),它負責(zé)管理計算機通信設(shè)備和網(wǎng)絡(luò)媒體之間的互通。包括了針腳、電壓、線纜規(guī)范、集線器、中繼器、網(wǎng)卡、主機適配器等。
ps. 已被TCT/IP四層模型替代
TCP/IP四層模型
-
應(yīng)用層--是大多數(shù)普通與網(wǎng)絡(luò)相關(guān)的程序為了通過網(wǎng)絡(luò)與其他程序通信所使用的層。這個層的處理過程是應(yīng)有特有的;數(shù)據(jù)從網(wǎng)絡(luò)相關(guān)的程序以這種應(yīng)用內(nèi)部使用的格式進行傳送,然后被編碼成標(biāo)準(zhǔn)協(xié)議的格式。每一個應(yīng)用層協(xié)議一般都會使用到傳輸層協(xié)議TCP和UDP協(xié)議之一:
運行在TCP協(xié)議上的協(xié)議:
1. HTTP(80端口),主要用于普通瀏覽。
2. HTTPS(443端口),HTTP協(xié)議的安全版本。
3. FTP(20和21端口),顧名思義,用于文件傳輸
4. POP3(110端口),收郵件用。
5. SMTP(25端口),用來發(fā)送電子郵件。
6. SSH(22端口),用于加密安全登錄用。
運行在UDP協(xié)議上的協(xié)議:
1. DHCP(67端口,動態(tài)主機配置協(xié)議),動態(tài)配置IP地址。
其他:
1. DNS(Domain Name Service,域名服務(wù)),用于完成地址的查找,郵件轉(zhuǎn)發(fā)等工作(運行在TCP和UDP協(xié)議上)。
2. SNMP(Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議),用于網(wǎng)絡(luò)信息的收集和網(wǎng)絡(luò)管理。
3. ARP(Address Resolution Protocol,地址解析協(xié)議),用于動態(tài)解析以太網(wǎng)硬件的地址。 - 傳輸層--解決諸如端到端可靠性(數(shù)據(jù)是否已經(jīng)到達目的地?)和保證數(shù)據(jù)按照正確的順序到達這樣的問題。TCP、UDP都是傳輸層協(xié)議。
- 網(wǎng)絡(luò)層--解決在一個單一網(wǎng)絡(luò)上傳輸數(shù)據(jù)包的問題。IP協(xié)議是網(wǎng)絡(luò)層協(xié)議。
- 數(shù)據(jù)鏈路層--它是數(shù)據(jù)包從一個設(shè)備的網(wǎng)絡(luò)層傳輸?shù)搅硗庖粋€設(shè)備的網(wǎng)絡(luò)層的方法。這個過程能夠在網(wǎng)卡的軟件驅(qū)動程序中控制或者專用芯片中控制。這將完成如添加報頭準(zhǔn)備發(fā)送、通過實體介質(zhì)實際發(fā)送這樣一些數(shù)據(jù)鏈路功能。另一端,鏈路層將完成數(shù)據(jù)幀接收、去除報頭并且將接收到的包傳到網(wǎng)絡(luò)層。
一般的web應(yīng)用的通信傳輸流是這樣的:
發(fā)送端在層與層之間傳輸數(shù)據(jù)時,每經(jīng)過一層時會被打上一個該層所屬的首部信息。反之,接收端在層與層之間傳輸數(shù)據(jù)時,每經(jīng)過一層時會把對應(yīng)的首部信息去除。
TCP三步握手(建立連接之前做的事情)
關(guān)于TCP:
TCP(Transmission Control Protocol, 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。與之對應(yīng)的是UDP(User Datagram Protocol ,用戶數(shù)據(jù)報協(xié)議),是不可靠的傳輸層協(xié)議。

解讀上圖
客戶端發(fā)送SYN報文給服務(wù)器端,序列號是x,進入SYN_SEND狀態(tài)。
服務(wù)器端收到SYN報文,回應(yīng)一個ACK(序列號是x+1)同時發(fā)一個SYN(序列號是y),進入SYN_RECV狀態(tài)。
客戶端收到服務(wù)器端的SYN報文,回應(yīng)一個ACK(序列號是y+1)報文,進入Established狀態(tài)。
通俗來說:
- 客戶端發(fā)出第一次請求:對服務(wù)器發(fā)出詢問(使用
SYN = 1這個詢問記號),和內(nèi)容seq = x(表示此次收到請在此做標(biāo)記) 。- 服務(wù)器收到請求:服務(wù)器收到請求后打上回應(yīng)記號(
ACK = 1),并把客戶的seq內(nèi)容加1記錄成ack = x+1(回應(yīng)值),同時加上自己的內(nèi)容seq = y,然后服務(wù)器也要確認一下客戶是否回到自己的回應(yīng),所以也需要加上詢問記號(SYN = 1)。- 客戶收到服務(wù)器的回應(yīng)以后也打上回應(yīng)記號(
ACK = 1),并把服務(wù)器的seq內(nèi)容加1記錄成ack = y+1(回應(yīng)值),同時加上自己的內(nèi)容seq = x+1。
四步揮手(通信結(jié)束時做的事情)

解讀上圖
- 客戶端發(fā)送一個
FIN,告訴服務(wù)器想關(guān)閉連接。- 服務(wù)器收到這個
FIN,發(fā)回一個ACK。- 服務(wù)器通知應(yīng)用程序關(guān)閉網(wǎng)絡(luò)連接,應(yīng)用程序關(guān)閉后通知服務(wù)器。服務(wù)器發(fā)送一個
FIN給客戶端 。- 客戶端發(fā)回
ACK報文確認。
通俗來說
- 客戶端先發(fā)送結(jié)束信號(使用
FIN = 1這個標(biāo)記),和內(nèi)容seq = u。- 服務(wù)器收到請求后,先發(fā)一次通訊告訴客戶端已經(jīng)收到你的結(jié)束請求啦(并通知應(yīng)用程序們結(jié)束),打上回應(yīng)記號(
ACK = 1),并把服務(wù)器的seq內(nèi)容加1記錄成ack = u+1(回應(yīng)值),同時加上自己的內(nèi)容seq = v。- 然后服務(wù)器等到應(yīng)用程序結(jié)束(應(yīng)用程序收到結(jié)束信號以后趕緊發(fā)完數(shù)據(jù),然后告訴服務(wù)器你可以結(jié)束了),然后服務(wù)器就再次發(fā)送一次通訊,這次也加上結(jié)束信號
FIN = 1、回應(yīng)記號ACK = 1,內(nèi)容seq = w,回應(yīng)值ack = u+1- 客戶端收到服務(wù)器也結(jié)束的響應(yīng)以后,最后發(fā)送一次通訊告訴服務(wù)器自己收到了結(jié)束響應(yīng),最后此次通訊結(jié)束。
為什么揮手要四步
這是因為服務(wù)端的 LISTEN 狀態(tài)下的 SOCKET 當(dāng)收到客戶端建立連接請求的SYN 報文后,它可以把 ACK 和 SYN ( ACK 起應(yīng)答作用,而 SYN 起同步作用)放在一個報文里來發(fā)送。
但關(guān)閉連接時,當(dāng)服務(wù)器收到客戶端的 FIN 報文通知時,服務(wù)器只能發(fā)一個回應(yīng)報文ACK:“哦,我知道了”,然后通知應(yīng)用程序。(正式因為這里服務(wù)器與應(yīng)用程序通知結(jié)束的時間間隔,所以結(jié)束需要四步,不能把第二第三步合成一步)
應(yīng)用程序完成全部數(shù)據(jù)發(fā)送并確定可以終止了,服務(wù)器才能發(fā)送FIN告訴客戶端可以真正斷開連接了。所以這一步ACK報文和FIN報文需要分開發(fā)送,因此多了一個步驟。
TCP報文格式

-
ACK:TCP協(xié)議規(guī)定,只有ACK=1時有效,也規(guī)定連接建立后所有發(fā)送的報文的ACK必須為1。 -
SYN(SYNchronization) : 在連接建立時用來同步序號。當(dāng)SYN = 1而ACK = 0時,表明這是一個連接請求報文。對方若同意建立連接,則應(yīng)在響應(yīng)報文中使SYN=1和ACK = 1. 因此,SYN置1就表示這是一個連接請求或連接接受報文。 -
FIN(finis)即完,終結(jié)的意思, 用來釋放一個連接。當(dāng)FIN = 1時,表明此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并要求釋放連接。
參考
·
