國際標準組織IOS(International Organization for Standardization)制定了OSI(Open System Interconnection,開放系統連結)的通訊標準,作為制定通訊協定及發展網路相關產品的參考標準。
模型將通訊系統中的資料流劃分為七個層,從分散式應用程式資料的最高層表示到跨通訊媒介傳輸資料的物理實現。
每個中間層為其上一層提供功能,其自身功能則由其下一層提供。功能的類別通過標準的通訊協定在軟體中實現。
OSI各層工作的內容,可概分為「應用」及「資料傳輸」兩部分(下圖)。
「應用」:
上面3層主要是規範軟體的功能,通常網路應用軟體即是根據這3層的規範開發出來的,例如:瀏覽器、電子郵件等其他線上軟體。
「資料傳輸」:
下面4層則是規範資料傳輸的方法或技術,通常網路設備即是根據這4層的規範發展出來的,例如:集線器、路由器等。
第7層 應用層(application layer):
規範各項網路服務(如HTTP/網頁、SMTP/郵件、FTP/檔案等)的使用者介面,讓使用者可存取網路中的資源。
格式轉換:
通訊雙方電腦使用的編碼方式可能不同(如傳送端使用ASCII碼,接收端使用EBCDIC碼)。傳送端必須將資料轉換成接收端可識別的格式。
加密&解密:
為避免資料在傳送過程中被窺視,資料可在此層加密後再送出,而接收端收到後也在此層予以解密。
壓縮&解壓縮:
將資料壓縮以提升資料傳輸的效率,待傳送至接收端後再予以解壓縮。
負責協調及建立傳輸雙方的連線,並建立傳輸時所遵循的規則。例如協議雙方使用全雙工或半雙工來傳輸資料。
一、半雙工(Half-Duplex):資料雖然可以雙向傳輸,但無法同時完成像是對講機。
二、全雙工(Full-Duplex):資料可以同一時間雙向溝通,像是電話。
在會議層上常使用的協定:
RPC(Remote Procedure Call)
SQL(Structure Quesry Language)
NFS(Network File System)
把傳輸表頭(TH)加至資料以形成封包。傳輸表頭包含了所使用的協定等傳送資訊。例如:傳輸控制協定TCP、UDP等。
切割及重組:
將訊息(message)切割成區段(segment),並加上編號,以便接收端收到資料後,依編號順序重組。
流量控制:
監控網路流量,在壅塞時會暫停資料的傳輸,待網路流量正常後,再繼續傳送資料。
偵錯處理:
利用區段編號檢查傳送過程是否有資料遺失,若有遺失通常會要求重送。
邏輯定址:
在每一個區段加入傳送端與接收端的IP位址等資訊,產生資料封包(IP分享器的作用)。
路徑選擇:
規劃或選擇資料封包的最佳傳輸路徑(路由器的主要作用)。
實體定址:
在每一個封包加入傳送端與接收端的實體位址(MAC位址/在網路卡上)等資訊,產生訊框(frame)。
偵錯處理:
為資料加上錯誤檢查碼,讓接收端可檢查接收的資料是否正確,若錯誤即要求重送。
將資料轉換成傳輸媒介(數據機、中繼器等)所能傳遞的電子訊號,在網路上傳送資料框(Data Frame),它負責管理電腦通訊裝置和網路媒體之間的互通。包括了針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等。
要讓電腦連上網路進行資料的傳輸與接收需要結合許多軟、硬體設備,這些設備依其功能可分別對應至OSI層中的不同層級,如下圖:
當電腦在通訊時,資料會從傳送端的最上層(7)往下層(1)傳送,每經過一層就會加入各層處理的資訊,這些資訊稱為標頭(header),然後才傳給下一層。
接收端收到資料後,會從最底層(1)向上層(7)傳送,每經過一層就拆掉一層標頭,直到最上層(7)資料便恢復成原始的型態。
於傳輸層(4)作業,目的是接收應用層的資料,並將資料分割成適當長度的報文段。之後再把結果包傳給下一層。
資訊傳送較可靠,適用於對網路通訊要求較高,需要準確無誤的傳送數據時使用,它具有內置的錯誤檢查功能,並將重新傳輸丟失的數據包。可用於傳送:文件、郵件、網路等。
可靠的原因:
1.建立通路:三次握手,傳輸確認,四次揮手
三次握手四次揮手補充資料(https://www.gushiciku.cn/pl/gsP7/zh-tw)
資料傳輸過程中,收送兩端會不斷地進行資料是否送達的確認工作,以確保資料正確無誤地送達接收端。
2.丟包及亂序問題:
TCP為了不發生丟包,會給每個包一個序號,透過序號保證傳送到接收端的包,會按序接收並且查驗是否有掉包。
優點為傳送速度較快,因為它沒有內置的錯誤檢查,且不會重新傳輸丟失的數據包。所以可能會有數據丟失的情況,適合用於對實時性要求較高,不太在意少量丟失數據的情況,例如:視頻通話,直播等。且常用於VPN(隧道網路)、SDN中的VXLAN。
TCP/IP提供了點對點的連結機制,將資料應該如何封裝、定址、傳輸、路由以及在目的地如何接收,加以標準化。
它將軟體通信過程抽象化為四個抽象層,採取協議堆疊的方式,分別實作出不同通信協定。協議依其功能不同,被分別歸屬到四個階層之中,常被視為是簡化的七層OSI模型。
應用層協定一般都會使用到兩個傳輸層協定之一:
1.TCP傳輸控制協定(連接)
2.UDP使用者資料包協定(無連接)。
執行在TCP協定上的協定:
執行在UDP協定上的協定:
其他:
傳輸層(transport layer)協定,能夠解決端到端可靠性(「資料是否已經到達目的地?」)和保證資料按照正確的順序到達的問題。在TCP/IP協定組中,傳輸協定也包括所給資料應該送給哪個應用程式。
傳輸協定也包括所給資料應該送給哪個應用程式。任何給定網路位址的應用需通過TCP或者UDP埠號區分。
IP 地址和 MAC 位址能夠辨識資料要傳送到哪一個裝置,但如果有好幾個應用程式同時啟動,光靠這兩種位址無法識別資料要送到哪一個應用程式。
因此必須使用 TCP header 上的通訊埠(service port) 編號加以辨別。舉例: 一個 www 伺服器和 client 端想連接到網站時,兩邊應該要有一個對應的埠來達成連線通道,好讓資料可以透過這個通道來進行溝通。
目標與來源 port 最大可達 65535 號 (2 的 16 次方)。每種 client 軟體所需要的資料都不相同,例如瀏覽器所需的資料是 www,所以軟體預設就會向伺服器的 port 80 索求資料;而如果你是使用 filezilla 來進行與伺服器的 FTP 索取資料時,filezilla 當然預設就是向 FTP 相關的埠 (預設是 port 21) 進行連接的動作。如此就可正確地取得 client 端所需要的資料。
以 port 1024 作區隔,port又分為兩個部分:
公認通訊埠 (well-known port):
小於 1023 (連同 1023) 的埠,由Internet號碼分配機構(IANA)分配給一些常見的通訊服務。這些埠最好保留給一些預設的服務來使用,不要隨意使用到這些埠,因為這些埠是目前 Internet 上面所慣用的。
1024-49151 > 已註冊端口:
這些端口可向IANA註冊服務,視為半保留。一般用戶編寫的程序不應使用這些端口。如 mysql 用 3306。
49152-65535 > 臨時端口(用於 client 端的埠):
主要是作為 client 端啟動的埠。開放給客戶端程序中自由使用它們。當Web瀏覽器連接到Web服務器時,瀏覽器將在此範圍內為自己分配一個端口。
當使用 client 端程式(如 ssh),連接到其它 server 主機的服務時(如 ssh server),系統會在 49152 ~ 65535 中,隨機抽出一個未被佔用的 port,指定給 client 連線端,來當作 client 端這邊的通訊 port。
此時 client端的IP、port 以及 server端的IP、port,四者形成連線時唯一的連結識別,當雙方完成連線溝通時,client 端和 server 端的連線,已經建立(ESTABLISHED)。這四者形成一組 socket pair。
對於TCP/IP來說這是網際網路協定(IP)。為傳輸層交下來的封包加上 IP 標頭。網際網路層協定會根據傳送層的位址資料,使用路由演算法進行路由判斷,然後在 IP 標頭上填上路由資訊,以及其它相關的傳送選項資訊,再把封包交由下層處理。
這層協定的處理關鍵是路由,假如資料包的目的地是本機﹐則將標頭去除,將剩下部份交給合適的傳送協定處理,否則,要判斷封包是直接傳送到本地網路節點,還是要傳送給路由器。如有需要,還會送出 ICMP 錯誤和控制訊息,同時也要處理接收到的 ICMP 訊息。
對實體層的原始資料進行資料封裝,並為兩個網路實體之間提供資料鏈路連接的建立、維持和釋放管理。
實體定址:
在每一個封包加入傳送端與接收端的實體MAC位址(MAC位址/在網路卡上)等資訊,產生訊框(frame)。
偵錯處理:
在 frame 尾端置放檢查碼(parity,sum,CRC),讓接收端可檢查接收的資料是否正確,若錯誤即要求重送。
最具代表性的通訊協定為乙太網路(Ethernet)、Wi-Fi、PPPoE(PPP over Ethernet,點對點通訊協定)、ARP/RARP。
以 TCP/IP 為例,就像信紙 + 信封,稱為信件:
另外,若傳輸層使用 UDP,則稱為 UDP 資料包 (UDP Datagram),
應用層 也可能自我 (或結合其他應用) 進行封裝。