- Book mode: https://hackmd.io/@ncnu-opensource/book [TOC] --- # OSI七層架構介紹 ## 各分層定義 ### 第七層 應用層 #### 主功能:處理應用程式 提供使用者網路應用服務, 專指為應用軟體而設計的介面, 以設定與另一應用軟體之間的通訊。 >[!NOTE]常見的通訊協議 >1. DHCP(Dynamic Host Configuration Protocol) >2. FTP(File Transfer Protocol) >3. HTTP(HyperText Transfer Protocol) >4. POP3(Post Office Protocol-Version 3) 第七層的應用軟體(網路瀏覽器、電子郵件、線上遊戲、即時通訊等)透過單一或多種通訊協定傳達資料,依據不同的網路服務方式,這些協定能定義各自的功能及使用規範等細部規則,像是網路瀏覽器藉由HTTP的溝通,即可呈現出完整的網頁。 這些和使用者最貼近且直接的應用軟體就屬於第七層應用層的規範。 ### 第六層 表達層/展示層 #### 主功能:轉檔編碼 資料透過網路傳輸時, 需要將內容予以加密或解密,而這個過程就屬於展示層 >[!NOTE]常見編碼 ASCII、JPGE、MIDI…… ### 第五層 會議層/會話層 #### 主功能 :數據傳輸中設定和維護電腦網路中兩台電腦間的通訊連接 此層級負責建立網路連線使得電腦間得以傳輸資料, 等到資料傳輸結束時,連線將會中斷 >[!NOTE]常見應用: NetBIOS names,是一種用來識別電腦資源的依據, 讓在不同電腦上運行的不同程式,可以在區域網路中, 互相連線,以及分享資料。 Windows系統中的網路上的芳鄰, 或是「檔案及列印分享」,通常會看到群組及電腦名稱, 這些就是NetBIOS names定義的。 ### 第四層 傳輸層 #### 主要功能:將傳輸表頭併入資料形成封包,負責整體電腦整體的資料傳輸及控制 傳輸層可以將一個較大的資料切割成多個8位元組表示的資料流來傳輸, 替模型頂端的第五、六、七等三個通訊層提供流量管制及錯誤控制。 傳輸控制協定(Transmission Control Protocol,簡稱TCP) 則是最長見具有傳輸層功能的協定。 TCP將資料流分割成適當長度的報文段(受該電腦連接的網路資料鏈路層的最大傳輸單元限制)。 TCP為了保證不發生丟包, 因此會給每個封包序號,同時序號也保證了傳送到接收端實體的包的按序接收。 然後接收端實體對已成功收到的包發回一個相應的確認資訊(ACK), 如果傳送端實體在合理的往返時延(RTT)內未收到確認, 那麼對應的封包就被假設為已遺失並進行重傳。 ### 第三層 網路層/IP層 #### 主功能 : 提供路由及定址功能,將網路表頭加至數據包,形成封包,以便在網路間傳遞。 主要的通訊協定是網際網路協定(Internet Protocol,IP)目的主要是為這筆資料定下傳送目的地的位址 資料在傳輸時,該協定將IP位址加入傳輸資料內,並把資料組成封包(Packet)。 在網路上傳輸時,封包裡面的IP位址會告訴網路設備這筆資料的來源及目的地。 由於網路層主要以IP運作為主,故又稱為「IP層」。 >[!NOTE]常見設備 企業機房 路由器 Layer3 交換器 >[!NOTE]其它 IP分享器 俗稱小烏龜的ADSL用戶終端設備 >[!NOTE]其他協定 IPX X.25 ### 第二層 資料連結層 #### 主要功能:負責網路尋址、錯誤偵測和改錯,為網路之間建立邏輯連結。 資料連結層將實體層的數位訊號封裝成一組符合邏輯傳輸資料,這組訊號稱為資料訊框(Data Frame)。 訊框內包含媒體存取控制(Media Access Control,MAC)位址、 邏輯鏈路控制(Logical Link Control, LLC) 兩部分。 而資料在傳輸時,這兩項資訊可讓對方主機辨識資料來源。 #### - 子層1:邏輯鏈路控制 LLC 主要工作: 控制訊號的交換 資料的流量 解釋上層通訊軟體傳來的命令並產生回應 克服資料在傳送的過程中所可能發生的種種問題(資料發生錯誤、重覆資料...) #### - 子層2:媒介存取控制 MAC 主要工作: 資料幀的封裝/卸裝 定址和識別 接收與傳送 差錯控制 鏈路的管理 位址格式: 由48個位元(6個位元組)構成。 以16進位的方式來表示 >MAC子層的存在消除了不同物理鏈路種類的差異性 MAC和IP一樣,都是提供「定址」的方式,好讓各個設備了解網路資料應該要往什麼地方發送。MAC的位址都是唯一的,所有的網路卡都有一個MAC位址,而這個位址不會與世界上其他的網路卡的MAC位址相同 >MAC主要負責控制與連線物理層的物理介質。在傳送資料的時候,MAC協議可以事先判斷是否可以傳送資料,如果可以傳送將給資料加上一些控制資訊,最終將資料以及控制資訊以規定的格式傳送到物理層;在接收資料的時候,MAC協議首先判斷輸入的資訊並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊傳送至LLC層。 ### 第一層 實體層 #### 主要功能:區域網路上傳送資料框,負責管理電腦通訊裝置和網路媒體之間的互通。 >[!NOTE]硬體: 針腳、線纜、電壓值、集線器、中繼器、網卡、主機介面卡...等 ___ 雖然OSI模型劃分了七層,但在實際應用中,很少有產品可以符合OSI模型的定義,有些層數在實務上是可以合併的,以下來討論TCP/IP模型。 ___ 1. 應用層(Application Layer):應用層提供了用戶與網路之間的交互。所有的應用程序協議,如 HTTP(網頁瀏覽)、FTP(文件傳輸)、SMTP(電子郵件)等,都是在這一層運行的。這層是最接近用戶的一層,它負責解釋數據並展示給最終用戶。 2. 網路層(Internet Layer):網路層負責在不同網段之間進行路由選擇和數據傳遞。最重要的協議是 IP 協議(IPv4 或 IPv6),用來確保數據包能夠正確地在全球範圍內傳輸。這一層的核心任務是根據 IP 地址確定路由路徑。 3. 傳輸層(Transport Layer):傳輸層負責數據的端到端傳輸控制。TCP 和 UDP 是這一層的主要協議。TCP 提供了可靠的數據傳輸,包括數據重傳、錯誤檢查和流量控制,而 UDP 則是一種更簡單的協議,適用於那些對延遲敏感且不需要數據重傳的應用。 4. 鏈路層(Link Layer):鏈路層負責數據在本地網路的傳輸,**類似於 OSI 模型中的實體層和數據鏈路層**。它處理數據包的物理傳輸,確保數據可以在本地網路中進行點對點傳輸。該層使用的協議包括以太網、Wi-Fi 和 PPP。 > TCP/IP 模型的設計特點在於簡單且高效,尤其適合現代互聯網的需求。TCP/IP 架構不僅廣泛應用於局域網(LAN),還是全球互聯網的基礎架構。它通過分層協作,使得網路通信能夠跨越多種不同的設備和網路。 ![image](https://hackmd.io/_uploads/SkCrGiOG1l.png) 以下試著用Wireshark來抓取幾個封包 # Wireshark 下載: `sudo apt install wireshark` 開啟: `sudo wireshark` >[!Note]楷賀有說網卡比較靠近底層Kernel的東西,所以必須得下sudo > ![image](https://hackmd.io/_uploads/HydsMjuz1x.png) 選 e 開頭的網卡(ethernet) ![image](https://hackmd.io/_uploads/Bkp0Mouf1x.png) - 指定 ip.addr 及 Protocol - ip.addr==44.211.137.141 && ssh ![image](https://hackmd.io/_uploads/SJyBXo_fyl.png) - 試著ssh到lsa server ![image](https://hackmd.io/_uploads/rkR_mj_MJe.png) ![image](https://hackmd.io/_uploads/r1VENoOMkl.png) >[!Note]切記這裡一定要開兩個terminal去執行操作,一個下sudo wireshark之後執行上述的操作,另一個下ssh 到 lsa群組試著傳送封包。 - 抓到封包了 ![image](https://hackmd.io/_uploads/rkzuwidfJl.png) # Link Layer ## MAC Address ![image](https://hackmd.io/_uploads/Hyr-DodGJl.png) 一張網卡,一個MAC Address > 同一區域網路 mac addr 絕對不能重複到但不同區域可以接受(因為不同IP) - 乙太網路將封包送出後,最終目的地地所有電腦都會收到封包,但為了知道封包要傳送的對象,所以每張Ethernet網路卡都編有一個獨一無二的位置,稱為**Media Access Control Address** - 在每一張Ethernet網卡出廠之前就已經將MAC Address寫在網路卡的ROM,一張網卡九有一個MAC Address在裡面 - 可以虛擬、重設定 - MAC層的每個封包都會記載「從哪裡送出」(Source MAC Address),「到哪裡去」(Destination MAC Address),比對過後就可以得知自己是否為傳送的對象,看是要丟起此封包,還是要繼續處理封包 >舉例:XxX電話!如果不關我的事就假裝沒聽到 - 試著打`ifconfig`,可以看到電腦有的網卡 ![image](https://hackmd.io/_uploads/rykp9iufyg.png) >[!Note]MAC 地址的 48-bit 表示法介紹 MAC 地址是一種硬體地址,用來標識網路卡,長度為 48 位元(bit)。通常分成 6 組,每組用 16 進位數字來表示,每組之間用冒號(:)或連字號(-)分隔。 例如: 48 位元的 MAC 地址:10101100 00101101 01101001 10010111 11110010 00011001 轉成 16 進位表示:AC:2D:69:97:F2:19 ![image](https://hackmd.io/_uploads/HyJEnsOGye.png) ## Connetcion device - 早期用hub ![image](https://hackmd.io/_uploads/ryay6idMJx.png) >有幾個特性 >1.會挑一個port,當成是它的input,(網路上的資料會隨機從一個port進來),無論今天送給1號還是2號,其他port也都會接收到,所以不安全。 >2.半雙工,一次只能決定要收還是送 - 現在改switch ![image](https://hackmd.io/_uploads/S1Ee13dGke.png) >Switch 的特性 基於 MAC 地址進行數據轉發 1.交換器會記錄每台設備的 MAC 地址,並建立一個 MAC 地址表,以決定數據包應該發送到哪個設備。 優點:資料不會亂傳,只會送到目標設備,節省網路資源。 2.全雙工通信(Full-Duplex) 交換器支援設備同時發送和接收數據。 優勢:傳輸速度更快,比集線器(Hub)的單工或半雙工通信更高效。 ![image](https://hackmd.io/_uploads/HJSRCi_z1e.png) ## CSMA CSMA 全稱 **Carrier Sense Multiple Access**,是一種資料傳輸的控制方法,意思是「偵測通道是否空閒,多個設備共同使用」。 - CS:傳資料前 MAC 先觀察 port 是否有空 - MA:讓很多人共同來使用的資訊通道 - CA:多個設備同時要傳輸,CA 會隨機決定設備使用的時間 - CD:發生碰撞的時候,碰撞的每一方會停止傳送、隨機等待一段時間再重新傳送 - CSMA/CD:用於有線網路(Ethernet)->碰撞容易被偵測和處理 - CSMA/CA:用於 Wi-Fi ->避免碰撞來減少碰撞 # Network Layer ## Intrnet Portocol(IP) :::info 小操作 Traceroute 下載: sudo apt install traceroute - 顯示只有一個( getway 10.0.2.2 )表示網路出不去,要把網路改成**橋接**(可能需要重新開機) ::: 以這個範例來說這是要送封包到英國的bbc,中間看到的1-16就是中間經過的router ![image](https://hackmd.io/_uploads/rknKxhdGyl.png) :::info 遇到可以 `ping 8.8.8.8` 但無法 `ping google.com` 解法: [[Ubuntu 22.04] DNS設定 - Ianyc - Medium](https://medium.com/ianyc/ubuntu-22-04-dns%E8%A8%AD%E5%AE%9A-b75d6383cf2f) ::: ## Method used in Network ### IP Routing - ip 可分成 Network ID 跟 Host ID - 網路位址(Network ID) - 位於 IP 的前端部分,用來辨識所屬的網路 - 暨大是 `163.22.0.0` - 主機位址(Host ID) - 位於 IP 的後端部分,用來辨識網路上的各個裝置 - 暨大學校網站`163.22.12.20` - 只要在暨大網段裡面的網路都是163.22.x.x >舉例來說,某天拿到192.168.117.x的網段,前面的192.168.117就是用來辨別所屬網路的網路位址(24 bits),後面的x則對應到可以分配的主機位址,x的長度總共有8 bits,所以可能的排列組合有256種(2的8次方),換句話說總共有256個主機位址可以分配給256個裝置使用。 ### IP Address 的等級(class) 將這個概念做延伸,不難發現前面的網路位址越短,可以分配的主機位址就會越多,為了滿足不同規模的網路需求,又依據網路位址的長度區分出不同的 IP 位址等級。 IP 位址的等級 當初設計 IP 時,將 IP 位址分成五個等級(Class A、B、C、D、E) 一般常用的是 Class A、B、C 這三種等級的 IP 位址,分別適用在大、中、小型網路,負責管理IP位址的機構,可以依照申請者所需要的網路規模,賦予不同等級的IP位址。 #### Class A 網路位址為 8 bits,第1個 bit(前導位元)必須是0。 網路位址從00000000~01111111,總共有128(2的7次方)個可以運用的網路位址(2的7次方)。主機位址為 24 bits,可以運用的位址總數為16777216個(2的24次方)。目前大部分的 Class A 都已經分配給過去有參與 ARPANET(Internet的前身) 實驗的政府機關、學術單位等等,所以現在無法取得 Class A 的IP位址。 ![image](https://hackmd.io/_uploads/H14wE2ufJe.png) #### Class B 網路位址為 16 bits,前2個 bits(前導位元)必須是 10。Class B 的 IP 位址必定介於128.0.0.0~191.255.255.255。主機位址為 16 bits,可以運用的位址總數為65536個(2的16次方)。大部分的 Class B 都被分配給大企業或ISP使用。 ![image](https://hackmd.io/_uploads/rJbuV3uzkl.png) #### Class C 網路位址為 24 bits,前3個 bits(前導位元)必須是 110。Class C 的 IP 位址必定介於192.0.0.0~223.255.255.255。主機位址為 8 bits,可以運用的位址總數為256個(2的8次方)。Class C 通常都被分配給小企業使用。 ![image](https://hackmd.io/_uploads/rJxK4hdMke.png) #### 特殊的IP位址 主機位址全為0 用來代表這個網路,以 Class C為例,196.67.208.0用來代表該 Class C 網路。 主機位址全為1 代表網路中的所有位址,主要是用在廣播上面。假設有電腦送出目的地為196.67.208.255的封包,則代表對196.67.208.0這個網路的所有裝置進行廣播(所有裝置都會收到封包)。 :::info 2^n-2 - n是所用的位數,減2是因為第一個和最後一個位址都是無效的 - *.*.*.00000000 此段網路第一個IP,代表此區段網路 Subnet *.*.*.11111111 最後一個IP,用作 Broadcast ::: #### 段落重點整理 從 IP 位址的第一段我們就能看出它所屬的 IP 位址等級。例如: 168.0.0.1可以從 168 判斷它是一個 Class B 的 IP 位址,IP 位址的前 16 bits 為網路位址,後 16 bits 為主機位址。 - Class A : 0.0.0.0~127.255.255.255 - Class B : 128.0.0.0~191.255.255.255 - Class C : 192.0.0.0~223.255.255.255![image](https://hackmd.io/_uploads/r1pSrh_fyg.png) ### Subnet 子網路 Subnet 子網路 - 切割網段 ⇒ 先決定想要分配的主機數: - Class C 網路為例: 11111111.11111111.11111111.**00000000** => 255.255.255.0 #### NetMask(子網路遮罩) - 由一串連續的1,加上一段連續的0 >例如: 11111111 11111111 11111111 00000000 通常寫作:255.255.255.0 ::: success Q: 有一IP Address:3.4.5.6 為class A, Net ID. Host ID為何? class A 有8 bits Network ID, 24 bits Host ID Netmask 是11111111.00000000.00000000.00000000 8 個 bits 的 1,那就保留 - Net ID: `3.0.0.0` - Host ID: `0.4.5.6` :::info 1.有一IP Address: 192.168.38.26 class c, 請問Default Mask, Net ID, Host ID 為何? 2.有一IP Address: 130.48.93.73 為class B, 請問Default Mask, NetID, HostID為何? ::: ### IP的種類:主要分為兩種 剛才是有拆解IP,至於哪裡可以應用呢? 1.public IP(公共IP或公開IP位址): - 簡單來說我們能看到的所有網站 2.private IP(私有IP或保留IP位址): - 當初設計IPV4時,預設保留給內部網路設定用的IP區段。 - 無法在公開網路上使用,只能在家裡、實室驗等等地方使用。 每個class裡都預留了一段作為private,提供給用戶或企業來設定規劃自己的區域網路: - classA:10.*. *. *,一組class A - classB: 172.16. *. * , 172.17. *. * ...,172.31. * . *,共16組class B - classC:192.168.0.* , 192.168.1. * ... ,192.168.255.*,共256組class C 一樣下`ifconfig`,可以看到10.107.29.251是private IP ![image](https://hackmd.io/_uploads/SyGKH_KG1x.png) :::success 作業: 下列哪幾個是屬於private IP,需要透過IP分享或偽裝才能夠連上INTERNET? 1. 172.15.11 2. 192.28.1.1 3. 10.100.1.1 4. 172.20.1.1 5. 192.168.5.1 6. 61.5.5.1 ::: spoiler 私有 IP 的範圍 A 類私有 IP:10.0.0.0 - 10.255.255.255 B 類私有 IP:172.16.0.0 - 172.31.255.255 C 類私有 IP:192.168.0.0 - 192.168.255.255 私有 IP 地址只能用於內部網路,如果要連接 Internet,必須使用 NAT(網路地址轉換)來進行 IP 偽裝。 檢查每個 IP 是否屬於私有範圍 172.15.11: 不在 172.16.0.0 - 172.31.255.255 的範圍內,因此 不是私有 IP。 192.28.1.1: 不在 192.168.0.0 - 192.168.255.255 的範圍內,因此 不是私有 IP。 10.100.1.1: 在 10.0.0.0 - 10.255.255.255 的範圍內,因此 是私有 IP。 172.20.1.1: 在 172.16.0.0 - 172.31.255.255 的範圍內,因此 是私有 IP。 192.168.5.1: 在 192.168.0.0 - 192.168.255.255 的範圍內,因此 是私有 IP。 61.5.5.1: 不屬於任何私有 IP 範圍,因此 不是私有 IP。 ::: :::info 分類網路(Classful Addressing),是引入**CIDR**之前在網際網路中使用的技術,但class a,class b,class c這樣的分類仍不夠彈性。 試想我們家裡有一台router,.被分類到最小的class c,我們家裡可能最多只有10台需要連網的設備,然而class c仍然給了我們254台的空間作使用,這樣就浪費了244台空間。 在意識到這個問題後,工程師們發布了新的技術**CIDR**,取代分類網路只能以8bits為單位分類class的問题,簡單來說就是沒有硬性規定HostID只能是16 or 8bits,可以是10bits,又或是以上面10台為例,就可以切出28bits的Net ID,剩下4bits 共 16台就可以涵蓋我 們需求了。 ::: ### Domain Name Server(DNS) 回到IP address,無論是分類網路法還是CIDR,還有一個間题,電腦看的懂這串數字,但我們實在是記不住,就像我們要用mood1e時,我們不會在瀏覽器打163.22.5.234,反過來說moodle 的網站也只會顯示 moodle.ncnu.edu.tw,此時我們會稱moodle是主機名稱**Host name**, ncnu.edu.tw 是Domain name,而電腦知道 moodle.ncnu.edu.tw 對應163.22.5.234的原因就 是因為有DNS,DNS就像是一個纪錄主機名稱與ip位址的資料庫。 1.不多人會在瀏覽器的網址列(URL)填寫IP了,大部分都是透過主機名稱来處理的。 2.因為Internet就是TCP/IP,因此上網一定要用IP才行(不論是IPv4還是IPv6)。 3,所以就需要透過DNS系統,讓瀏覽器直接去DNS系統詢間某主機名稱的IP後,瀏覽器再自行連上該伺服器! ### Address Resolution Protocol(APR) 主機剛連接到這個區域網路時或者重新啟動之後,是不知道目的方的MAC addr 的,如要向目地機器傳送一個IP packet,就需要先知道目的機器的MAC addr,所以會傳送一個ARP請求的封包。 ::: success 查看 ARP table - `arp -n`:以ip address查看table ![image](https://hackmd.io/_uploads/BJ0zp_tM1l.png) - `arp -d<ip 位址>`:刪除特定紀錄 - `arp -s<ip 位址><Mac 位址>`:新增一筆靜態紀錄 >過了兩分鐘部會被刪除,但重新哀機後就會被清除 ::: - 只能在區域網路內解析網路裝置的MAC Address - 知道裝置的IP時,查尋對應的MAC Address - `A` (163.22.1.1)要傳送封包給`B` (163.22.1.1),`A`知道`B`的IP位址,但不知道MAC位址 - `A`發送ARP request給區網上的所有裝置(廣播封包) - 用這個IP的裝置會回應ARP reply(`B`會產生回應) - `A`把`B`的MAC位址回傳 - Cache:`A`將該筆IP/MAC寫入ARP Table中,保持20分幢 這樣,`A`就知道`B`的MAC位址,它就可以向B傳送資訊。同时它還更新自己的ARP table,下次再向`B`傳送資訊時,直接從ARP table裡尋找就可。 ### DHCP(Dynamic Host Configuration Protocol,動態主機組態協定) - DHCP使裝置能夠在連接到網路時自動獲取相關配置(IP Address、子網路遮罩、DNS sever address等) >DHCP Server(餐廳服務生):主動詢問ˊ裝置需要多少個IP地址,然後提供相應的網路配置給要連線的裝置(客人):進入網路的設備,ex.電腦、手機等 - 運作步驟 - **DHCP Discover**:Client發送一個DHCP Discover 封包(廣播),通知網路上的DHCP Server:「我需要一個IP」 - **DHCP Offer**:DHCP Server收到Discover 封包後,回應一個DHCP Offer封包,其中包含:一個可用的IP地址、子網路遮罩、網關(Gateway)。DNS server等 - **DHCP Request**:Client收到DHCP Offer後,發送一個DHCP Request封包,確認要使用的IP底止 - **DHCP Ack**:同意Client可以使用這個IP address ![image](https://hackmd.io/_uploads/BJaJ0OKMkx.png) ### NAT 網路位址轉譯(Network Address Translation, NAT ) 可以改變 封包 的傳送端 IP 位址與接收端 IP 位址,減少真實 IP 的使用量,也可以將私有 IP(內部 IP)改變成真實 IP(外部 IP)再傳送到網際網路,只需要向網際網路服務供應商,例如:中華電信(2412-TW)申請一個真實 IP,就可以將公司內部所有的電腦連接到網際網路了,因此 NAT 伺服器 是最重要的 <font color=#f00>防火牆</font> 成員,也是一種「封包過濾器(Packet filter)」。 NAT 伺服器的原理 NAT 伺服器的連接方式如<圖一>所示,一端連接私有網路(內部網路),由企業內部網管人員自行設定私有 IP,可以自由設定但是不可以重覆,不需要支付費用,而且可以減少真實 IP 的使用量;一端連接外部網路(網際網路),由企業向網際網路服務供應商(例如:中華電信)申請真實 IP,必須支付費用。 假設台大電機系的網管人員將網路切割為內部與外部,內部網路的網址設定為 192.168.1.1、192.168.1.2、192.168.1.3;而外部網路的網址為 140.112.66.88,則 NAT 伺服器的功能就是更改封包表頭的傳送端 IP 位址與接收端 IP 位址。 ➤傳送封包:假設私有網路(內部網路)的電腦 A 要傳送封包到網際網路(外部網路),所以將封包表頭內的傳送端 IP 位址設定為 192.168.1.1,如<圖一(a)>所示。 ➤轉送封包:NAT 伺服器將封包表頭的傳送端 IP 位址改成 140.112.66.88 再傳送到網際網路(外部網路),並且記錄這個封包來自電腦 A,如<圖一(b)>所示。 ➤接收封包:網際網路(外部網路)要傳送封包到電腦 A,但是封包表頭的接收端 IP 位址設定為 140.112.66.88,因此先由 NAT 伺服器接收進來,如<圖一(c)>所示。 ➤轉送封包:NAT 伺服器將封包表頭的接收端 IP 位址改成 192.168.1.1 再傳送到私有網路(內部網路)的電腦 A,如<圖一(d)>所示。 ![image](https://hackmd.io/_uploads/rkXifKFz1g.png) ## Lan vs Wan - Lan(Local Area Network) - ip:192.168.0.1 or 10.0.1.256 - Wan(Wide Area Network) - 接外部IP地址用 - LAN 是封閉型的,可以由辦公室的兩部電腦組成,也可以由一個公司內的上千台電腦組成。 - WAN 就是由多個 LAN 組合之集合 同一網域 透過 switch 用 MAC Address 溝通 不同網域 透過 Router 用 IP Address 溝通 ## Port - 如果只有 IP 位址,若有不同的軟體要同時進行傳輸,所有的資料從同一個出口一起通過會發生碰撞 - 連接埠:讓一台電腦擁有多個對外的出口,讓網路傳輸有多工的能力 - 每個 Port 對應不同的網路 ### Port 相關指令 - `cat /etc/services`:查看 Port 的使用狀況 - `grep -w /etc/services`:查詢指定 Port ## Method in Transport Layer ### UDP (User Datagram Protocol) - 僅提供傳輸基本功能,負責處理封包要傳送到哪個 Port - 追求即時性且能容忍一些封包丟失的情況(盡力傳遞) - 串流服務、視訊、音訊 ### TCP - 可靠的傳輸方式 --> 保障資料完整性 - 連線導向(Connection-Oriented):傳輸資料前先建立連線,協調參數!(用於資料確認與重送、流量控制) > 利用三項交握建立連線(SYN -> SYN-ACK -> ACK) ![image](https://hackmd.io/_uploads/SJF-JWzXyg.png) - 資料確認和重送:確認目的端是否收到已送出的資料 - 流量控制:視情況調整資料傳輸的狀況,盡量減少資料的流失 > 利用滑動視窗 (Sliding Window) ![image](https://hackmd.io/_uploads/S1vtgZf7yx.png) ### TCP Header ![image](https://hackmd.io/_uploads/SyOSZbMmkx.png) | 特性 | TCP | UDP | |--------------|------|------| | 可靠性 | 可靠 | 不可靠 | | 封包確認 | ACK | - | | 速度 | 慢 | 快 | | 傳輸方式 | 封包按順序傳輸 | 封包可以串流方式傳輸 | | 錯誤檢查與修正 | 有 | 無 | | 連接處理 | 適時重傳, 高速重傳(指定封包) | 適時重傳(全部封包) | | 嚴密控制 | 有 | 無 | | 適用服務 | 要求可可靠運輸的服務, ex: SSH, 文字聊天, 電子郵件, 檔案傳輸 | 請求速度的即時服務, ex: 串流媒體, 網路電話 | # Application Layer ## HTTP (Hyper Transfer Protocol) - 全球資訊網 (www) 的網路通訊的基礎 - 用於網頁前後溝通,瀏覽器向伺服器發送請求,伺服器回傳相應的資料 :::info - Get - 較 Post 不安全 - 訊息會顯示在 head, body 不傳資料 - 傳遞的參數會在 URL 上顯示 - 流程: 1. 瀏覽器發出 Get 請求,只產生一個 TCP 封包 2. 伺服器回應 200,表示請求成功,同時返回資料 - Post - 較 Get 安全 - 將參數放在 body 中再發送 request - 不會在 URL 看到參數,適合用於隱密性較高的資料,例如:登入的帳號、密碼等 - 流程: 1. 瀏覽器發送 Post 請求,只產生一個 TCP 封包 2. 伺服器回應 200,表示請求成功,同時返回資料 - Put:新增一項資料,如果存在就覆蓋過去(維持一筆資料) - Patch:附加新的資料在已經存在的資料後面(資料必須已存在) - Delete:刪除資料 - Head:只會取得 HTTP header 的資料 - Option:可以了解 server 提供哪些溝通方法 - ::: ## DNS (Domain Name System,網域名稱系統) - 將 Domain Name 轉換成 IP Address - Domain Name:moodle.ncnu.edu.tw - IP address:163.22.5.234 - 查詢DNS資訊:`nslookup <Domain Name>` > 從後往前解讀 > tw:臺灣 > edu:教育機構 > ncnu:暨大 > moodle:moodle系統 :::info ![image](https://hackmd.io/_uploads/BJwp6GMX1l.png) 如何找尋DNS ![image](https://hackmd.io/_uploads/Hy8rCMfQkg.png) - `/etc/nsswitch.conf` - 定義了解析的依序優先順序決定先要用 /etc/hosts 還是 /etc/resolv.conf 的設定 - files (本機檔案):ex. /etc/hosts、 /etc/passwd - `/etc/hosts` - hostname 對應到 IP 的檔案 - /etc/hosts 加上 1.2.3.4 google.com 後輸入 google.com 會連到 IP 位置 1.2.3.4 的位置上 - `/etc/resolv.conf` - 解析時使用的 DNS Server 的 IP - `nameserver 8.8.8.8` DNS查詢發送到 Google的 DNS Server ::: ## FTP (File Transfer Protocol) - 用於檔案傳輸,將共享檔案存放在FTP Server,讓一般使用者可以透過網路來下載或上傳。他的重點在異質性的電腦以及遠距離的檔案共享。 - Client-Server 模型 - FTP Server:提供檔案的 Server 端 - FTP Server:透過 FTP 連接到 Server,執行上傳或下載操作的 Client 裝置 - 20 port:傳遞資料 - 用於實際的檔案資料傳輸(下載或上傳檔案) - 21 port:傳輸流程控制 - 進行身分驗證、輸入帳密等指令 :::info - 主動模式(Active Mode) 1. Client 利用 Command Port (1026) 向 Server 的 Command Port (通常是 21) 發送連線請求,同時告知 Server 自己的 Data Port 是 1027 (N + 1) 2. Server 同一個 ACK 到 Client 的 Command Port (通常是 21) 發送連線請求,同時告知自己的 Data Port 是 1027 (N + 1) 3. Server 從自己的 Data Port (20) 向 Client 在第一步指定的 Data Port(1027) 建立連線 4. **連線成功後**,Client 會向 Server 的 Data Port (20) 發送一個確認的 ACK - 被動模式(Passive Mode) 1. Client 主動跟 Server 連線後,告訴 Server 使用 Passive Mode 2. Server 回 ACK 並告訴 Client 自己開了一個 Data port (2024) 3. Client 主動跟剛才 Server 指定的 Data Port 連線 4. 最後 Server 回一個 ACK 給 Client 的 data port ::: ## HTTP 協定版本 ### HTTP 1.0 - 簡單的文本設定 - **無** 連線持續性 (keep-alive) - 單一請求-回應模型:每個請求都需要建立新的連線,完成後即斷開 - 浪費頻寬、時間延持 - 單路徑傳輸,一次只能處理一個請求 - 狀態碼 - HTTP 1.0 主要使用標頭中的 if-Modified-Since 和 Expires 來做為暫存的判斷標準 ### HTTP 1.1 - 連線持續性 (keep-alive) - 可以使用同一個 TCP 來重複多個 HTTP 請求,預設keep-alive,避免重新建立連線 - 管道化 - 允許在同一連接上平行發送多個請求,但回應還是按照請求的順序返回 - - 狀態碼 100 (Continue) - 引入了狀態碼 100,改善了 client 端發送 Request 的模式,避免不必要的頻寬浪費。 -更多請求方法 - 新增了 `PUT`、`PATCH`、`DELETE`、`CONNECT`、`TRACE` 和 `OPTIONS` 等請求方法。 - Host 標頭 - 支援多虛擬主機,使用 Host 標頭字段指定伺服器的域名。 - > 現在在一台伺服器上可以存在多個虛擬主機,並且共享同一個 IP。所以加上 Host ID 之後,就可以將請求發往在同一台伺服器上的不同網站。 - 快取 - 引入更多的暫存功能,例如 `ETag`、`If-Modified-Since` 等。通過這些功能可以最優化暫存的效率。 ### HTTP2/SPDY SPeeDY - 加快網路載入速度,減少延遲 ![image](https://hackmd.io/_uploads/HkYNH-QXJe.png) ### HTTP3/QUIC :::info QUIC - **Q**uick **U**DP **I**nternet **C**onnection - 連線建立 (Connection Establishment) ### 特點 - 多路複用 (Multiplexing) > TCP HOL Blocking 問題:在 TCP 連線中,一個封包的遺失會導致整個連線的傳輸被卡住,直到封包被重新傳送。 - 允許在同一連線上進行多個 Stream 的資料傳輸。當某一個 Stream 中的封包遺失時,僅影響該 Stream 的傳輸,其他則不受影響,有效避免 **TCP HOL Blocking** - 封包遺失恢復 (Loss Recovery) - 在 TCP 中,封包遺失恢復網路使用序列號標記封包,接收端回傳帶有相應序列號的 ACK - TCP 重傳歧異問題:雖以區分是接收初始封包還是重傳封包的 ACK,可能影響 RTT 和 壅塞控制演算法 - QUIC 解決方案:使用唯一的封包編號 (unique packet number),每次傳送都有新的編號,解決了 ACK 的 歧異問題,提高了 RTT 準確度,降低封包重傳反應時間 - 流量控制 (Flow Control) - 流量控制限制 Client 傳輸資料量,接收端只保留相對應大小的接收 buffer - QUIC 使用連線層和 Stream 層流量控制,避免單一 Stream 占用過多 buffer,防止 HOL Blocking - Connection Migration - QUIC 使用 64 位獨立的 Connection ID 來識別連線,由 Client 在建立連線時隨機產生 - Connection ID 允許在 Client 的 IP 變動時,仍能平順處理 Connection Migration 的問題 - Client 端可以使用舊的 Connection ID 在新的 IP 位址上傳送封包,接收端透過 Connection ID 識別連線,確保封包正確接收 > HTTP 透過 QUIC 會比 HTTP/2 經由 TLS 加密後在傳輸還要快 ![image](https://hackmd.io/_uploads/H18NKWm71l.png) ::: ## Demo ::: success **使用 telnet 上網** - 沒有指定 host --> 預設頁面 ``` telnet ammon.bluet.org 80 GET / HTTP/1.0 ``` > 會顯示網頁的一些資訊(HTTP版本、使用什麼Server...等) ![image](https://hackmd.io/_uploads/B15xf877yx.png) - 指定 Host ``` telnet ammon.bluet.org 80 GET / HTTP/1.0 Host: studio.bluet.org ``` > 輸入後按兩下 enter 才會顯示抓到的資料 > 告訴網頁伺服器我們指定什麼 Host > 最後回傳指定 Host 的網頁資料 :::