###### tags: `network` `hw` `thu` # Wireshark Part. 2 - 三方交握 ## 1. 生出Web Server ```bash! docker run --rm -p 8000:80 --name web-test nginx:latest ``` ![](https://hackmd.io/_uploads/BkEvRmILh.png) ## 2. 打開Wireshark, 並選擇loopback device以監聽localhost上的流量。 ![](https://hackmd.io/_uploads/HyZL-ELL2.png) ## 3. 用瀏覽器打開: "http://localhost:8000/" ![](https://hackmd.io/_uploads/HJtiCmILn.png) ## 4. 在Wireshark裡查看結果: ![](https://hackmd.io/_uploads/ByKGlEUU2.png) ### a. [SYN] : client -> server - 在這個階段,Client正在跟Server同步Sequence number(這時會先設為0)。 - 這時最大可接受的Window size等後續建立連線會用的訊息也會被一同傳送。 ```! [SYN] Seq=0 Win=65476 Len=0 MSS=65476 SACK_PERM TSval=2367788683 TSecr=0 WS=128 ``` ![](https://hackmd.io/_uploads/HJyygVILn.png) ### b. [SYN, ACK] : server -> client - 在收到Client端的請求後,會發出同為同步跟ACK功用的一個封包。 - 這個封包裡也包含了最大可接受Window Size等連線訊息等。 - 注意,Sequence number在這時還是在0。 ```! [SYN, ACK] Seq=0 Ack=1 Win=65464 Len=0 MSS=65476 SACK_PERM TSval=2367788683 TSecr=2367788683 WS=128 ``` ![](https://hackmd.io/_uploads/H1cyWVU8h.png) ### c. [ACK] : client -> server - 在接到Server的確認之後,Client在ACK的同時,就會送出連線使用的Window Size大小。 - 注意,Sequence number在這時就已經跳到1了。 ```! [ACK] Seq=1 Ack=1 Win=65536 Len=0 TSval=2367788683 TSecr=2367788683 ``` ![](https://hackmd.io/_uploads/rygogNULn.png)