App 開發基礎講義

給初學者的應用程式開發基礎知識

網路概論: TCP/IP

  • 目標讀者: 應用程式初學開發者,特別是 Application Developer
  • 目的: 了解網路是如何運作的基礎知識
  • 學校會教理論 OSI 模型,這堂課使用比較實務的 RFC 1122 模型:
    • Application Layer 例如 HTTP、FTP、SSH 等
    • Transport Layer 例如 TCP、UDP
    • Internet Layer 例如 IP
    • Link Layer 例如 Ethernet、無線網路 802.11n
  • 身為 Application Developer,我們主要在應用層 (Application Layer) 活動,最大宗就是熟悉 HTTP,但仍要基本了解底層是怎麼運作的

TCP/IP 通訊協定

封包 圖片出處 http://linux.vbird.org/

IP 封包

  • 一個IP封包的大小為46~1500bytes
  • IPv4 Address 用 4bytes 來表示一台電腦(設定在網路卡上)的網路位置
    • Internet/Public 和 Intranet/Private http://en.wikipedia.org/wiki/Private_network 有一些 IP addresses 區段被分配成內網專用
    • CIDR 表示法:用來表示一整個區段的 IP 位置
    • NAT 的技術,讓我們有更多 IP 可以使用
  • IPv6 Address 用 16bytes 來表示網路位置
    • Apple 要求必須 IPv6 相容
    • 要使用 IPv6,必須 client 端到 server 端中間的網路設備都要支援 IPv6,DNS 也需要設定 AAAA Record 表示 IPv6 位置。Hinet 預設是不支援的,需要另外申請。現代機房(Linode、AWS)則都有支援 IPv6。
    • IPv6 來了 ???

TCP/UDP 封包

  • IP 封包有地址可以抵達對方電腦,但是一台電腦上有很多不同種類的應用程式,到底這個封包是要給哪一個程式去處理?
  • UDP和TCP封包定義了 Port number 來源埠和目的埠。就像不同碼頭,編號從 0~65535,詳見 TCP/UDP埠列表,一台電腦上不同的應用程式就會用不同的 Port。
    • 每一個需要用到網路的程式,都必須跟作業系統登記要一個 Port 來使用。如果你要編號 1024 以下的話,作業系統還會要求你有 root 權限。
  • IP 封包並不會保證封包抵達的正確性,TCP 實作了更多步驟來保證資料傳輸的順序、重發遺失的封包、捨棄重複的封包、無錯誤資料傳輸、阻塞/流量控制、確認有建立三方交握,連線已建立才作傳輸等等。UDP 則無。
    • 為什麼 HTTP 使用 TCP,而 Real-Time 視訊串流通訊協定較多用 UDP? 例如 RTSP、RTP、H.323、SIP 等等
  • ICMP
    • ping 指令
    • traceroute 指令
  • 網路工具
    • Wireshark 網路封包擷取
    • ifconfig 指令可以查看網卡資訊

補充資料

》回到頁首