一張圖讓你看懂 TCP/IP

OSI定義了網絡互連的七層框架(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層),每一層都有自己相應的功能和協議,並且與相鄰層的接口通信。


OSI七層模型 相關協議 縮寫

應用層

OSI參考模型中最靠近用戶的一層,是爲計算機用戶提供應用接口,也爲用戶直接提供各種網絡服務。我們常見應用層的網絡服務協議有:HTTP,HTTPS,FTP,POP3、SMTP等

HTTP 超文本傳輸協議

FTP 文件傳輸協議

SMTP 簡單郵件傳輸協議

TELNET TCP/IP終端仿真協議

POP3 郵局協議第三版

Finger 用戶信息協議

NNTP 網絡新聞傳輸協議

IMAP4 因特網信息訪問協議第四版

LPR UNIX 遠程打印協議

.Rwho UNIX 遠程 Who協議

Rexec UNIX遠程執行協議

Login UNIX 遠程登陸協議

RSH UNIX 遠程Shell協議

NTF HP網絡文件傳輸協議

RDA HP 遠程數據庫訪問協議

VT 虛擬終端仿真協議

RFA HP 遠程文件訪問協議

RPC Remote Process Comm.

S-HTTP 安全超文本傳輸協議

GDP網關發現協議

X-Window

CMOT 基於TCP/IP的CMIP協議

SOCKS 安全套接字協議

FANP流屬性通知協議

SLP服務定位協議

MSN微軟網絡服務

Radius 遠程用戶撥號認證服務協議

DNS 域名系統

NFS網絡文件系統協議

NIS SUN 網絡信息系統協議

R-STAT SUN遠程狀態協議

NSM SUN 網絡狀態監測協議

PMAP SUN 端口映射協議

Mount

LPR UNIX遠程打印協議

常用UDP協議的應用層服務

BOOTP引導協議

DHCP動態主機配套協議

NTP網絡時間協議

TFTP簡單文件傳輸協議

SNMP簡單網絡管理協議

表示層

表示層提供各種用於應用層數據的編碼和轉換功能,確保一個系統的應用層發送的數據能被另一個系統的應用層識別。如果必要,該層可提供一種標準表示形式,用於將計算機內部的多種數據格式轉換成通信中採用的標準表示形式。數據壓縮和加密也是表示層可提供的轉換功能之一。

DECnet NSP

LPP 輕量級表示協議

NBSSN NetBIOS會話服務協議

XDP外部數據表示協議

IPX

會話層

SSL 安全套接字層協議

TLS傳輸層安全協議

DAP目錄訪問協議

LDAP輕量級目錄訪問協議

RPC遠程過程調用協議

VINES NETRPC

VFRP

NeTBIOS

IPX

傳輸層

傳輸層建立了主機端到端的鏈接,傳輸層的作用是爲上層協議提供端到端的可靠和透明的數據傳輸服務,包括處理差錯控制和流量控制等問題。該層向高層屏蔽了下層數據通信的細節,使高層用戶看到的只是在兩個傳輸實體間的一條主機到主機的、可由用戶控制和設定的、可靠的數據通路。我們通常說的,TCP UDP就是在這一層。端口號既是這裏的“端”。

XOT 基於tcp之上的X協議

Van Jacobson 壓縮TCP協議

ISO-DE ISO 開發環境-------->NetBISO

TALI 傳輸適配層接口協議

DSI、NetBIOS、IP NeTBIOS、ISO-TP SSP、SMB、MSRPC

UDP用戶數據報協議

RUDP可靠的用戶數據報協議

Mobile IP 移動IP協議

網絡層

本層通過IP尋址來建立兩個節點之間的連接,爲源端的運輸層送來的分組,選擇合適的路由和交換節點,正確無誤地按照地址傳送給目的端的運輸層。就是通常說的IP層。這一層就是我們經常說的IP協議層。

IP/IPv6 互聯網協議/互聯網協議第六版

ICMPv6互聯網控制信息協議第六版

ICMP互聯網控制信息協議

IGMP 互聯網組管理協議

SLIP 串行線路IP協議

安全協議

