NCNU-OpenSource
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Help
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

Your note will be visible on your profile and discoverable by anyone.
Your note is now live.
This note is visible on your profile and discoverable online.
Everyone on the web can find and read all notes of this public team.
See published notes
Unpublish note
Please check the box to agree to the Community Guidelines.
View profile
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
- 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 的網頁資料 :::

Import from clipboard

Paste your markdown or webpage here...

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template has been removed or transferred.
Upgrade
All
  • All
  • Team
No template.

Create a template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

Slide Example

API Docs

Edit in VSCode

Install browser extension

Contacts

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

Note content is identical to the latest version.
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully