中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux TCP協議的知識點有哪些

發布時間:2021-12-17 10:19:00 來源:億速云 閱讀:127 作者:iii 欄目:大數據

這篇文章主要講解了“linux TCP協議的知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“linux TCP協議的知識點有哪些”吧!

1. TCP協議

1.1 TCP數據包頭

要了解三次握手和四次揮手,首先需要了解下TCP數據包頭的結構,如下: linux TCP協議的知識點有哪些

  • 源端口、目的端口:16位長,標識出遠端和本地的端口號;

  • 序號:SEQ,32位長,標識發送的數據包的順序,防止數據包亂序;

  • 確認號:32位長,接收方對發送方發送來的TCP報文段的響應,其值是對收到的報文序號加1,用于解決不丟包的問題;

  • TCP頭長:4位頭長,標識tcp頭部可以有多少個32bit,即多少個4字節,因為頭長是4位,最大能表示15,所以TCP頭部最大就是15*4等于60個字節,也就是說TCP包頭最長可以有60個字節;

  • URG:表示緊急指針是否有效;

  • ACK:ACK位置1表明確認號是合法的,如果ACK為0,那么數據包不包含確認信息,確認字段被省略;

  • PSH:提示接收端應用程序應該立即從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間;

  • RST:表示要求對方重新建立連接,用于復位由于主機崩潰或其他原因而出現的錯誤的連接,還可以用于拒絕非法的數據報或拒絕連接請求;

  • SYN:表示請求建立連接;

  • FIN:表示通知對方要關閉連接了;

  • 窗口大小:16位長,是一種流量控制的手段,這個窗口,指的是接收通告窗口,它告訴對端本端的TCP緩沖區還能容納多少字節的數據,這樣對方就可以控制發送數據的速度;

  • 校驗和:16位長,由發送端填充,接收端根據該值,校驗接收到的TCP報文段在傳輸過程中是否損壞,校驗包括頭部和數據部分,它是TCP可靠傳輸的一個重要保障;

  • 緊急指針:16位長,是一個正的偏移量,它和序號相加表示最后一個緊急數據的下一個字節的序號,確切的說,它是緊急指針相對當前序號的偏移,是發送端向接收端發送緊急數據的辦法;

  • 可選項:TCP頭部最長可以有60個字節,而前部分已知的字段占用了20個字節,所以選項最多可以有40個字節,包括最大TCP載荷,窗口比例、選擇重復數據報等選項;

注意:TCP數據包是沒有IP地址的,只有端口

1.2 三次握手協議

在利用TCP實現源主機和目的主機通信時,目的主機必須同意,否則TCP連接無法建立。為了確保TCP連接的成功建立,TCP采用了一種稱為三次握手的方式,三次握手方式使得“序號/確認號”系統能夠正常工作,從而使它們的序號達成同步。如果三次握手成功,則連接建立成功,可以開始傳送數據信息。 三次握手:為應用程序提供可靠的通信連接,適合于一次傳輸大批數據的情況,并適用于要求得到響應的應用程序。 其三次握手分別為:

  • 源主機A的TCP向主機B發送連接請求報文段,其首部中的SYN(同步)標志位應置為1,表示想跟目標主機B建立連接,進行通信,并發送一個同步序列號X(例:SEQ=100)進行同步,表明在后面傳送數據時的第一個數據字節的序號為X+1(即101), 此時client端狀態為SYN_SENT。

  • 目標主機B的TCP收到連接請求報文段后,如同意,則發回確認。再確認報中應將ACK位置為1.確認號為X+1,同時又向A也發送一個SYN=1,并發送一個序號Y, 此時server端狀態為SYN_RCVD。

  • 源主機A的TCP收到目標主機B的確認后要想目標主機B給出確認。其ACK置為1,確認號為Y+1,而自己的序號為X+1。TCP的標準規定,SYN置1的報文段要消耗掉一個序號, 當兩邊都確認完成后,狀態改為ESTABLISHED。

運行客戶進程的源主機A的TCP通知上層應用進程,連接已經建立。 當源主機A向目標主機B發送第一個數據報文段時,其序號仍為X+1,因為前一個確認報文段并不消耗序號。 當運行服務進程的目標主機B的TCP收到源主機A的確認后,也通知其上層應用進程,連接已經建立。至此建立了一個全雙工的連接。

1.3 tcp斷開連接四次揮手

