-
>.< 場景導入
(一):
你跟你的小女朋友打電話,若一直是你的女朋友在說,而你只是在聽。那麼你女朋友會生氣! 爲啥呢? 因爲她感覺你沒有聽她說話,然後覺得你不愛她了。 哈哈 ,通俗一點說就是 打電話時你得 “嗯 , 啊 , 我覺得是這樣…”等,必須 有問有答 才能愉快的聊天。
(二):
中間有一條河,需要將一邊的貨物扔向另一邊,這時可不能隨意,因爲貨物有多少,扔過去多少,對方接到了多少…雙方都必須要拿一個本子記錄下來。(類比於 tcp 的作用) -
?.? TCP報文架構圖
-
>.< 報文及抓包分析
1.port(端口): 不知你有沒有看到圖中 src port 和 Dst port ,一個是你本機的端口,另一個是 web 站點監聽的 port 。(端口號類比於兩棟大樓的單間號,要想大樓之間通信,必須知道對方的房間號才能準確發送)
ps: 本機(src)端口查看命令 :打開cmd (快捷鍵 win + r 輸入 cmd)
2.序號與確認序號(Ack / Seq):但你訪問某東時,瀏覽器會將整個頁面通過網絡傳輸到你的電腦上,包括你先在看的這篇文章也是如此。 但數據量太大,一次性不可能全部發完。因此,數據得分段,分包。將部分數據放入網卡緩存中,依次發送。
tcp可是一個很靠譜的男人,不存在開完車就不負責任的。即每發完一段數據,都得等對方的 ACK ,才能繼續發送剩下得數據。如圖所示:
從緩存中發送 [ 1 2 3 ],此時得 Seq(序列號) = 1 , 序列號通俗一點就是一個數據段得第一個字節。) 想想你女朋友跟你說完一句話, 你必須迴應才能代表你在聽她說話。 這個過程也是如此,當收到 [ 1 2 3 ] 後,必須用 確認號 迴應,表示收到你所發的數據,可以繼續發送。此時得 ACK( 確認號)=4.
或者還不理解,你就這樣想: (發送方:)序號是發送數據段得第一個字節,在進行段組裝成包時用於定位作用。 (接收方:)確認號是收到數據段末尾一個字節自增(+1)。【讓發送者下次應該發哪段數據】3.數據偏移:
在 Tcp 報文中,用於區分TCP首部和 TCP 數據部分。
4.保留:
字面意思,也就是這部分是一片真理得大海,等着你來挖掘。
5.字母部分:
先了解每一列字母組合起來得作用:
狀態位 作用 URG 提高數據包優先級(優先級高則先發) ACK 數據應答 PSH 接收端讓優先級高的包先插隊進行處理 RST 重新連接(網絡異常) SYN 發起連接(訪問某東時,或別的web站點) FIN 結束連接 5.窗口:
TCP 的窗口分爲: 接收窗口,發送窗口,擁塞窗口等。你只需要知道窗口用於流量控制,擁塞控制。
如果你對TCP如何實現流量控制感興趣(可以點擊下面的鏈接):
---------------------兩個控制傳送門 >.< ----------------------------------6.校驗和:
顧名思義,用於數據校對用。通俗點說,就是看看有啥數據傳錯了沒。7.緊急指針:
和 URG 狀態位配合使用。 發送一個非常着急的數據包時,要想快速發出,必須插隊排在緩存出口處,也必須標記(緊急指針的作用)這個數據段在整個包內的位置。不然接收方收到,無法拼接成完成的數據包。8.可變部分:
選項,和填充部分一般很少用到,這裏就不在贅述。
----------------------------------》.《---------------------------------------------------------
=.= 總結:
順序問題,穩重不亂。
丟包問題,承諾靠譜。
連接維護,有始有終。
流量控制,把握分寸。
擁塞控制,激流勇進。
-.- 課後連接傳送門 :
ICMP/IP 協議,網絡世界的偵察兵