TCP粘包
1. TCP在接收數據時,多包數據粘在了一起
2. 原因:
? ? 1. TCP發送數據時,沒有及時發走,會根據緩沖區數據的情況進行重新組包;
? ? 2. TCP接收方,沒有及時讀走緩沖區數據,導致緩沖區大量數據緩存。
3. 如何解決TCP粘包:
? ? 1. ?發指定大小字節(結構體)
? ? ? ? ?struct ?data
? ? ? ? {
? ? ? ? ? ? ?int id;
? ? ? ? ? ? ?float tmp;
? ? ? ? ? ? ?xxx;
? ? ? ? };
? ? ? ?指定在相同平臺上使用,注意結構體對其齊問題。
? ??
? ? ?2. 發送具有指定分隔符的數據
? ? ? ? ?"hello world\n"
? ? ? ? ?"how are you\n"
? ? ?3. 封裝自定義數據幀
? ? ? ? ??
? ? ? ? ??
? ? ? ? ?AA 0d 01 ?00 00 00 14 00 00 00 15 ?xx xx xx xx sum BB
? ? ? ? ?
網絡抓包
網絡抓包:抓取通過設備網卡的數據
wireshark:網絡抓包工具:
1. 分析和追蹤網絡問題
2. 查看網絡協議棧
安裝:sudo apt-get install wireshark
1. sudo wireshark
2. 選擇通信設備的網卡---》any
3. 選擇抓取的過濾條件
4. 開始抓取
5. 進行一次通信
TCP報文頭
標志位:
?? ?
?? ?1. URG: 緊急指針標志, 為1時表示緊急指針有效, 該報文應該優先傳送。
?? ?2. ACK: 確認應答標志
?? ?3. PSH: ?表示發送數據,提示接收端從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間
?? ?4. RST: 重置連接標志
?? ?5. SYN: 表示請求建立一個連接
?? ?6. FIN: finish標志, 表示釋放連接
TCP機制
? ? ?1. 應答機制:為每個數據增加序列發,發送數據時,第一個數據的序號作為報文中的序號。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?接收方收到相關數據,會回應ACK報文,報文中的確認號是接收方下次希望接收到的數據的
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?起始序號。
? ? ?2. 超時重傳機制:TCP發送數據后會在一定的時間內等待ACK,假設在指定時間ACK未收到,則視這包數據已經
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 丟失,會重新傳輸這包數據。
? ? ?3. 流量控制機制:根據接收方接收數據的能力,調整窗口大小,通知發送發進行流量控制