從 Wireshark、Fiddler 深入了解網路請求 === - [講義](https://quip.com/exlbAHYLKdTb) - [PPT](https://cacoo.com/diagrams/FvctrUl4Zw2EWvvc/253F6?reload_rt=1625575734574_0&recover=t) OSI 與 TCP/IP --- - [OSI](https://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B) :1984年,ISO 發布了著名的 ISO/IEC 7498 標準,它定義了網路互聯的 7 層框架,也就是開放式系統互聯參考模型。 - [TCP/IP](https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F) :被視為 OSI 七層協定的簡化版,1990 年開始蓬勃發展(www/mail)。 ![](https://i.imgur.com/X14Dxod.png) > 題目:HTTP 、FTP、SMTP 在 TCP/IP 是屬於哪一層?應用層。 Wireshark 查看IP網路封包 --- ![](https://i.imgur.com/Woqntdn.png) ### Wireshark 常見指令 - 尋找來源 IP:ip.src== `xxx.xxx.xxx.xxx` - 或 ( or ):ip.src== xx.xx.xx.xx or ip.dst == xx.xx.xx.xx - port: tcp.port == 80 - 網路請求:http.request.method=="POST" > [Wireshark 指令表](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/895acf23-d2d9-4bf4-bd77-6a3208f0aae5/wireshark_.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20211025%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20211025T090608Z&X-Amz-Expires=86400&X-Amz-Signature=6b8e86a271f7915a906bbdac236a1c13cc327372d0f8d440092d727e10a3cbd1&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22wireshark%2520%25E6%258C%2587%25E4%25BB%25A4%25E8%25A1%25A8.pdf%22) ### 使用說明 1. 多張網路卡,選定使用哪張網路卡查看 IP 封包 ![](https://i.imgur.com/FM8GCwp.png) 2. 將要查詢的 IP 輸入進搜索欄位 ![](https://i.imgur.com/bZIdqoX.png) > src 來源|dst 目的地 > ip.src = = 104.24.162.193 or ip.dst = = 104.24.162.193 > > 假若找不到 IP,可以微調下號碼,因為 IP 浮動會一直跑。 * 不知道 IP 的情況,去 ping 你要查詢的網址 ![](https://i.imgur.com/TICDZtO.png) ### 特定封包詳細資訊 不是所有封包都有這些資料,將視該封包性質而定。 ![](https://i.imgur.com/R3uknqC.png) ![](https://i.imgur.com/2oUoJuA.png) * **Frame** 12772: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface 0 實體層:網路口、光纖。 * **Ethernet II**, **Src**: ZyxelCom_cb:60@:2b (1¢:74:@d:cb:60:2b), **Dst**: Apple_ed:32:db (1c:36:bb:ed:32:db) 乙太網路、網路卡卡號、MAC 訊框。 ![](https://i.imgur.com/F1pW8Rw.png) * **Internet Protocol Version** 4, **Src**: 104.27.166.176, **Dst**: 10.0.0.35 哪個 IP,傳送到哪個 IP。 IPV4、IPV6 (紀錄方式不同,目前 ipv4 為主流,但 IPV4 號碼越來越少,最後可能改用 Ipv6)。 * **Transmission Control Protocol**, **Src Port**: 8@, **Dst Port**: 59411, Seq: 3211, Ack: 415, Len: 5 TCP,傳送至哪個 port。 ![](https://i.imgur.com/WxU8Mo0.png) * [ 5 **Reassembled TCP Segments** (3215 bytes) ] 封包。此有 5 個封包。 * **Hypertext Transfer Protocol** 應用層:收到網路上的資訊。 * **Line-based text data:text/html** 合併為將顯示的HTML網頁 TCP 封包 --- ![](https://i.imgur.com/yVzXqfS.png) - 每個 TCP 封包可夾帶 40~1500 Bytes Data 資料 ( 1024 Bytes,約等於 1 k ) ![](https://i.imgur.com/i2Znkmn.png) - 每個封包內夾帶的資訊,是十六進制的共通格式 ![](https://i.imgur.com/tap5P3n.png) ### 假若掉封包 - 網頁畫面不齊全,可能是掉封包,這時會傳送404、500(或其他錯誤碼),這些由後端客製。 - TCP 其中一個封包弄丟,瀏覽器會再次傳輸,確定都傳輸到才會揮手結束。 > 封包只能傳送 1500 bytes,一張 15k 的圖片要透過幾個封包來傳送?10 個。 HTTPS 與 HTTP 的差異 --- HTTPS 是在傳輸層與應用層之間建立加密機制,讓駭客無法獲得明碼內容。 * HTTP 是 80 port、HTTPS 是 443 port。 * HTTP 是 應用層、HTTPS 是傳輸層。 ![](https://i.imgur.com/kYsNWwi.png) ### 在 Wireshark 看 HTTP 與 HTTPS #### HTTP ![](https://i.imgur.com/ZaW0IeK.png) #### HTTPS ![](https://i.imgur.com/ULcneXE.png) 應用層與傳輸層間有 SSL 加密,傳輸的 POST 被加密直到應用層才被解密(在應用層解密才會看到網頁內容),因此傳輸的資訊不會被看到(封包被加密,無法從封包看到資訊)。 > 如何為網頁加上 SSL 呢?購買 SSL 憑證,有免費([cloudflare](https://www.cloudflare.com/zh-tw/))也有付費,付費的較難被破解。 當發出一個 GET/POST 請求時,中間過程會經過哪些傳輸協定 --- ![](https://i.imgur.com/KuxuTJ9.png) 發出 get 後,經過三向交握,建立雙向溝通向對方要資料。透過 TCP 傳輸封包,傳輸完畢傳輸 200 ok,才會在瀏覽器顯示該筆資料。經過四次揮手結束。 假如中途需要圖片或是 css 等資料,再發出 HTTP 請求,伺服器接收再用 TCP 傳輸封包,下載完畢傳 200 ok。經過四次揮手結束。 ![](https://i.imgur.com/zzC60TA.png) ![](https://i.imgur.com/CfpMvNX.png) - HTTP 傳送需要綁表頭 - 發出網頁請求,是在 HTTP 應用層 - 網頁傳輸使用 TCP - cookie 是在 HTTP 應用層 UDP 與 TCP --- TCP 與 UDP 各有優缺,端看情境來使用。 - UDP - 不需要三向握手與四次揮手,直接傳送,容易掉封包。 - 不嚴謹、速度快,適合重視即時傳輸,掉封包也沒關係,比如直播。 ![](https://i.imgur.com/fb9xsfR.png) - TCP - 需要經過三次握手建立雙方溝通後,才會開始彼此傳遞資料。 - 嚴謹,速度慢。 ![](https://i.imgur.com/uQDgNNU.png) 發送網路請求管道 --- - JS AJAX - POSTMAN - cURL - 各種後端語言 - IOS/Android - Desktop App ![](https://i.imgur.com/cQFrnnk.png) 常見問答 --- 1. 一部 100 MB 影片是否能只用一個封包來進行傳送? X,一個封包最多只能傳輸 1500 bytes。 2. 如果一個網頁有 10 張圖片,是否要執行十次 TCP 三項交握來獲得? X,此是詢問伺服器是否在,只需詢問一次。 3. 在 post API 時,可以安心在 http 網站使用,不會被人看到資料或竄改封包 X,http是明碼傳輸,較不安全。 4. 如果講求傳輸速度,就算資料掉一些也不打緊的話,該用 TCP 還是 UDP 傳輸? UDP,不會進行三向交握,會一直傳資料。速度快、不嚴謹。 5. 只能寫 JavaScript AJAX 來撈 API 資料,無法透過其他方式來發送請求 X 6. 後端語言只能開啟 web 伺服器與接資料庫,無法針對 TCP/IP、UDP 來設計服務? X,可以利用 TCP/UDP 對接資料。 7. 如果要看 HTTP 協定傳送, Fiddler、wireshark 都可以? O 8. wireshark 每個封包都一定會有以下內容嗎? X,每個封包都是獨一無二,依它的特質塞不同資料。 1. Frame、 2. Ethernet II、 3. Internet Protocol Version 4、 4. Transmission Control Protocol、 5. Hypertext Transfer Protocol 其餘補充 --- - w3c 規劃哪些 HTML、CSS、JS 該被發明。再由各家瀏覽器改版增加該功能,但不是每家瀏覽器都會跟進,因此語法不一定每家瀏覽器都支援。 - 後端語言不只是拿來開 web 伺服器,比如 node 可以不開 web 伺服器,單純開 TCP 協定進行資料傳輸或接收資料。 開發的過程中,不僅能透過前端 JavaScript 對瀏覽器設定 Cookie,伺服器也可傳送 cookie 到 client 端。 POST 不僅可以發送資料,也可以取得資源。 - [跨來源資源共用(CORS)](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/CORS)發出三向交握,後端必須在此加上CORS的程式碼。 ![](https://i.imgur.com/fhj4sqn.png)