国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 課堂 > 網絡協議 > 正文

圖解TCP通信三次握手和四次分手

2020-02-18 18:56:18
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了圖解TCP通信三次握手和四次分手,對正在學習TPC通信的同學會有些幫助,需要的朋友可以參考下

TCP協議非常重要,這里把它的連接和釋放整理一下。

TCP,三次握手,四次分手

首先是三次握手:

1、 客戶端發起,像服務器發送的報文SYN=1,ACK=0,然后選擇了一個初始序號:seq=x。

SYN

在鏈接的時候創建一個同步序號,當SYN=1同時ACK=0的時候,表明這是一個連接請求的報文段。如果對方有意鏈接,返回的報文里面SYN=1,ACK=1,。從這個意義上來說,SYN=1的時候,就表明這是一個‘請求’或者‘接受請求’的報文。

SYN=1的報文段不能攜帶數據。但是要消耗掉一個序號,

ACK

僅當ACK=1的時候,確認字號(期望收到對方下一個報文段的第一個數據字節的編號)才有效。因此,TCP規定,當鏈接建立之后,所有往來的報文里面的ACK都應該是1(事實上,也只有客戶端發起的鏈接請求報文的ACK沒有置1)。

現在的狀態:客戶端進入SYN-SEND

2、 服務器接收到了SYN=1,ACK=0的請求報文之后,返回一個SYN=1,ACK=1的確認報文。

同時,確認號ack=x+1,同時也為自己選擇一個初始序號seq=y

現在的狀態:服務器進入SYN-REVD

3、 客戶端接收到了服務器的返回信息之后,還要給服務器返回最后一條確認,ACK=1,確認號ack=y+1;

現在的狀態:客戶端進入ESTABLISHED

下面說一下為什么兩次握手不行,非得三次:

首先說明一種正常的情況

,就是客戶端發送了一條請求鏈接的報文,但是由于網絡原因丟失了,所以,不可能接收到服務器端的確認。這個時候,客戶端就就只有再一次發送原來的請求報文,這次服務器收到之后返回確認,客戶端再確認一次,鏈接確立。

然后考慮一種不正常的情況

,客戶端發了兩次請求鏈接的報文,第二條被服務器捕捉到,返回數據,完成了兩次握手。數據傳送完成之后,鏈接關閉。但是這時候,第一條擁塞的請求報文現在到達了服務器端,服務器還以為客戶端要又一次建立連接,于是發送確認,然后把自己敞開,等著客戶端發送過來數據。于是,很多的網絡資源就是這樣浪費掉了。

要是實行三次握手,服務器收到了一條過期的請求報文,返回確認信息,客戶端接收到了服務器的信息之后感到莫名其妙,心想:我他媽又沒要鏈接,你返回這個是不是瘋了。于是不置一詞。服務器過一段時間還沒有收到第三次握手的數據,知道客戶端并沒有要求建立鏈接的請求,含淚離開。

然后是四次分手:

現在雙方的狀態都是ESTABLISHED狀態。

1、 客戶端發起請求,請求斷開鏈接。FIN=1,seq=u。u是之前傳送過來的最后一個字節的序號+1。

FIN:用來釋放一個鏈接,當FIN=1的時候,表明此報文的發送方已經完成了數據的發送,沒有新的數據要傳送,并要求釋放鏈接。

客戶端進入FIN-WAIT-1狀態,等著服務器返回確認;

2、 服務器收到客戶端的請求斷開鏈接的報文之后,返回確認信息。ACK=1,seq=v,ack=u+1。

服務器進入CLOSE-WAIT狀態。

這個時候,客戶端不能給服務器發送信息報文,只能接收。但是服務器要是還有信息要傳給服務器,仍然能傳送。

3、 當服務器也沒有了可以傳的信息之后,給客戶端發送請求結束的報文。FIN=1,ACK=1,

ack=u+1,seq=w。

這個時候的狀態:服務器進入LAST-ACK狀態。

4、 客戶端接收到FIN=1的報文之后,返回確認報文,ACK=1,seq=u+1,ack=w+1。

發送完畢之后,客戶端進入等待狀態,等待兩個時間周期。關閉。

為什么最后還要等待兩個時間周期呢?

1、 客戶端的最后一個ACK報文在傳輸的時候丟失,服務器并沒有接收到這個報文。這個候。

服務器就會超時重傳這個FIN消息,然后客戶端就會重新返回最后一個ACK報文,等待兩個時間周期,完成關閉。如果不等待這兩個時間周期,服務器重傳的那條消息就不會收到。服務器就因為接收不到客戶端的信息而無法正常關閉。

2、 預防上一次在三次握手中提到的失效的報文干擾。兩個時間周期過去之后,所有的報文都會在網絡中消失,保證下一次重新連接的時候有亂七八糟的報文影響。


注:相關教程知識閱讀請移步到網絡協議頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永济市| 沙坪坝区| 临泉县| 德令哈市| 石城县| 丰城市| 惠东县| 湖南省| 沈阳市| 博爱县| 博乐市| 藁城市| 神池县| 弥勒县| 丰台区| 镇远县| 洛隆县| 仪陇县| 张家港市| 泉州市| 昭苏县| 五大连池市| 玉龙| 广昌县| 紫阳县| 瑞安市| 濮阳县| 麟游县| 出国| 北安市| 泉州市| 乳源| 印江| 衡东县| 济宁市| 嘉定区| 东辽县| 衡南县| 扶绥县| 隆子县| 汕尾市|