# OSI模型(Open System Interconnection Model) 國際標準組織IOS(International Organization for Standardization)制定了OSI(Open System Interconnection,開放系統連結)的通訊標準,作為制定通訊協定及發展網路相關產品的參考標準。 模型將通訊系統中的資料流劃分為**七個層**,從分散式應用程式資料的最高層表示到跨通訊媒介傳輸資料的物理實現。 每個中間層為其上一層提供功能,其自身功能則由其下一層提供。功能的類別通過標準的通訊協定在軟體中實現。 ----- ### OSI 7層架構: **OSI各層工作的內容,可概分為「應用」及「資料傳輸」兩部分(下圖)。** 「應用」: ***上面3層***主要是規範軟體的功能,通常網路應用軟體即是根據這3層的規範開發出來的,例如:瀏覽器、電子郵件等其他線上軟體。 「資料傳輸」: ***下面4層***則是規範資料傳輸的方法或技術,通常網路設備即是根據這4層的規範發展出來的,例如:集線器、路由器等。 ![](https://i.imgur.com/yJLVVwA.jpg) ----- ### OSI各層功能: **第7層 應用層(application layer):** 規範各項網路服務(如HTTP/網頁、SMTP/郵件、FTP/檔案等)的使用者介面,讓使用者可存取網路中的資源。 ----- ### 第6層 表達層(presentation layer): ***格式轉換:*** 通訊雙方電腦使用的編碼方式可能不同(如傳送端使用ASCII碼,接收端使用EBCDIC碼)。傳送端必須將資料轉換成接收端可識別的格式。 ***加密&解密:*** 為避免資料在傳送過程中被窺視,資料可在此層加密後再送出,而接收端收到後也在此層予以解密。 ***壓縮&解壓縮:*** 將資料壓縮以提升資料傳輸的效率,待傳送至接收端後再予以解壓縮。 ----- ### 第5層 會議層(session layer): 負責協調及建立傳輸雙方的連線,並建立傳輸時所遵循的規則。例如協議雙方使用全雙工或半雙工來傳輸資料。 一、半雙工(Half-Duplex):資料雖然可以雙向傳輸,但無法同時完成像是對講機。 二、全雙工(Full-Duplex):資料可以同一時間雙向溝同,像是電話。 在會議層上常使用的協定: RPC(Remote Procedure Call) SQL(Structure Quesry Language) NFS(Network File System) ----- ### 第4層 傳輸層(transport layer): (與TCP/UDP有關) 把傳輸表頭(TH)加至資料以形成封包。傳輸表頭包含了所使用的協定等傳送資訊。例如:傳輸控制協定**TCP、UDP**等。 ***切割及重組:*** 將訊息(message)切割成區段(segment),並加上編號,以便接收端收到資料後,依編號順序重組。 ***流量控制:*** 監控網路流量,在壅塞時會暫停資料的傳輸,待網路流量正常後,再繼續傳送資料。 ***偵錯處理:*** 利用區段編號檢查傳送過程是否有資料遺失,若有遺失通常會要求重送。 ----- ### 第3層 網路層(network layer): ***邏輯定址:*** 在每一個區段加入傳送端與接收端的IP位址等資訊,產生資料封包(IP分享器的作用)。 ***路徑選擇:*** 規劃或選擇資料封包的最佳傳輸路徑(路由器的主要作用)。 ----- ### 第2層 資料連結層(data link layer): ***實體定址:*** 在每一個封包加入傳送端與接收端的實體位址(MAC位址/在網路卡上)等資訊,產生訊框(frame)。 ***偵錯處理:*** 為資料加上錯誤檢查碼,讓接收端可檢查接收的資料是否正確,若錯誤即要求重送。 ----- ### 第1層 實體層(physical layer): 將資料轉換成傳輸媒介(數據機、中繼器等)所能傳遞的電子訊號,在網路上傳送資料框(Data Frame),它負責管理電腦通訊裝置和網路媒體之間的互通。包括了針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等。 ---- ### OSI層對應的軟硬體設備 要讓電腦連上網路進行資料的傳輸與接收需要結合許多軟、硬體設備,這些設備依其功能可分別對應至OSI層中的不同層級,如下圖: ![](https://i.imgur.com/ATmR2nD.jpg) ### 資料傳輸示意圖 當電腦在通訊時,資料會從***傳送端的最上層(7)往下層(1)傳送***,每經過一層就會加入各層處理的資訊,這些資訊稱為標頭(header),然後才傳給下一層。 ***接收端收***到資料後,會從***最底層(1)向上層(7)傳送***,每經過一層就拆掉一層標頭,直到最上層(7)資料便恢復成原始的型態。 ![](https://i.imgur.com/qzPBnOR.jpg) ------------- # TCP/UDP網路通訊協定 於***傳輸層(4)作業***,目的是接收應用層的資料,並將資料分割成適當長度的報文段。之後再把結果包傳給下一層。 ### TCP(有連接) 資訊傳送較可靠,適用於對網路通訊要求較高,需要準確無誤的傳送數據時使用,它具有內置的錯誤檢查功能,並將重新傳輸丟失的數據包。可用於傳送:文件、郵件、網路等。 可靠的原因: **1.建立通路:三次握手,傳輸確認,四次揮手** 三次握手四次揮手補充資料(https://www.gushiciku.cn/pl/gsP7/zh-tw) 資料傳輸過程中,收送兩端會不斷地進行資料是否送達的確認工作,以確保資料正確無誤地送達接收端。 ![](https://i.imgur.com/Mq8Lu1O.jpg) <iframe width="600" height="450" src="https://www.youtube.com/embed/Iuvjwrm_O5g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <br> <br> **2.丟包及亂序問題:** TCP為了不發生丟包,會給每個包一個序號,透過序號保證傳送到接收端的包,會按序接收並且查驗是否有掉包。 ### UDP(沒連接) 優點為傳送速度較快,因為它沒有內置的錯誤檢查,且不會重新傳輸丟失的數據包。所以可能會有數據丟失的情況,適合用於對實時性要求較高,不太在意少量丟失數據的情況,例如:視頻通話,直播等。且常用於VPN(隧道網路)、SDN中的VXLAN。 ### TCP/UDP比較 ![](https://i.imgur.com/XlnpYSW.png) [補充閱讀](https://nordvpn.com/zh-tw/blog/tcp-udp-bijiao/) --------------- # TCP/IP (傳輸控制協定Transmission Control Protocol)/IP(網際網路協定Internet Protocol) TCP/IP提供了點對點的連結機制,將資料應該如何封裝、定址、傳輸、路由以及在目的地如何接收,加以標準化。 它將軟體通信過程抽象化為四個抽象層,採取協議堆疊的方式,分別實作出不同通信協定。協議依其功能不同,被分別歸屬到四個階層之中,常被視為是簡化的七層OSI模型。 ![](https://i.imgur.com/L7IPI1a.png) ----- ### 第4層 應用層(OSI 5到7層): 應用層協定**一般都會使用到兩個傳輸層協定之一**: 1.TCP傳輸控制協定(連接) 2.UDP使用者資料包協定(無連接)。 **執行在TCP協定上的協定:** * HTTP(Hypertext Transfer Protocol,超文字傳輸協定),主要用於普通瀏覽。 * HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文字傳輸協定),HTTP協定的安全版本。 * FTP(File Transfer Protocol,檔案傳輸協定),用於檔案傳輸。 * POP3(Post Office Protocol, version 3,郵局協定),收郵件用。 * SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協定),用來傳送電子郵件。 * TELNET(Teletype over the Network,網路電傳),通過一個終端(terminal)登陸到網路。 * SSH(Secure Shell,用於替代安全性差的TELNET),用於加密安全登陸用。 **執行在UDP協定上的協定:** * BOOTP(Boot Protocol,啟動協定),應用於無盤裝置。 * NTP(Network Time Protocol,網路時間協定),用於網路同步。 * DHCP(Dynamic Host Configuration Protocol,動態主機組態協定),動態組態IP位址。 **其他:** * DNS(Domain Name Service,域名服務),用於完成位址尋找,郵件轉發等工作(執行在TCP和UDP協定上)。 * ECHO(Echo Protocol,迴繞協定),用於查錯及測量應答時間(執行在TCP和UDP協定上)。 * SNMP(Simple Network Management Protocol,簡單網路管理協定),用於網路資訊的收集和網路管理。 * ARP(Address Resolution Protocol,位址解析協定),用於動態解析乙太網路硬體的位址。 ----- ### 第3層 傳輸層(OSI 4層): 傳輸層(transport layer)協定,能夠解決端到端可靠性(「資料是否已經到達目的地?」)和保證資料按照正確的順序到達的問題。在TCP/IP協定組中,傳輸協定也包括所給資料應該送給哪個應用程式。 傳輸協定也包括所給資料應該送給哪個應用程式。任何給定網路位址的應用需通過TCP或者UDP埠號區分。 ### Service Port **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。 ### 常見的服務通道: ![](https://i.imgur.com/qLUC7XK.png) [**IANA連接埠**](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml) [**TCP/UDP埠列表**](https://zh.wikipedia.org/zh-tw/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8) ----- ### 第2層 網路互連層(OSI 3層): 對於TCP/IP來說這是網際網路協定(IP)。**為傳輸層交下來的封包加上 IP 標頭**。網際網路層協定會根據傳送層的位址資料,使用路由演算法進行路由判斷,然後在 IP 標頭上填上路由資訊,以及其它相關的傳送選項資訊,再把封包交由下層處理。 * 將資料轉送到未直接連接的其他網路,而將封包轉送到指定的方向就稱作路由(route)。 這層協定的處理關鍵是路由,假如資料包的目的地是本機﹐則將標頭去除,將剩下部份交給合適的傳送協定處理,否則,要判斷封包是直接傳送到本地網路節點,還是要傳送給路由器。如有需要,還會送出 ICMP 錯誤和控制訊息,同時也要處理接收到的 ICMP 訊息。 * ICMP(Internet Control Message Protocol,網際網路控制訊息協定),用來輔助 IP 協定,能偵測資料是否被送達任意端點,若否,則發送失敗通知。 ----- ### 第1層 網路介面層(OSI 1到2層):例如乙太網、Wi-Fi、MPLS等。 對實體層的原始資料進行資料封裝,並為兩個網路實體之間提供資料鏈路連接的建立、維持和釋放管理。 ***實體定址:*** 在每一個封包加入傳送端與接收端的實體MAC位址(MAC位址/在網路卡上)等資訊,產生訊框(frame)。 * **MAC address** 共由 48 個位元組成,以十六進位的方式表示,前 24 個位元廠商編號,後 24 個為廠商的流水號。例如,a4-5e-60-d0-bb-ff。 ***偵錯處理:*** 在 frame 尾端置放檢查碼(parity,sum,CRC),讓接收端可檢查接收的資料是否正確,若錯誤即要求重送。 最具代表性的通訊協定為乙太網路(Ethernet)、Wi-Fi、PPPoE(PPP over Ethernet,點對點通訊協定)、ARP/RARP。 * 乙太網路(Ethernet):有線網路被最廣為使用的規範。 * Wi-Fi:透過無線方式連結區域網路的規範。 * PPPoE:在乙太網路上進行一對一連線的通訊協定。 * ARP/RARP:將 IP 位址和 MAC 位址互相轉換的一種通訊協定。 ----- ### 不同層的應用資料封裝遞減 ![](https://i.imgur.com/vLCF9HG.png) ----- ![](https://i.imgur.com/ZaT3E4d.png) ----- ### 協定資料單元 以 TCP/IP 為例,就像信紙 + 信封,稱為信件: * TCP 表頭 + 資料,稱為 TCP 區段 (TCP Segment); * IP 表頭 + 資料,稱為 IP 資料包 (IP Datagram) 或更常見的名稱 — 封包 (packeet); * 資料鏈結層表頭 + 資料 + 表尾 (如果有的話),則稱作 訊框 (Frame)。 另外,若傳輸層使用 UDP,則稱為 UDP 資料包 (UDP Datagram), 應用層 也可能自我 (或結合其他應用) 進行封裝。