AH 認證頭協議

ESP 安裝封裝有效載荷協議

路由協議

EGP 外部網關協議

OSPF 開放最短路徑優先協議

IGRP 內部網關路由協議

NHRP 下一跳解析協議

IE-IRGP 增強內部網關路由選擇協議

RIPng for IPv6 IPv6路由信息協議

GGP 網關到網關協議

VRRP 虛擬路由器冗餘協議

PGM 實際通用組播協議

RSVP 資源預留協議

PIM-DM 密集模式獨立組播協議

DVMRP 距離矢量組播路由協議

RIP2 路由信息協議第二版

PIM-SM 稀疏模式獨立組播協議

MOSPF 組播開放最短路徑優先協議

數據鏈路層

將比特組合成字節,再將字節組合成幀,使用鏈路層地址 (以太網使用MAC地址)來訪問介質,並進行差錯檢測。

數據鏈路層又分爲2個子層:邏輯鏈路控制子層(LLC)和媒體訪問控制子層(MAC)。

MPLS 多協議標籤交換協議

XTP 壓縮傳輸協議

DCAP 數據轉換客戶訪問協議

SLE 串行連接封裝協議

IPinIP IP套IP封裝協議

隧道協議

PPTP點對點隧道協議

L2F第二層轉發協議

L2TP 第二層隧道協議

ATMP接入隧道管理協議

Cisco 協議

CDP 思科發現協議

CGMP 思科組管理協議

地址解析協議

ARP地址解析協議

RAR逆向地址解析協議

物理層

實際最終信號的傳輸是通過物理層實現的。通過物理介質傳輸比特流。規定了電平、速度和電纜針腳。常用設備有(各種物理設備)集線器、中繼器、調制解調器、網線、雙絞線、同軸電纜。這些都是物理層的傳輸介質。

IEEE 802.2

Ethernet v.2

Internetwork

tcp/ip的傳輸原理

tcp/ip在通信過程中通過數據包報文的方式進行通信。下圖是tcp的報文格式

tcp報文中比較重要的信息

序號:Seq序號,佔32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。

確認序號:Ack序號,佔32位,只有ACK標誌位爲1時,確認序號字段纔有效,Ack=Seq+1。

標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:

URG:緊急指針(urgent pointer)有效。

ACK:確認序號有效。

PSH:接收方應該儘快將這個報文交給應用層。

RST:重置連接。

SYN:發起一個新連接。

FIN:釋放一個連接。

需要注意的是:

(A)不要將確認序號Ack與標誌位中的ACK搞混。

(B)確認方Ack=發起方Req+1,兩端配對。

tcp的三次握手與四次揮手

三次握手

所謂三次握手即建立TCP連接,就是指建立一個TCP連接時,需要客戶端和服務端總共發送3個包以確認連接的建立。在socket編程中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示:

最開始的時候客戶端和服務器都是處於CLOSED狀態。主動打開連接的爲客戶端,被動打開連接的是服務器。

TCP服務器進程先創建傳輸控制塊TCB,時刻準備接受客戶進程的連接請求,此時服務器就進入了LISTEN(監聽)狀態:

第一次握手

TCP客戶進程也是先創建傳輸控制塊TCB,然後向服務器發出連接請求報文:Client將標誌位SYN置爲1,隨機產生一個值seq=x,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。

第二次握手

Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=x+1,隨機產生一個值seq=y,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

第三次握手

Client收到確認後,檢查ack是否爲x+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=y+1,並向服務端發出確認信息,Server檢查ack是否爲y+1,ACK是否爲1,序列號seq=x+1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。

四次揮手

所謂四次揮手即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程如下圖所示:

由於TCP連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的連接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,但是在這個TCP連接上仍然能夠發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。

第一次揮手

客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。

第二次揮手

服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。

客戶端進入FIN-WAIT-2

客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最後的數據)。

第三次揮手

服務器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。

第四次揮手

客戶端收到服務器的連接釋放報文後,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。(注意此時TCP連接還沒有釋放,必須經過2∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。)

服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。

結合上面的分解過程,再看一下整個握手揮手的過程

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章