網路程式設計 TCP的三次握手與四次揮手

2021-09-13 01:38:09 字數 1294 閱讀 6330

urg 緊急指標標誌

ack 確認序號標誌

psh push標誌

rst 重置連線標誌

syn 同步序號,用於建立連線過程

fin finish標誌,用於釋放連線

1.為什麼tcp客戶端最後還要傳送一次確認呢?

主要防止已經失效的連線請求報文突然又傳送到了伺服器,從而產生錯誤。

如果使用的是兩次握手建立連線,假設有這樣一種場景,客戶端傳送了第乙個請求連線並且沒有丟失,只是因為在網路結點中滯留的時間太長了,由於tcp的客戶端遲遲沒有收到確認報文,以為伺服器沒有收到,此時重新向伺服器傳送這條報文,此後客戶端和伺服器經過兩次握手完成連線,傳輸資料,然後關閉連線。此時此前滯留的那一次請求連線,網路通暢了到達了伺服器,這個報文本該是失效的,但是,兩次握手的機制將會讓客戶端和伺服器再次建立連線,這將導致不必要的錯誤和資源的浪費。

2.握手是為了建立連線

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待服務確認。

第二次握手:伺服器收到syn包,必須確認客戶端的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態。

第三次握手:客戶端收到服務端的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。

3.為什麼需要三次握手才能建立起連線

為了初始化seq的初始值

1.揮手 是為了終止連線

第一次揮手:client傳送乙個fin,用來關閉client到server的資料傳輸,client進入fin_wait_1狀態。

第二次揮手:server收到fin後,傳送乙個ack給client,確認序列號為收到序列號+1(與syn相同,乙個fin占用乙個序號),server進入close_wait狀態

第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態;

client收到fin後,client進入time_wait狀態,接著發乙個ack給server,確認序號為收到序號+1,server進入closed狀態,完成四次揮手。

2.為什麼會有time_wait狀態

3.為什麼建立連線是三次握手,關閉連線確是四次揮手呢?

TCP三次握手與四次握手

當我們從瀏覽器輸入乙個url,http的工作流程如下圖所示 dns解析流程請看dns網域名稱解析過程這篇文章 現在來講tcp三次握手 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。1 序號 seq序號,佔32位,用來標識從tcp源端向目的端傳送的位元組流,發起...

TCP 三次握手 四次握手

http常見狀態碼 200 ok 伺服器成功處理了請求 301 302 moved permanently 重定向 response中應該包含乙個location url,說明資源現在所處的位置 304 not modified 未修改 客戶的快取資源是最新的,要客戶端使用快取 404 not fo...

TCP三次握手四次

tcp協議即為傳輸控制協議。所謂的 三次握手 即對每次傳送的資料量是怎樣跟蹤進行協商使資料段的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。首先需要知道tcp報文段以及其欄位含義 源埠號 傳送方程序埠號 目標埠號 目的埠對應程序 確認號 ac...