---
# System prepended metadata

title: Ch01 Internetworking and Packet Forwarding

---

Ch01 Internetworking and Packet Forwarding
===
* OSI(Open Systems Interconnection)
    ![](https://i.imgur.com/iXkcheq.png)
    * ISO (International Organization for Standardization) 提出的開放式系統互聯模型
    * User Space
        * Layer 7: Application
        * Layer 6: Presentation
        * Layer 5: Session
    * Kernel
        * Layer 4: Transport
        * Layer 3: Network
    * Underlying NWs
        * Layer 2: Data Link
        * Layer 1: Physical

* Decapsulation
    1. Ethernet driver 接收封包
    2. Ethernet Frame 的 frame type 決定 Network layer 的 protocol
        * ARP
        * IP
        * RARP
    3. IP datagram header 的 Protocol 決定 Transport layer 的 protocol
        * ICMP
        * IGMP
        * TCP
        * UDP
    4. Transport layer 再根據不同 port 對應不同服務

* switch
    * mac address
        * 網卡 (Network Interface Card)
        * 48 bits
        * 由 IEEE 管理，廠商要跟它買 mac address，因為要保證 mac address 唯一
        * 在區網可以用來傳送 frame 到其他 interface
    * sending host
        * 將資料封裝成 frame
        * error checking bits, flow control 等等
    * receiving host
        * 確認封包的正確性
        * 解析並把封包往上層傳
    * self-learning
        * 會自動、動態的建立 switch table
        * 在 table entry 更新每筆傳送的 mac address, interface, TTL
    * plug-and-play
    * frame structure
        1. preamble: 7 bytes，同步接收傳送方
        2. dest address: 6 bytes，目的地 mac address
        3. src address: 6 bytes，來源 mac address
        4. type: 2 bytes，決定上層的 protocol
        5. CRC: 4 bytes，接收方驗證資料正確性

* router
    * 在 network layer 根據 IP 決定 forwarding
    * subnet
        * 同個 subnet 的 interface 可以不透過 router 溝通
        * .0 結尾的 IP 是 network number
        * .255 結尾的 IP 是  Broadcast IP
    * CIDR(Classless Inter-Domain Routing): a.b.c.d/x
    * longest prefix matching
    * routing table entries
        * Next-hop routing: routing table 只記錄下一個 hop 的位址
        * network-specific routing: 只記錄目的地 network，而不是位址
        * default routing
        :::warning
        Q: 不太懂這個在做什麼?
        A:
        1. 每台機器只會有一個 Default route，以家用設備來說就是 uplink 接的那台機器
        [name=Sean]
        :::
        * Host-Specific Routing: 記錄 host address，只是比較沒效率
    * ip datagram forwarding
        * direct forwarding: 在同個 physical network 中時，可以直接將 frame 送往 destination host
        * indirect forwarding: 在不同 physical network 中，只能將 frame 送往 next-hop router
    * hop-by-hop data delivery
        * 每到一個 router 都會把封包拆到 netork layer 然後裝回去後傳到下一個 router
        * network layer 中的 ip 不變
        * link layer 的 mac 每個 hop 都會變

* ARP(Address Resolution Protocol)
    * 每個 ip node 都有 arp table
    * 用來對應 ip 和 mac
    * ethernet frame type = 0x0806
    * plug-and-play
    * 記錄 arp table entry 流程
        1. A broadcast arp request
        2. B 把自己的 mac address unicast 給 A
        3. A 保存 ip 對應的 mac 到 ARP table

* DHCP(Dynamic Host Configuration Protocol)
    * UDP
        * server: port 67
        * client: port 68
    * 申請 ip address 流程
        1. host: broadcast dhcp discover
        2. dhcp server: dhcp offer
        3. host: dhcp request
        4. dhcp server: dhcp ack

* ICMP(Internet Control Message Protocol)
    * network layer protocol
    * 在 ip header 中的 protocol field = 1
    * type
        * 0: reply
        * 3: unreachable
        * 8: echo request
        * 11: TTL expired
    * traceroute 原理
        1. 每經過一個 router 收到，TTL\-\-
        2. 到達目的地 host 後，檢查正確性
        3. demux datagram via port
           如果 port 剛好沒被用到，會回傳 ICMP Port unreachable
            :::warning
            Q: 不確定這邊的 port 指的是什麼 port?
            A:
            1. UDP 的 port
            [name=Sean]
            :::