三次握手,四次揮手及黏包

2021-08-13 08:13:49 字數 1750 閱讀 9193

一、三次握手

配置自己的ip:

1.關閉windows防火牆,虛擬機器->設定->網路介面卡->橋接模式  (前面兩個方框都打成對號)

2.管理員身份:

iptables –f     關閉防火牆

setenforce 0   設定安全選項

3. vi   /etc/sysconfig/network-scripts/ifcfg-eth0

ootproto=static   onboot=yes  

ipaddr = 192.168.0.23  

netmask = 255.255.255.0

4.service network restart

5.ping 測試是否連通

雙方約定好速度傳送

面試:黏包   **:

現在假設客戶端向服務端連續傳送了兩個資料報,用packet1和packet2來表示,那麼服務端收到的資料可以分為三種,現列舉如下:

第一種情況,接收端正常收到兩個資料報,即沒有發生拆包和粘包的現象,此種情況不在本文的討論範圍內。

第二種情況,接收端只收到乙個資料報,由於tcp是不會出現丟包的,所以這乙個資料報中包含了傳送端傳送的兩個資料報的資訊,這種現象即為粘包。這種情況由於接收端不知道這兩個資料報的界限,所以對於接收端來說很難處理。

第三種情況,這種情況有兩種表現形式,如下圖。接收端收到了兩個資料報,但是這兩個資料報要麼是不完整的,要麼就是多出來一塊,這種情況即發生了拆包和粘包。這兩種情況如果不加特殊處理,對於接收端同樣是不好處理的。

發生tcp粘包或拆包有很多原因,現列出常見的幾點,可能不全面,歡迎補充,

1、要傳送的資料大於tcp傳送緩衝區剩餘空間大小,將會發生拆包。

2、待傳送資料大於mss(最大報文長度),tcp在傳輸前將進行拆包。

3、要傳送的資料小於tcp傳送緩衝區的大小,tcp將多次寫入緩衝區的資料一次傳送出去,將會發生粘包。

4、接收資料端的應用層沒有及時讀取接收緩衝區中的資料,將發生粘包。

等等。通過以上分析,我們清楚了粘包或拆包發生的原因,那麼如何解決這個問題呢?解決問題的關鍵在於如何給每個資料報新增邊界資訊,常用的方法有如下幾個:

1、傳送端給每個資料報新增包首部,首部中應該至少包含資料報的長度,這樣接收端在接收到資料後,通過讀取包首部的長度字段,便知道每乙個資料報的實際長度了。

2、傳送端將每個資料報封裝為固定長度(不夠的可以通過補0填充),這樣接收端每次從接收緩衝區中讀取固定長度的資料就自然而然的把每個資料報拆分開來。

3、可以在資料報之間設定邊界,如新增特殊符號,這樣,接收端通過這個邊界就可以將不同的資料報拆分開。

等等。 6.命令  tcpdump  抓包    netstart

三次握手 四次揮手

1.tcp連線的建立 1 首先是伺服器初始化的過程,從 closed 關閉 狀態開始通過順序呼叫 socket bind listen 和accept 原語建立 socket 套接字,進入 listen 監聽 狀態,等待客戶端的 tcp傳輸連線請求。2 客戶端最開始也是從 closed 狀態開始呼叫...

三次握手,四次揮手

三次握手 three times handshake three way handshake 所謂的 三次握手 即對每次傳送的 資料量是怎樣跟蹤進行協商使 資料段的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。為了提供可靠的傳送,tcp在傳送...

三次握手 四次揮手

在tcp ip 協議中,tcp 協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖1所示。1 第一次握手 建立連線時,客戶端a 傳送syn 包 syn j 到伺服器b 並進入syn send 狀態,等待伺服器b 確認。2 第二次握手 伺服器b 收到syn 包,必須確認客戶a 的syn ack j...