TCP三次握手,TCP/IP數據包大小

名詞解釋

SYN:同步序列編號(Synchronize Sequence Numbers)是TCP連接的第一個包,在客戶機和服務器之間建立正常的TCP網絡連接時,客戶機首先發出一個SYN消息,服務器使用SYN+ACK應答表示接收到了這個消息,最後客戶機再以ACK消息響應

ACK: (Acknowledge character)即是確認字符,在數據通信中,接收站發給發送站的一種傳輸類控制字符。表示發來的數據已確認接收無誤。

SEQ是數據包序號
SEQ是數據包本身的序列號;ACK是期望對方繼續發送的那個數據包的序列號。

1、三次握手

TCP是一個連接協議,就像打電話一樣,需要撥號,打通了之後才能傳信息。
首先,客戶端向服務端發起了一個報文,SYN=1,ACK=0,SEQ=x(x是一個初始數據包序號)。

SYN=1, ACK=0, SEQ=200

然後,服務端收到連接請求報文,向 服務端 發送連接確認報文,SYN=1,ACK=1,確認號爲 x+1,同時 也選擇一個初始的序號 y。 如
SYN=1, ACK=201,SEQ=4800
(接收端的確認信息,且接收端的初始數據包。序號爲4800。)

最後,客戶端要確認收到了服務端的確認信號,向服務器發送確認包ACK(ack=k+1)
確認號爲 y+1,序號爲 x+1
SYN=1, ACK=4801,SEQ=201

重複過程
在這裏插入圖片描述
總之就是不斷用ack去返回對方seq的確認信息,打個比方就是兩個人打電話,不斷地回覆(你剛纔說的是第 seq 句)

四次握手

在這裏插入圖片描述
終止連接的時候因爲服務端可能要等待讀寫完成,需要暫時進入close-wait狀態(至於正常連接中應該是因爲有滑動窗口緩存,所以不用等)。 所以需要多一次揮手。
所以被稱爲四次揮手。

滑動窗口

在這裏插入圖片描述
接收方接收數據一般是有緩存的,而不是接一個處理完了再讓發送方再發下一個,只有在滑動窗口裏的數據才能發送。滑動窗口本質上是描述接受方的TCP數據報緩衝區大小的數據,發送方根據這個數據來計算自己最多能發送多長的數據。如果發送方收到接受方的窗口大小爲0的TCP數據報,那麼發送方將停止發送數據,等到接受方發送窗口大小不爲0的數據報的到來。

窗口合攏:當窗口從左邊向右邊靠近的時候,這種現象發生在數據被髮送和確認的時候。
窗口張開:當窗口的右邊沿向右邊移動的時候,這種現象發生在接受端處理了數據以後。
窗口收縮:當窗口的右邊沿向左邊移動的時候,這種現象不常發生。
TCP就是用這個窗口,慢慢的從數據的左邊移動到右邊,把處於窗口範圍內的數據發送出去(但不用發送所有,只是處於窗口內的數據可以發送。)

一個數據包能放多少數據

首先要弄清楚TCP/IP協議中,TCP是傳輸控制協議,IP是網絡層協議。

TCP協議並沒有規定一個數據包最多能放多少數據。由於我們通常使用的是tcp/ip協議,所以我們的數據包都是ip數據包。

IP數據包的最大長度是64K字節(65535),因爲在IP包頭中用2個字節描述報文長度,2個字節所能表達的最大數字就是65535。 由於IP協議提供爲上層協議分割和重組報文的功能,因此傳輸層協議的數據包長度原則上來說沒有限制。實際上限制還是有的,因爲IP包的標識字段終究不可能無限長,按照IPv4,好像上限應該是4G(64K*64K)。依靠這種機制,TCP包頭中就沒有“包長度”字段,而完全依靠IP層去處理分幀。這就是爲什麼TCP常常被稱作一種“流協議”的原因,開發者在使用TCP服務的時候,不必去關心數據包的大小,只需講SOCKET看作一條數據流的入口,往裏面放數據就是了,TCP協議本身會進行擁塞/流量控制。

但是到了更下一層的傳輸,連ip包都顯得太大了,這裏我們可以用 netstat -in 命令查看系統的最大傳輸單元(Maximum Transmission Unit,MTU)
對於來自於上一層的IP協議,當要求發送的IP數據報比數據鏈路層的MTU大時,必把該數據報分割成多個IP數據報才能發送。

netstat -in
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500 79784071      0      0 0      82379685      0      0      0 BMRU
lo       65536  9587789      0      0 0       9587789      0      0      0 LRU

在Ethernet中,MTU爲1500字節;在FDDI中,MTU爲4352字節;在 IP over AMT中,MTU爲9180字節

大部分網絡設備的MTU都是1500。如果本機的MTU比網關的MTU大,大的數據包就會被拆開來傳送,這樣會產生很多數據包碎片,增加丟包率,降低網絡速度。把本機的MTU設成比網關的MTU小或相同,就可以減少丟包。

而在更底層的地方,可能數據包被拆的更小,如果是IP over ATM,則IP包將被切分成一個一個的ATM Cell,大小爲53字節。我們的寬帶ADSL技術就使用了ATM協議。

如有理解不到位,歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章