1.三次握手詳情
2.為什麼需要三次握手才能建立連線
3.首次握手的隱患---syn超時的問題
4.建立連線之後,client出現故障
(1)一開始,客戶端和伺服器端都處於關閉狀態(closed),然後開啟服務,服務端這個時候處於監聽狀態(
listen
)。(2)客戶端傳送乙個連線請求報文,裡面syn等於1,
seq可以使任意乙個整數,標明這個報文段的序號。這個報文段不能傳輸資料。此時客戶端進入同步狀態(
syn-sent
)。(3)服務端同意連線則傳送乙個報文段,裡面syn=1,
ack=1
,seq=y
,ack=x+1
。大寫字母是標誌位
ack=1
表示確認號(
ack)有效,這裡
ack確認上乙個伺服器傳送過來的
seq為
x的已經接受,確認下乙個接收的編號為
x+1,同時傳送的報文段的序號為
y。此時的報文段不能傳送資料。服務端進入同步狀態(
syn-rcvd
)。(4)客戶端接收服務端報文段之後,回覆乙個報文段,裡面
ack=1
,seq=x+1
,ack=y+1
。ack
確認伺服器端的
y編號的資料已經接受,請求
ack=y+1
的字段,此時客戶端的報文段編號為
x+1。此時可以傳送資料,也可以不傳送。客戶端進入已建立連線狀態(
estab-lished
)。(5)服務端接收之後進入已連線狀態(
estab-lished
)主要是初始化sequence number的初始值
問題分析:server收到
client
的syn
,回覆syn-ack
的時候未收到
ack確認
服務端解決方法:server不斷地重試直至超時,
linux
系統中超時時間是
63秒,即重試五次之後關閉連線
1,2,4,8,16,32
,第五次重試之後等待
32秒後關閉。
syn flood攻擊:即不斷的使服務端進入同步狀態,使伺服器的埠不可用,浪費掉
解決方法:設定乙個syn佇列,當
syn佇列滿了之後,伺服器則會通過
tcp_syncookies
引數回發乙個
syn cookie
,如果客戶端連線正常則會回發
syn cookie
,直到建立連線
連線具有保活機制,向對方傳送保活探測報文,如果未收到響應則繼續傳送,常識次數達到保活探測數任未收到響應即終止連線。
計算機網路之tcp三次握手
客戶端與伺服器之間資料的傳送和返回的過程當中需要建立乙個叫tcp connection的東西 由於tcp不存在連線的概念,只存在請求和響應,請求和響應都是資料報,它們之間都是經過由tcp建立的乙個從客戶端發起,伺服器接收的類似連線的通道,這個連線可以一直保持,http請求是在這個連線的基礎上傳送的 ...
計算機網路 三次握手
假設a為客戶端,b為服務端。首先b處於listen 監聽 狀態,等待客戶的連線請求。a向b傳送連線請求報文,syn 1,ack 0 選擇乙個初始的序號x b收到連線請求,如果同意建立連線,則向a傳送連線確認報文,syn 1,ack 1 確認號為1,同時也選擇乙個初始的序號y。a收到b的連線確認序號後...
計算機網路 26 TCP三次握手
三次握手 three way handshake 其實就是指建立乙個tcp連線時,需要客戶端和伺服器總共傳送3個包。進行三次握手的主要作用就是為了確認雙方的接收能力和傳送能力是否正常 指定自己的初始化序列號為後面的可靠性傳送做準備。實質上其實就是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列...