tcp建立連接是三次,但斷開連接卻要四次,是因為tcp是全雙工的,兩個方向上都需要進行關閉。

  • 當主機A完成數據傳輸后,將控制位FIN置1,向主機B提出停止TCP連接的請求,狀態改為FINWAIT1,此時,該數據包中,序列號為主機B發送的上一個數據包中的確認號值,而確認號為主機A發送的上一個數據包中的序列號+該數據包所帶的數據的大小;

  • 主機B收到FIN后對其作出響應,確認這一方向上的TCP連接將關閉,將ACK置1,此時服務器狀態改為CLOSEWAIT, 客戶端狀態改為FINWAIT_1,此時序列號為上一步中的確認號,確認號為上一步中的序列號加1;

  • 由B 端再提出反方向的關閉請求,將FIN置1,服務端狀態為LASTACK,客戶端狀態為TIMEWAIT,此時序列號為上一步的確認號,確認號為上一步的序列號加上數據包所帶數據的大小;

  • 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束狀態為CLOSED,此時序列號為上一步中的確認號,確認號為上一步中的序列號加1;

注意 : FIN和SYN一樣,也要消耗一個序號。理論上服務器在TCP連接關閉時發送的終止數據包中,只有終止位置是1,然后客戶端進行確認。但是在實際的 TCP實現中,在終止數據包中,確認位和終止位是同時置為1的,確認位置為1表示對最后一次傳輸的數據進行確認,終止位置為1表示關閉該方向的TCP連 接。

1.4 TCP有哪些狀態

一般我們可以使用netstat查看當前socket狀態。

  • CLOSED:表示初始狀態;

  • LISTEN:表示服務器端的某個socket處于監聽狀態,可以接受連接;

  • SYNSENT:三次握手時,客戶端發送第一次SYN連接請求后,狀態SYNSENT;

  • SYN_RCVD:也是三次握手時服務端的一個中間狀態;

  • ESTABLISHED:表示連接已經建立,這里要說明一下,其實TCP連接并不是真的有什么東西連著在,只是說雙方都是ESTABLLISHED狀態,就說明雙方連接正常;

  • FINWAIT1:已經建立連接后,其中一方請求終止連接,四次揮手中間狀態;

  • TIME_WAIT:表示收到了對方的FIN報文,并發送出了ACK報文,就等2MSL(默認是2min)后回到CLOSED可用狀態;

  • CLOSING:表示發送FIN報文后,沒有收到對方的ACK報文,反而收到了對方的FIN報文,這種情況其實就是雙方同時關閉socket;

  • CLOSE_WAIT:四次揮手中間狀態,表示在等待關閉連接;

  • LAST_ACK:四次揮手時被動關閉一方在發送FIN報文后,等待對方的ACK確認報文;

  • RST:同時打開和同時關閉;

1.5 TIME_WAIT為什么要等2MSL才會變為CLOSED

有兩個原因:

  • 可靠地終止TCP連接,在四次揮手的最后一步中,可能客戶端發送到服務端的確認包丟失,服務端就會重發結束報文段,客戶端重新發起確認報文段,而這就需要停留一段時間;

  • 保證讓遲來的TCP報文段有足夠的時間被識別并丟棄,如果沒有停留一段時間,原來客戶端的端口號就可以立即被另外一個應用程序重用,此時如果服務端有遲來的報文段,就會發到該新的應用程序上去,而這顯然是不被允許的;

注意:報文段的生存周期是一個MSL,所以在2MSL后,不會還存在遲到的報文段。

感謝各位的閱讀,以上就是“linux TCP協議的知識點有哪些”的內容了,經過本文的學習后,相信大家對linux TCP協議的知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔江区| 德昌县| 西盟| 黄平县| 桐乡市| 岗巴县| 孙吴县| 谷城县| 吴旗县| 舒兰市| 沙坪坝区| 汪清县| 玉林市| 苏尼特右旗| 防城港市| 井陉县| 吉木萨尔县| 公主岭市| 长沙市| 高要市| 晴隆县| 兴仁县| 武穴市| 林口县| 洪洞县| 咸阳市| 宜阳县| 故城县| 南华县| 集贤县| 静乐县| 综艺| 吉安县| 赤城县| 马尔康县| 满洲里市| 兰州市| 织金县| 阿克苏市| 托克托县| 高青县|