TCP協議建立連接與釋放連接

TCP建立連接三次握手

1. 客戶端發出段1,SYN位表連接請求。序號是1000,這個序號在絡通訊中作臨時的
地 址,每發個數據字節,這個序號要加1,這樣在接收端可以根據序號排出數據包的正
確順 序,也可以發現丟包的情況,另外,規定SYN位和FIN位也要佔個序號,這次雖然沒
發數 據,但是由於發了SYN,因此下次再發送應該序號1001mss表最段尺,
如果 個段太,封裝成幀後超過了鏈路層的最幀長度,就必須在IP 層分,爲了避
免這種情 況,客戶端聲明的最段尺,建議服務器端發來的段不要超過這個長
度。

2. 服務器發出段2,也帶有SYN,同時置ACK位表確認,確認序號是1001,我接收
到 序號1000及其以前所有的段,請你下次發送序號爲1001的段”,也就是應答了客戶端
的連接 請求,同時也給客戶端發出個連接請求,同時聲明最尺爲1024
3. 客戶端發出段3,對服務器的連接請求進應答,確認序號是8001
在這個過程中,客戶端和服務器分別給對發了連接請求,也應答了對的連接請求,其中服務
器 的請求和應答在個段中發出,因此共有三個段於建連接,稱爲'''三握(three-wa
handshake)'''。在建連接的同時,雙協商了些信息,例如雙發送序號的初始值、最段
尺等。
TCP通訊中,如果收到另發來的段,讀出其中的的端號,發現本機並沒有任何進
程 使這個端,就會應答個包含RST位的段給另。例如,服務器並沒有任何進程使
8080,我們卻telnet客戶端去連接它,服務器收到客戶端發來的SYN段就會應答個RS
,客戶 端的telnet程序收到RST段後報告錯誤Connection refused:
數據傳輸的過程:
1. 客戶端發出段4,包含從序號1001開始的20個字節數據。
2. 服務器發出段5,確認序號爲1021,對序號爲1001-1020的數據表確認收到,同時請求發
送 序號1021開始的數據,服務器在應答的同時也向客戶端發送從序號8001開始的10
字節數 據,這稱爲piggyback
3. 客戶端發出段6,對服務器發來的序號爲8001-8010的數據表確認收到,請求發送序 號
8011開始的數據。
在數據傳輸過程中,ACK和確認序號是常重要的,應程序交給TCP協議發送的數據會暫存
TCP層的發送緩衝區中,發出數據包給對之後,只有收到對應答的ACK段才知道該數據
包確 實發到了對,可以從發送緩衝區中釋放掉了,如果因爲絡故障丟失了數據包或者丟失
了對發 回的ACK,經過等待超時後TCP協議動將發送緩衝區中的數據包重發。

這個例只描述了最簡單的問答的情景,實際的TCP數據傳輸過程可以收發很多數據段,

雖然 典型的情景是客戶端主動請求服務器被動應答,但也不是必須如此,事實上TCP協議爲應

層提供 了全雙(full-duplex)的服務,雙都可以主動甚同時給對發送數據。

如果通訊過程只能採問答的式,收和發兩個向不能同時傳輸,在同時間只允許

個 向的數據傳輸,則稱爲'''半雙(half-duplex)''',假設某種向連接的協議是半雙的,則只

需要 套序號就夠了,不需要通訊雙各維護套序號,想想爲什麼。

關閉連接的過程:

1. 客戶端發出段7,FIN位表關閉連接的請求。

2. 服務器發出段8,應答客戶端的關閉連接請求。

3. 服務器發出段9,其中也包含FIN位,向客戶端發送關閉連接請求。

4. 客戶端發出段10,應答服務器的關閉連接請求。

建立連接的過程是三次握手,關閉連接通常需要4個段,服務器的應答和關閉連接請求通常

不合 並在一個段中,因爲有連接半關閉的情況,這種情況下客戶端關閉連接之後就不能再發送

數據給服 務器了,但是服務器還可以發送數據給客戶端,直到服務器也關閉連接爲止

三次握手的目的:

  1. 數據必須正確到達

2.數據必須按序到達

3.數據丟失後進行數據重傳

4.大面積丟包,網絡擁塞,TCP慢點發送請求

5.傳輸速度也應該控制

每次建立連接時,會有相應的數據結構來描述這個鏈接

數據結構中的內容:

  1. 雙方的套接字

  2. 這條連接的序號

  3. 滑動窗口




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