# TCPIP [TOC] ## 引言 ![](https://i.imgur.com/rTct7Uz.png) [圖片出自](https://miahsuwork.medium.com/%E7%AC%AC%E5%85%AD%E9%80%B1-%E7%B6%B2%E8%B7%AF%E5%9F%BA%E7%A4%8E-tcp-ip-f89cc09f1f36+6) 1. DNS 將 URL 轉換成實際的 IP Address,Browser 將 IP Address 包成一個 Request 送出去。 2. request 透過 Internet 傳送到 Server 。 3. 收到 Request 的 Server 會跑去 Data center 撈取資料。 4. 將撈取到的資料透過 Internet Response 回去。 5. Browser 解析資料並印於 Browser 上。 + 秋分傳紙條要約柏瑋看電影 1. 案例一 + 秋分沒寫要給誰 ![](https://i.imgur.com/vYNrrws.png) 2. 案例二 + 信沒傳到,秋分不知道 ![](https://i.imgur.com/8TXQUlq.png) + ![](https://i.imgur.com/ID2WFW3.png) ## 分層架構 ### TCP/IP + TCP/IP Protocol Suite或TCP/IP Protocols + 用最核心的 TCP Protocol 和 IP protocol 為命名 + 最早發源於美國國防部(縮寫為DoD)的ARPA網項目,因此也被稱作DoD模型(DoD Model)。這個協定套組由網際網路工程任務組負責維護。 ### OSI + 依據網路運作方式,OSI模型共切分成7個不同的層級,每級按照網路傳輸的模式,定義所屬的規範及標準。所謂的OSI,是由國際化標準組織(ISO)針對開放式網路架構所制定的電腦互連標準,該模型是一種制定網路標準都會參考的**概念性架構**,並非一套標準規範,也不是用來提供實現的方法,而是透過觀念描述,協調各種網路功能發展時的標準制定。 + 組織ISO(International Organization for Standardization) + 架構OSI (Open System Interconnection Reference Model) + ![](https://i.imgur.com/ErjumMC.png) ::: info | TCP/IP|OSI| | -------- | -------- | |最早發源於美國國防部的專案<br>1983年,在網際網路的前身 (ARPA網) 中通訊方式換成新的定義 | ISO(國際標準化組織)組織1985年 研究的模型 | |做 OS 的人比較常用的規範| network device 的人比較常用的規範| ::: # TCP/IP 各層內容 ![](https://i.imgur.com/8WgVep3.png) ## Link layer ![](https://i.imgur.com/aW67xW8.png) + link : 連接 Internet 上相鄰的 node ### Ethernet vs Wi-Fi 網路| 標準 | 功能 | 傳輸媒介 | 碰撞處理 |---------| -------- | -------- | -------- | ---------- | |Ethernet| 802.3 | 區域網路連線上的通信協定 | 雙絞線 | CSMA/CD |Wi-Fi | 802.11 | 無線區域網路的電腦通訊標準 | 5GHz / 2.4GHz 無線電波 | CSMA/CA| ![](https://i.imgur.com/I4CFA2V.png) ### CSMA/CD (Carrier Sense Multiple Access / Collision Detection) > 多台電腦同時傳到同一台也會 collision + 被動偵測 + 傳送步驟: 1. 當節點要發送訊號時,會先偵測通道是否有其他節點正在使用(carrier sense) 2. 當通道沒有被其他節點使用時,就傳送封包 3. 封包傳送之後立即檢查是否發生碰撞(carrier detection),若是發生碰撞則對通道發出高頻訊號高知其他節點已經發生碰撞 4. 碰撞後隨機等待一段時間重新發送封包 5. 嘗試 15 次都失敗的話則告知上層 Timeout + ![](https://i.imgur.com/MsY1eRo.png) + 用於容易偵測碰撞的網路環境 + 有線網路 > 同一條線 ### CSMA/CA (Carrier Sense Multiple Access / Collision Avoidance) + 主動避免collision + 傳送步驟 1. 送出資料前,聆聽網路上的狀態,如果沒有人使用,維持一段時間後,再等待一段隨機的時間後如果還沒有人使用,才送出資料。由於每一個裝置採用的隨機時間不同,可以減少碰撞的機會。 2. 送出資料前,先送一個RTS (Request to Send) 封包給目標端,等待目標端做出回應有就是送出 CTS(Clear to Send) 封包後,才開始傳送。 3. 資料傳送完成後,傳送裝置會等待一小段時間接收確認封包(Ack),有收到才代表成功 > 當失敗 32 次之後通知上層 Timeout + 多用在無線網路 + 無線的環境、不容易確實的偵測是否有碰撞發生,所以修改不用被動的碰撞偵測(CSMA/CD)而改為使用主動的避免碰撞(CSMA/CA)。 ![](https://i.imgur.com/GlcfLhS.png =300x) ### Header ![](https://i.imgur.com/XkKuxmU.png) #### Link layer header + 傳送單位為frame + Ethernet frame + ![](https://i.imgur.com/obfgGdI.png) + ![](https://i.imgur.com/hRBkV4H.png) + Preamble本身並沒有實際的意思,僅僅用在發送方和接收方之間同步時鐘和bit流;當發送方發送數據時,會加上這7個字節的報文,告訴接收方「請按照這種規律準備好,我馬上要發送數據了」;當接收方連續收到「10101010」這串代碼時,就需要調整字節的時鐘,準備好接收數據。 + SFD start of frame delimiter 它只有1個byte,內容是固定的:「10101011」,通知接收方「從這個byte以後的內容都是有效數據,不能丟棄了」 > REF:https://kknews.cc/code/568kjn2.html > JUMBLE FRAME ### Mac Address + 1 張網卡,一個 MAC address > 同一區域網路 mac addr 絕對不能重複到,但不同區域可以接受 (因為不同IP) + 在區網路內的地址 > 班級內的座號,同班級只能有唯一一個座號,但不同班可以有相同的座號 + ![](https://i.imgur.com/0y3E4An.png) + size : 6 bytes (48 bits) + 48 bits - 第 1 bit 為廣播位址(0) / 群播位址(1) - 第 2 bit 為廣域位址(0) / 區域位址(1) - ![](https://i.imgur.com/mcFRE8W.png) :::info ![](https://i.imgur.com/6q87tVt.png) ::: - 3~24 bits 由 IEEE 決定如何分配給每一家製造商,且不重複 - 最後 24 bits 由實際生產該網路裝置的廠商自行指定且不重複 + 區域網路位址(LAN Address)、Ethernet Address 或 Physical Address + broadcast 是特殊情況全部 bit 為1 (FF:FF:FF:FF:FF:FF) :::success ### 練習 1. 4A:30:10:21:10:1A 2. 47:20:1B:2E:08:EE 3. FF:FF:FF:FF:FF:FF + 以上何為 multicast, unicast, broadcast >FIXME 補 ifconfig 的截圖 ::: ![](https://i.imgur.com/sOz72Dg.png) ### connecting device + hub > FIXME: hub 可以先講 + ![](https://i.imgur.com/Mzp8rrb.png) + broadcast 收到資料就全部送出去 > 不安全 + 半雙工 (half-duplex) >FIXME: 簡單講一下半雙工是甚麼意思 + 收資料或送資料不能同時,你一次只能做其中一種。 + switch + ![](https://i.imgur.com/G0odcWk.png) + 可以建立 MAC address table,找目的地網卡在哪個 port + > 依照價位儲存不同數量的Mac address + 找不到就 broadcast + 每個 port 都是獨立的 collision domain + ![](https://i.imgur.com/OqDpzib.png) + 每一台主機隨時都可以傳送/接收 (全雙工) 相對hub switch比較不用 CSMA/CD ### LAN - 連接住宅、學校或辦公大樓等有限區域內電腦的網路 - Ethernet (乙太網路) - Ethernet 為 LAN 中最常使用的一種技術 - 相關規範由 IEEE 訂定,收錄於 IEEE 802.3 標準中 - ![](https://i.imgur.com/GWkM7om.png) :::info > FIXME: 內容需整理 ## 網路拓撲(network topology) 網路拓樸就是網路中電腦彼此連接方式 1. Star + ![](https://i.imgur.com/GWkM7om.png) + 優點:控制簡單,添加或刪除某個站點非常容易網路維護較容易。 + 缺點:當網路的中央主機發生故障時,將導致整個網路癱瘓,而且每一台周邊電腦都必須佈放一條連線到中央主機,對於範圍比較大的環境不易達成,費用也較高。 2. Bus + ![](https://i.imgur.com/NmXCSGl.png) + 優點:網路佈線簡單,只要一條網路主幹就能將網路上所有電腦連結起來,而且不管是要在該網路加入新電腦或想將那部電腦退出網路,都不需要做特殊處理。 + 缺點: + 連結網路的傳輸媒體任何一個地方斷線,將使整個網路癱瘓。 + 各工作站之間傳送資料還都必須透過同一傳輸媒介。 3. Ring + ![](https://i.imgur.com/rL9MFT1.png) + 優點:網路上任何一個節點使用傳輸媒體的權限都相等,而且各節點使用傳輸媒體的機會平均分配,沒有爭執及碰撞的現象,尤其使用在高負載網路上非常適合。 + 缺點:環狀拓樸圖上任何一個節點發生故障,可能使整個網路癱瘓。而且在佈放網路方面,由一個起始點開始佈放線路,經過整個網路區域後必須回到原點,在網路網路架設施工方面的確有困難。 4. Tree + ![](https://i.imgur.com/3d8cyeR.png) + 優點:除了具有星狀優點外,又可改善星狀的缺點,當某一主機電腦故障時,只會影響到該節點的周邊電腦不能通訊,而不會使整個網路癱瘓。其他網路節點還是可以正常運作。 + 缺點:整個網路的可靠度還是受限於各節點主機電腦。 > REF:https://www.atcnet.com.hk/newsContent_233.html ::: ## Internet layer ![](https://i.imgur.com/Fqs2Tfh.png) ### 網域 + 連線方式: + 同網域:可以直接透過 CSMA/CD 傳遞資料,網卡對網卡 (MAC frame ) 。 + 不同網域:需要借由 Router 將不同網域連接。 ### Router ![](https://i.imgur.com/OEarHnG.png) - 若 PC01 要傳資料給 PC11 時: 1. 看封包目標 IP 位置。 2. 查看自己主機的 Net_ID 是否與封包的相同(屬於同區網),若相同可以直接傳給目的主機。 3. 若不同,查詢 default gateway( 此為 Server A ) 並傳給它。 4. 不理會封包流向,default gateway 會執行上述動作繼續往目的地傳送。 :::info ### 查看自己的routing table + `route` 指令: + `-n`: 主機名稱以 IP 顯示 + ![](https://i.imgur.com/6QdO34E.png) ::: ### IP ==Internet Protocol 中的 IP Address (簡稱 IP)== 1. IPv4: IP address 以 32bits 表示,為目前主流。 - IP 位置枯竭: 現在在網路上的主機數已經多過 IPv4 32 位元可以表示的數量( 總數為 42 億多 )。 - 1993年,推出網路位址轉換(NAT)與無類別域間路由(CIDR),來減緩 IP 位置枯竭的問題,但未來最終的解決方案還是需要轉換到 IPv6。 2. IPv6: IP address 以 128bits 表示,未來趨勢,可以多出許多 IP 位址,供新裝置使用。 :::info **NAT(Network Address Translation): 將私有 IP 位置轉成公開 IP 位置**: ![](https://i.imgur.com/yXndx6S.png) - 網站伺服器無法定位私有 IP,在電腦送 Request 出去時,Router 就會把來源的 IP 位置改成 public IP(Router 同時有兩個 IP 位置,區網內的私有 IP 位置,以及 ISP 指派的公開 IP 位置)。 - Router 在更改 IP 位置時,會將私有 IP 與 request 目標的 IP 記錄下來,當 request 的 server 回應時,從記錄中就可以知道要傳回哪個私有 IP。 - **因為可以多個主機共用一個公有 IP ,所以暫時解決 IP 不足的問題**。 | | 處理事項 | | -------- | -------- | | router | 只轉送,不會記下封包連接狀態 | | NAT | 轉送外,可以做 IP 轉換,並記下來源 IP /目的 IP | | bridge | 連接兩個不同網段,可以是相同類型或不同類型的網路。| > [REF1](https://networkengineering.stackexchange.com/questions/58027/is-a-gateway-both-a-router-and-a-nat) [REF2](https://giboss.pixnet.net/blog/post/26798642) ::: ### IP 位置表示: - 以二進位表示 - 00000000.00000000.00000000.00000000 => 0.0.0.0 - 11111111.11111111.1111111.11111111 => 255.255.255.255 - 分為 Net_ID, Host_ID - Net_ID: 網路編號。 - Host_ID: 主機編號。 - Host_ID 不可全 0 或全 1: - 全0: 表示網段的位置。 - 全1: 表示廣播位置。 ### IP 種類 - 有 A, B, C, D, E 五種 IP Class ( classful addressing ,現在幾乎不會用這種。 ) ![](https://i.imgur.com/JT9Yx0N.png) [圖片來源](https://www.eventhelix.com/networking/ip-routing/) - A, B, C 為主要使用: - A Class: 0 開頭,網域少,主機多,適合大型企業。 - B Class: 10 開頭,適合中型企業。 - C Class: 110 開頭,適合家庭、小型企業。 - D, E 為特殊用途: - D Class: 1110 開頭,群播用途,對另一個網段的所有主機做廣播。 - E Class: 11110 開頭,目前為保留,沒有定義用途。 - 預設 Net Mask - A Class 的 mask 是 255.0.0.0 - B Class 的 mask 是 255.255.0.0 - C Class 的 mask 是 255.255.255.0 - 算 Net ID and Host ID - IP 和 Net mask 加以 AND 運算得到 Net ID - 先將 Net Mask 做一個 NOT 運算,然後再和 IP 做一次 AND 運算可以得到 Host ID - 有 Public IP / Prtvate IP - Public IP: INTERNIC 所統一規劃的 IP,有這種 IP 才可以連上 Internet > INTERNIC: 負責登記網域名稱與網路協定位址,並散播有關網際網路資訊的組織。 - Private IP: - 私有 IP 無法連上 Internet,但可以內部互相連線。 - 如果要將私有 IP 連上 Internet,可以利用 NAT 將 IP 進行轉換(偽裝),如此一來也可以使私有 IP 電腦連上去。 - 其中 A、B、C 三個 Class 當中又各保留一段作為 Private IP 網段,分別是: - Class A:10.0.0.0 - 10.255.255.255 - Class B:172.16.0.0 - 172.31.255.255 - Class C:192.168.0.0 - 192.168.255.255 - 由於這三段 Class 的 IP 是預留使用的,所以不能直接作為連接 Internet 之用,適合一些尚未具有 Public IP 的企業內部用來規劃其網路設定。 ### 子網路 - 公用: 可以將網路切割成不同區塊,方便管理並可以快速定位 (tree),也可以避免浪費沒有用到的 Host_ID 。 - 切割網段 => 先決定想要分配的主機數: - Class C 網路為例: - 網路遮罩: 11111111.11111111.11111111.**00000000** => 255.255.255.0 - 粗體為可變動位置。 - 8 位元: 2**8 - 3 = 253 台主機 - 網路遮罩: 用來計算在哪個網段 (利用 IP 與網路遮罩做 AND 可以得到此 IP 的網段)。 - 若要切割一網路區段為 192.168.3.0 ~ 192.168.3.255 - `Netmask`: 255.255.255.0 => 11111111.11111111.11111111.00000000 - `Network`: 192.168.3.0 => 此段網路第一個 IP,代表此區段網路 - `Broadcast`: 192.168.3.255 => 最後一個 IP,廣播用途 - 若要將以上網段(192.168.3.0/24)再切分成 2 個子網路: - Netmask: 255.255.255.128 => 11111111.11111111.11111111.1**0000000** (遮罩多 1bit) => 主機數少一半 | 子網路 | Network | Broadcast | Netmask | | -------- | -------- | -------- | ------ | | 第一個 | 192.168.3.0 | 192.168.3.127 | 255.255.255.128 | | 第二個 | 192.168.3.128 | 192.168.3.255 | 255.255.255.128 | - 另一表示方法: 192.168.0.0/24 (子網路遮罩前 24bits 為 1) - 請問 192.168.10.100/25 與 192.168.10.200/25 是否在同一個網域內? :::info 不同,根據上面例子來計算 1. 192.168.10.100/25 - IP :11000000.10101000.00001010.01100100 - mask: 11111111.11111111.11111111.10000000 2. 192.168.10.200/25 - IP :11000000.10101000.00001010.11001000 - mask: 11111111.11111111.11111111.10000000 192.168.10.100/25 在 192.168.10.0 的網域內 192.168.10.200/25 在 192.168.10.128 的網域內 ::: - 無類別域間路由 (Classless Inter-Domain Routing,CIDR): - 因為 class A、B、C 的主機數量最少是 class C 的 254 台 (Host_ID 8 bits),在來就是 class B 的 65534 台 (Host_ID 16 bits),一般公司中可能超過 254 台所以需要用到 class B 的 IP位置,但沒有 65534 台那麼多,因此浪費許多空間。 - 所以 CIDR 基於可變子網路遮罩來達到任意分配 Net_ID 與 Host_ID 位元數,來分配最適當的 IP 位置配置,避免浪費 IP 位置,讓 IP 位置枯竭可以緩解。 :::info + Mac address VS IP address |MAC addr | IP addr | | -------- | -------- | | 區網路下區分裝置 | 控制裝置在全球網域下的溝通 | | 12digits, 6 對 16進位<br> EX: CC-3A-2A-E1-51-AA | IPV4: 32bits 4對3位十進位表示<br>192.168.0.121<br>EX: IPV6: 128bits 8 對 4 位<br>EX: fe80::f060:18c6:27de:595d%5| | 不能隨意改變(要跟IEEE申請) | 可任意改變 | | physical address |logical address | | 寫在網卡的 bios 內 | 在傳遞過程中改變 | ![](https://i.imgur.com/oMOjPPL.png=1000x) [出自](https://www.techtarget.com/searchnetworking/answer/What-is-the-difference-between-an-IP-address-and-a-physical-address) ::: :::warning ### LAN vs WAN + LAN(Local Area Network) + ip : 192.168.0.1 or 10.0.1.256 >[NCNU IP 網段分配](https://netcenter.ncnu.edu.tw/nw/doc/ip-new.htm) + WAN(Wide Area Network) + 接外部 IP 地址用 + WAN就是由多個LAN組成的集合 ::: ### ICMP 網際網路控制訊息協定 ![](https://i.imgur.com/PgWrn5P.png) + IP 在發送封包時,我們不知道是否可以抵達目的地,傳送失敗時,也想要知道發生什麼錯誤。IP 封包本身並不會回報封包傳送的狀況,因此需要一個回報狀態的機制 => ICMP - `Type`: ICMP的類型。 - `Code`: 進一步劃分ICMP的類型,該欄位用來尋找產生錯誤的原因。 - Ex: Type3 目標不可到達又分成好幾種類型。 - ![](https://i.imgur.com/oDW9rNs.png) + EX: ping 是用ICMP的"Echo request"和"Echo reply" 來回應原發送 ping 的主機 + EX: traceroute -> TTL 在傳輸中過期回報不可到達(Type 11)。 ### ARP/RARP ![](https://i.imgur.com/kYHkqMC.png) - ARP : Address Resolution Protocol - RARP : Reverse Address Resolution Protocol - 傳遞資料時透過 IP 知道 MAC Address 1. 向整個區網發出 ARP 封包 2. 對方回傳 MAC Address 3. 開始傳資料 4. 將該筆 IP/MAC 寫入 ARP Table 中(保持 20 分鐘) :::info ### 查看 ARP table - `arp` 指令: - `-n` 主機名稱以 IP 型態顯示 - `-d` 將某筆 IP 從 ARP Table 刪除 - `-s` 將某筆 IP/MAC 寫入 ARP Table 中 - ![](https://i.imgur.com/Js2DM9T.png) ::: ## Transport layer ![](https://i.imgur.com/hWJW8TY.png) + 傳送單位為segment,datagram,packet 取決於protocal ### UDP ![](https://i.imgur.com/YvVP0OB.png) + UDP是不可靠的 + 沒有像TCP一樣的握手建立連線流程,socket創建後就直接將封包發往指定IP地址上的指定端口號應用程式 + UDP不需要ACK響應來確認對方是否收到消息,這有可能造成封包的亂序到達以及丟失問題。缺乏壅塞控制 + UDP可以依照想要的速率發送封包(不過真實的封包傳輸速率還是要看網路核心中的帶寬限制) ### Port (通訊埠口) + 接收方與傳送方皆需要 port (連線通道)來傳遞資料。 + 舉例: IP 為門牌號碼, port 為哪個窗口(每個窗口執行不同業務)。 + https: 443, www: 80 + 為 TCP Header 的 Source Port 與 Destination 。 :::info 常見port 服務 |port 號| 服務| |---|---| 20 |FTP-data,檔案傳輸協定所使用的主動資料傳輸埠口 21 |FTP,檔案傳輸協定的命令通道 22 |SSH,較為安全的遠端連線伺服器 23 |Telnet,早期的遠端連線伺服器軟體 25 |SMTP,簡單郵件傳遞協定,用在作為 mail server 的埠口 53 |DNS,用在作為名稱解析的領域名稱伺服器 80 |WWW,全球資訊網伺服器 110 |POP3,郵件收信協定 443 |https,有安全加密機制的 WWW 伺服器| ### 查詢port servcie 的方式: /etc/services ::: ### TCP - ![](https://i.imgur.com/WDBhKmU.png) - `Sequence Number`: 若 TCP 資料過大,需切割放進不同封包,紀錄封包序號,以便重組 TCP 資料。 - `Acknowledgement Number`: 若接收端有收到會用這個確認碼告知 client 端封包被正確收下了。 - Control bit + SYN: 1 為希望與對方線進行同步處理(建立連線) + ACK: 1 為回應封包 + FIN: 1 為通知對方結束連線(等對方確認)。 + - `Window`: 控制封包流量,Window=0 代表緩衝區滿了,應停止傳送。 + 為什麼TCP十分可靠 -> 三向交握 + ![](https://i.imgur.com/RGRkXLQ.png) 1. 發送方發一個帶有 SYN=1 的封包,並發送一個 sequence number = 10001 給收方 2. 收方確認後回覆: 1. ACK=1 與 ack=10001 (剛剛接收到的 sequence) +1 2. SYN=1 與 sequence=20001 (收方也要回傳要求連線) 3. 發送方回傳: 1. ACK=1 與 sequence=20001+1 4. 確定連線,開始傳送資料。 :::info ## Sequence number & ack **為什麼要 sequence**? + 讓對方回應時可以針對這個 sequence 發送對應 ack ,確認封包是否已被接收和確認對方收到多少。 ![](https://i.imgur.com/AVpI83C.png) + 669+1 + 670+1460 ::: :::info ||TCP| UDP| |--|--|--| |可靠性| 可靠| 不可靠| |封包確認|ACK|--| |速度| 慢| 快| |傳輸方式| 封包按順序傳輸| 封包以串流方式傳輸| |錯誤檢查與修正| 有| 無| |逾時處理|逾時重傳、高速重傳(指定封包)|逾時重傳(全部封包)| |壅塞控制| 有| 無| |適用服務| 要求可靠傳輸的服務,ex : SSH 、文字聊天、電子郵件、檔案傳輸... |即時服務,ex : 串流媒體、網路電話| ::: ## Application layer + 傳送單位為message ![](https://i.imgur.com/Zq32GZa.png) ![](https://i.imgur.com/mfvqesY.png) ### HTTP 1. DNS 解析 2. 建立 TCP/IP 連線 > 包括尋找IP/MAC addr 和 TCP 三向交握 4. 送出 Get / Post + Get:瀏覽器將 headers 與 data 同時送出,因此只會產生 1 個 TCP 封包,最後伺服器端回應 200 與資料。 + Post:瀏覽器先將 headrs 送出,等到伺服器端回應 100 continue 後再傳送 data,因此會產生 2 個 TCP 封包,最後伺服器端回應 200 與資料。 ![](https://i.imgur.com/XIiaQ95.png) :::info ### 狀態碼 + 1XX:參考資訊,例如:POST headers 後得到 100(繼續)、101(切換通訊協定)。 + 2XX:成功,例如:200 客戶端要求成功。 + 3XX:重新導向,例如:301 永久導向、302 暫時導向、304 未修改。 + 4XX:用戶端錯誤,例如:401 拒絕存取、403 禁止使用、404 找不到。 + 5XX:伺服器錯誤,例如:500 伺服器錯誤。 ::: ### FTP ![](https://i.imgur.com/i4TyTJX.png) + FTP 主要是應用於檔案傳輸使用,將共享檔案存放於 FTP 伺服器,讓一般使用者可以透過網路來下載或上傳。它的重點是在異質性電腦之間、以及遠距離的檔案共享使用 ![](https://i.imgur.com/HLiWvHd.png) 1. FTP 檔案傳輸系統採用主從式模式,FTP 伺服端隨時監視埠口 21(tcp/21)是否有連線要求。FTP 客戶端需要連線時,便由著名埠口 21 連結到 FTP 伺服器。 2. 伺服端同意連線後(驗證使用者名稱及密碼),便建立並保持著控制連線,以便隨時交換訊息,當需要傳輸檔案時,再建立資料連線,傳輸後立即釋放該資料連線,一般伺服端的資料連線都建立在埠口 20(20/tcp)。 4. 雙方透過資料連線來存取各自檔案系統(File System)中的檔案 ### DNS ![](https://i.imgur.com/1cP3OFF.png) + DNS 是使用 TCP or UDP ? + UDP 協議:DNS 查詢的資料包較小、機制簡單;UDP 協定的額外開銷小、有著更好的性能表現; + TCP 協議:DNS 查詢由於 DNSSEC 和 IPv6 的引入迅速膨脹,導致 DNS 回應經常超過 MTU (傳輸單元最大值)造成資料的分片和丟失,我們需要依靠更加可靠的 TCP 協定完成資料的傳輸 > 隨著 DNS 查詢中包含的資料不斷增加,TCP 協定頭以及三次握手帶來的額外開銷比例逐漸降低,不再是佔據總傳輸資料大小的主要部分 > DNSSEC: 藉由在 DNS 資訊中附加電子簽名 (DS) 為網域多加一層安全防護 + 一般情況皆使用 UDP , 因為在查找網址時較講求速度,就算掉包了再重送就好了。 > 注意! DNS 可能會同時使用 TCP 與 UDP 兩種協定: + UDP 封包大小較小,資料大小超過 512 位元組的限制時會被截斷,如果使用者沒有從 DNS 得到回應,3~5 秒後會使用 TCP 重送。 > 當 DNS 查詢被截斷時,應該使用 TCP 協議進行重試 + DNS 區域轉送 (Zone Transfer), DNS 要確保資料庫(主 DNS 與副 DNS)資料相同,當有變動時,會用區域轉送來保持資料一致,此時會用 TCP 傳送。 ### Anycast #### AS ![](https://i.imgur.com/9LPavkN.png) [圖自](https://www.cloudflare.com/zh-cn/learning/network-layer/what-is-an-autonomous-system/) + Internet 是由不同網絡組成的網路,自治系統是組成 Internet 的大型網絡。更具體地說,自治系統(AS)是具有統一路由方式的巨型網絡或網絡群組。連接到 Internet 的每台計算機或設備都連接到一個 AS。 #### BGP + AS 通過BGP通知其到其他 AS 和路由器的路由策略。 BGP 是在 AS 之間路由數據包的協議。如果沒有這些路由信息,大規模運行將很快變得不切實際:數據包將丟失或花費太長時間才能到達目的地。 + 每個 AS 使用 BGP 通知它們負責的 IP 地址以及它們連接的其他 AS。 BGP 路由器從世界各地的 AS 中獲取所有這些信息,並將其放入稱為路由表的數據庫中,以確定從 AS 到 AS 的最快路徑。當數據包到達時,BGP 路由器會參考其路由表來確定數據包接下來應轉到哪個 AS。 + 全世界有許多 AS,BGP 路由器不斷更新其路由表。網路失去連線時,新網路增加時時,AS 擴展或收縮其 IP 地址空間,所有這些信息都必須通過 BGP 通知,以便 BGP 路由器可以調整其路由表。 #### Anycast ![](https://i.imgur.com/WkcZF1p.png) + 是一種網路定址和路由的策略,使得資料可以根據路由拓撲來決定送到「最近」或「最好」的目的地。 ## TCP/IP 統整 | 層級 | 資料型態 | 負責事項 | 常見協定 | 傳送依據 | | -------- | -------- | -------- | -------|---| | Application | message | 定義應用程式如何提供服務。 | HTTP, FTP, DNS, SMTP, SSH | | Transport | segment | 負責傳輸過程的流量控制、錯誤處理、資料重送等工作。 | TCP, UDP, RTP, SCTP |port | Network | packet | 決定資料如何傳送到目的地。 | IP, ICMP |IP Address | Data Link | frame | 負責網路對硬體的溝通。 | Ethernet, Wi-Fi | MAC Address #### HTTP/1 瓶頸 + Single Request + HTTP 需要等到ACK才能做第二次reguest + Exclusive Client-initiated Requests + 在 HTTP 的協定中,只有 Client 才能發出 Request,因此就算 Server 預先知道 Client 需要某項資源,它也必須等到 Client 主動發出請求,才能把資源丟過去 + Uncompressed Request and Response Headers + header 的大小從約 200 bytes 到大於 2 KB,且很多重複的訊息 ### HTTP/2 SPDY **SP**ee**DY** + 改善網頁的 Page Load Time + 可以不需等待response 就發出下一個request ![](https://i.imgur.com/qhZ6unJ.png) [圖自](http://fengwc.cn/article/http2-faster-web/) + Compressed Headers + 將 Client 和 Server 之間的訊息拆成 Control Frame 和 Data Frame + Server Push Streams + Server 可以主動將 Client 需要的資源 push 到瀏覽器的快取中,不需要透過 Client Requet 觸發 Stream + Client 第一次存取某個網頁時,Server 就會自動 push 一些 Client 需要的資源到快取中,下一次瀏覽相同網頁時就能減少載入頁面的時間 + Always Over TLS ### HTTP/3 QUIC **Q**uick **U**DP **I**nternet **C**onnection ![](https://i.imgur.com/d5CFgVk.png)\ [圖自](https://medium.com/@chester.yw.chu/http-3-%E5%82%B3%E8%BC%B8%E5%8D%94%E8%AD%B0-quic-%E7%B0%A1%E4%BB%8B-5f8806d6c8cd) 1. 封包丟失機率較高 2. 較長 Round Trip Time (RTT) 3. Connection Migration :::info ### Connection Migration + TCP連線所需條件 + source port + destination port + source ip + destination ip + 更換IP 就需要重新連線!!! > WIFI連線轉移到4G網路連線 + QUIC + 64 bits 的獨立 Connection ID ::: ![](https://i.imgur.com/1VLJUvT.png) [圖自](https://medium.com/@chester.yw.chu/http-3-%E5%82%B3%E8%BC%B8%E5%8D%94%E8%AD%B0-quic-%E7%B0%A1%E4%BB%8B-5f8806d6c8cd) + 初始交握 (Initial Handshake) + 客戶端會傳送一個哈囉訊息 (CHLO, Client Hello) 到服務端,觸發服務端回傳一個代表交握未建立或是公鑰已經過期的拒絕訊息:REJ 封包 :::info + REJ 封包 + Server Config:包含服務端的長期DH公鑰 (Diffie-Hellman Public Key) + Certificate Chain:用來對服務端進行認證的憑證串鏈 + Signature of the Server Config:經過數位簽章過的 Server Config,讓客戶端可以驗證這些資訊確實是由服務端發出。 + Source-Address Token:經過認證加密過後的客戶端IP資訊 ::: + 驗證Server Config 確定無誤後,回傳 Complete CHLO其中包含request 資料一并用初始密鑰加密後回傳給服務端。 + 都沒問題後服務端傳送 SHLO (Server Hello) 的封包,封包中包含了服務端新產生的短期DH公鑰 。 > 每一次建立連線都會產生新的短期DH公鑰和密鑰。接下來要進行的,就是更換初始密鑰。 #### 封包遺失恢復 (Loss Recovery) + TCP + 在發送端為每一個封包標記一個編號 (sequence number),接收端在收到封包時,就會回傳一個帶有對應編號的 ACK 封包給發送端 + 當發送端在超過一定時間 (Retransmiting Timeout, RTO) 之後還沒有收到回傳的 ACK,就會認為封包已經丟失,啟動重新傳送的機制 + 因為重傳使用同一個sequence number,是接收端在收到初始封包後回傳的ACK (較長RTT),還是接收端在收到重傳封包後回傳的ACK (較短RTT) + QUIC + 初始與重傳的每一個封包都改用一個新的編號,unique packet number ## OSI ![](https://i.imgur.com/7t0lfUC.png) || Layer | 設備種類 | 負責功能 | 協定 | |-| --- | ---- |---| --- | |7| Application |WAF (Web application firewall)| 定義介面給應用程式 | HTTP FTP SMTP | |6| Presentation |WAF | 轉成網路的標準格式 加解密 加解壓縮 |SSH Telnet| |5| Session | WAF | 開啟和關閉兩個裝置之間的通訊 | | |4| Transport |firewall |流量控制 錯誤控制 資料完整偵測 | TCP UDP | |3| Network |router |為資料尋找抵達目的地的最佳實體路徑 | IP ICMP| |2| Data-Link | switch | 位於相同網路的兩個裝置之間的資料傳輸 |有線-802.3 無線-802.11| |1| Physical | hub repeater |資料傳輸的實體設備|| ![](https://i.imgur.com/GUnWOCy.png) REF: [粗淺了解 TCP/ IP](https://miahsuwork.medium.com/%E7%AC%AC%E5%85%AD%E9%80%B1-%E7%B6%B2%E8%B7%AF%E5%9F%BA%E7%A4%8E-tcp-ip-f89cc09f1f36) [在瀏覽器輸入網址並送出後,到底發生了什麼事?](https://www.cythilya.tw/2018/11/26/what-happens-when-you-type-an-url-in-the-browser-and-press-enter/) [淺談Ethernet](https://www.graniteriverlabs.com/zh-tw/technical-blog/ethernet-lan-test) [HTTP2](https://sls.weco.net/CollectiveNote20/SPDY)