導航:首頁 > 網路連接 > 計算機網路rst1

計算機網路rst1

發布時間:2023-02-24 21:46:55

A. 網路中常用的埠號有哪些

埠號小於256的一般為常用埠號。其中常用的保留TCP埠號有HTTP 80、FTP 20/21、Telnet 23、SMTP 25、DNS 53等;常用的保留UDP埠號有DNS 53、BootP 67(server)/ 68(client)、TFTP 69、SNMP 161等。

TCP與UDP段結構中埠地址都是16比特,可以有在0-65535范圍內的埠號。任何TCP/IP實現所提供的服務都用1-1023之間的埠號,是由ICANN來管理的。埠號從1024-49151是被注冊的埠號,被IANA指定為特殊服務使用。從49152-65535是動態或私有埠號。

(1)計算機網路rst1擴展閱讀:

各個埠及埠號的實際用途

1、1系埠

POP3伺服器開放102埠,用於接收郵件,客戶端訪問伺服器端的郵件服務;NEWS新聞組傳輸協議,承載USENET通信。這個埠的連接通常是人們在尋找USENET伺服器;137、138是UDP埠,當通過網上鄰居傳輸文件時用這個埠。

2、2系埠

FTP伺服器開放的21埠,用於上傳、下載。最常見的攻擊者用於尋找打開anonymous的FTP伺服器的方法。這些伺服器帶有可讀寫的目錄;PcAnywhere建立的TCP和22埠的連接可能是為了尋找ssh;掃描23埠是為了找到機器運行的操作系統。

3、3系埠

輕型目錄訪問協議和NetMeeting Internet Locator Server共用389埠。

4、4系埠

網頁瀏覽443埠,能提供加密和通過安全埠傳輸的另一種HTTP;木馬HACKERS PARADISE開放456埠。

B. 網路 之 三次握手&四次揮手 介紹

要了解三次握手&四次揮手的過程,就需要對TCP的報頭以及有限狀態機的概念有所了解,本文將介紹TCP報頭的欄位的含義,以及有限狀態機各個狀態的意義,最後對三次握手和四次揮手的過程做介紹

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內另一個重要的傳輸協議。在網際網路協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。

這里將介紹TCP報頭的特性以及TCP報頭各個欄位的含義

.工作在傳輸層面向連接協議

.全雙工協議

.半關閉

.錯誤檢查

.將數據打包成段,排序

.確認機制

.數據恢復,重傳

.流量控制,滑動窗口

.擁塞控制,慢啟動和擁塞避免演算法

.源埠、目標埠 :計算機上的進程要和其他進程通信是要通過計算機埠的,而一個計算機埠某個時刻只能被一個進程佔用,所以通過指定源埠和目標埠,就可以知道是哪兩個進程需要通信。源埠、目標埠是用16位表示的,可推算計算機的埠個數為2^16個

. 序列號 :表示本報文段所發送數據的第一個位元組的編號。在TCP連接中所傳送的位元組流的每一個位元組都會按順序編號。由於序列號由32位表示,所以每2^32個位元組,就會出現序列號回繞,再次從0 開始

. 確認號 :表示接收方期望收到發送方下一個報文段的第一個位元組數據的編號。也就是告訴發送發:我希望你(指發送方)下次發送的數據的第一個位元組數據的編號是這個確認號

. 數據偏移 :表示TCP報文段的首部長度,共4位,由於TCP首部包含一個長度可變的選項部分,需要指定這個TCP報文段到底有多長。它指出TCP 報文段的數據起始處距離TCP 報文段的起始處有多遠。該欄位的單位是32位(即4個位元組為計算單位),4位二進制最大表示15,所以數據偏移也就是TCP首部最大60位元組

. URG :表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針欄位(urgent pointer)只有當URG=1時才有效

. ACK :表示是否前面的確認號欄位是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號欄位才有效。TCP規定,連接建立後,ACK必須為1,帶ACK標志的TCP報文段稱為確認報文段

. PSH :提示接收端應用程序應該立即從TCP接收緩沖區中讀走數據,為接收後續數據騰出空間。如果為1,則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,就會一直停留在TCP接收緩沖區中

. RST :如果收到一個RST=1的報文,說明與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然後再重新建立連接。或者說明上次發送給主機的數據有問題,主機拒絕響應,帶RST標志的TCP報文段稱為復位報文段

. SYN :在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1,帶SYN標志的TCP報文段稱為同步報文段

. FIN :表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1,即告訴對方:「我的數據已經發送完畢,你可以釋放連接了」,帶FIN標志的TCP報文段稱為結束報文段

. 窗口大小 :表示現在充許對方發送的數據量,也就是告訴對方,從本報文段的確認號開始允許對方發送的數據量

. 校驗和 :提供額外的可靠性

. 緊急指針 :標記緊急數據在數據欄位中的位置

. 選項部分 :其最大長度可根據TCP首部長度進行推算。TCP首部長度用4位表示,選項部分最長為:(2^4-1)*4-20=40位元組

常見選項 :

.最大報文段長度:MaxiumSegment Size,MSS

.窗口擴大:Windows Scaling

.時間戳:Timestamps

.a 最大報文段長度

指明自己期望對方發送TCP報文段時那個數據欄位的長度。默認是536位元組。數據欄位的長度加上TCP首部的長度才等於整個TCP報文段的長度。MSS不宜設的太大也不宜設的太小。若選擇太小,極端情況下,TCP報文段只含有1位元組數據,在IP層傳輸的數據報的開銷至少有40位元組(包括TCP報文段的首部和IP數據報的首部)。這樣,網路的利用率就不會超過1/41。若TCP報文段非常長,那麼在IP層傳輸時就有可能要分解成多個短數據報片。在終點要把收到的各個短數據報片裝配成原來的TCP報文段。當傳輸出錯時還要進行重傳,這些也都會使開銷增大。因此MSS應盡可能大,只要在IP層傳輸時不需要再分片就行。在連接建立過程中,雙方都把自己能夠支持的MSS接入這一欄位。MSS只出現在SYN報文中。即:MSS出現在SYN=1的報文段中

.b 窗口擴大

為了擴大窗口,由於TCP首部的窗口大小欄位長度是16位,所以其表示的最大數是65535。但是隨著時延和帶寬比較大的通信產

生(如衛星通信),需要更大的窗口來滿足性能和吞吐率,所以產生了這個窗口擴大選項

.c 時間戳

可以用來計算RTT(往返時間),發送方發送TCP報文時,把當前的時間值放入時間戳欄位,接收方收到後發送確認報文時,把這個時間戳欄位的值復制到確認報文中,當發送方收到確認報文後即可計算出RTT。也可以用來防止回繞序號PAWS,也可以說可以用來區分相同序列號的不同報文。因為序列號用32為表示,每2^32個序列號就會產生回繞,那麼使用時間戳欄位就很容易區分相同序列號的不同報文

2.3 TCP協議PORT

.傳輸層通過port號,確定應用層協議

.Port number:

. tcp :0-65535,傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路;結束後拆除鏈路.

. udp :0-65535,User Datagram Protocol,無連接的協議.

. IANA :互聯網數字分配機構(負責域名,數字資源,協議分配)

0-1023:系統埠或特權埠(僅管理員可用) ,眾所周知,永久的分配給固定的系統應用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)

1024-49151:用戶埠或注冊埠,但要求並不嚴格,分配給程序注冊為某應用使用,1433/tcp(SqlServer),1521/tcp(oracle),

3306/tcp(mysql),11211/tcp/udp(memcached)

49152-65535:動態埠或私有埠,客戶端程序隨機使用的埠

其范圍的定義:/proc/sys/net/ipv4/ip_local_port_range

有限狀態機,(英語:Finite-state machine, FSM),又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。

常見的計算機就是使用有限狀態機作為計算模型的:對於內存的不同狀態,CPU通過讀取內存值進行計算,更新內存中的狀態。CPU還通過消息匯流排接受外部輸入設備(如鍵盤、滑鼠)的指令,計算後更改內存中的狀態,計算結果輸出到外部顯示設備(如顯示器),以及持久化存儲在硬碟。

TCP協議也存在有限狀態機的概念,TCP 協議的操作可以使用一個具有 11 種狀態的有限狀態機來表示

.CLOSED 沒有任何連接狀態

.LISTEN 偵聽狀態,等待來自遠方TCP埠的連接請求

.SYN-SENT 在發送連接請求後,等待對方確認

.SYN-RECEIVED 在收到和發送一個連接請求後,等待對方確認

.ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態

.FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認

.FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求

.TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失

.CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,並已確認

.LAST-ACK 被動關閉,等待最後一個關閉傳輸連接確認,並等待所有分組消失

.CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認

.客戶端通過connect系統調用主動與伺服器建立連接connect系統調用首先給伺服器發送一個同步報文段,使連接轉移到SYN_SENT狀態。

.此後connect系統調用可能因為如下兩個原因失敗返回:

.1、如果connect連接的目標埠不存在(未被任何進程監聽),或者該埠仍被處於TIME_WAIT狀態的連接所佔用(見後文),則伺服器將給客戶端發送一個復位報文段,connect調用失敗。

.2、如果目標埠存在,但connect在超時時間內未收到伺服器的確認報文段,則connect調用失敗。

.connect調用失敗將使連接立即返回到初始的CLOSED狀態。如果客戶端成功收到伺服器的同步報文段和確認,則connect調用成功返回,連接轉移至ESTABLISHED狀態

.當客戶端執行主動關閉時,它將向伺服器發送一個結束報文段FIN,同時連接進入FIN_WAIT_1狀態。若此時客戶端收到伺服器專門用於確認目的的確認報文段,則連接轉移至FIN_WAIT_2狀態。當客戶端處於FIN_WAIT_2狀態時,伺服器處於CLOSE_WAIT狀態,這一對狀態是可能發生半關閉的狀態。此時如果伺服器也關閉連接(發送結束報文段),則客戶端將給予確認並進入TIME_WAIT狀態

.客戶端從FIN_WAIT_1狀態可能直接進入TIME_WAIT狀態(不經過FIN_WAIT_2狀態),前提是處於FIN_WAIT_1狀態的伺服器直接收到帶確認信息的結束報文段(而不是先收到確認報文段,再收到結束報文段)

注意,客戶端先發送一個FIN給服務端,自己進入了FIN_WAIT_1狀態,這時等待接收服務端的報文,該報文會有三種可能:

a 只有服務端的ACK,只收到伺服器的ACK,客戶端會進入FIN_WAIT_2狀態,後續當收到服務端的FIN時,回應發送一個ACK,會進入到TIME_WAIT狀態,這個狀態會持續2MSL(TCP報文段在網路中的最大生存時間,RFC 1122標準的建議值是2min).客戶端等待2MSL,是為了當最後一個ACK丟失時,可以再發送一次。因為服務端在等待超時後會再發送一個FIN給客戶端,進而客戶端知道ACK已丟失

b 只有服務端的FIN,回應一個ACK給服務端,進入CLOSING狀態,然後接收到服務端的ACK時,進入TIME_WAIT狀態

c 同時收到服務端的ACK和FIN,直接進入TIME_WAIT狀態

.收到伺服器ACK後,客戶端處於FIN_WAIT_2狀態,此時需要等待伺服器發送結束報文段,才能轉移至TIME_WAIT狀態,否則它將一直停留在這個狀態。如果不是為了在半關閉狀態下繼續接收數據,連接長時間地停留在FIN_WAIT_2狀態並無益處。連接停留在FIN_WAIT_2狀態的情況可能發生在:客戶端執行半關閉後,未等伺服器關閉連接就強行退出了。此時客戶端連接由內核來接管,可稱之為孤兒連接(和孤兒進程類似)。

.Linux為了防止孤兒連接長時間存留在內核中,定義了兩個內核參數:

./proc/sys/net/ipv4/tcp_max_orphans 指定內核能接管的孤兒連接數目

./proc/sys/net/ipv4/tcp_fin_timeout指定孤兒連接在內核中生存的時間

TCP協議中的三次握手和四次揮手

客戶機端的三次握手和四次揮手

伺服器端的三次握手和四次揮手

1 client 首先發送一個連接試探,此時ACK=0,表示確認號無效,SYN=1表示這是一個請求連接或連接接受報文,同時表示這個數據包不攜帶數據,seq=x表示此時client自己數據的初始序號是x,這時候client進入syn_sent狀態,表示客戶端等等伺服器的回復

2 server 監聽到連接請求報文後,如同意建立連接,則向client發送確認,將TCP報文首部的SYN和ACK都置為1,因為client上一個請求連接的報文中seq=x,所以伺服器端這次就發ack=x+1,表示伺服器端希望客戶端下一個報文段的第一個數據位元組序號是x+1,同時表示x為止的所有數據都已經正確收到了,其中,此時伺服器端發送seq=y表示server自己的初始序號是y,這時伺服器進入了SYN_RCVD狀態,表示伺服器已經收到了客戶端的請求,等待client的確認。

3 client收到確認後還要再次給伺服器端發送確認,同時攜帶要發給server的數據。ACK=1表示確認號ack=y+1有效,client這時的序號seq為x+1

一旦client確認後,這個TCP連接的client 和 server 都直接進入到established狀態,可以發起http請求了

4.2 四次揮手詳解

第一次揮手:client向server,發送FIN報文段,表示關閉數據傳送,此時ACK=0,seq=u,表示客戶端此時數據的報文序號是u,此時,client進入FIN_WAIT_1狀態,表示沒有數據要傳輸了

第二次揮手:server收到FIN報文段後進入CLOSE_WAIT狀態(被動關閉),然後發送ACK確認,表示同意你關閉請求了,主機到主機的數據鏈路關閉,同時發送seq=v,表示此時server端的數據包位元組序號是v,ack=u+1,表示希望client發送的下一個包的序號是u+1,表示確認了序號u之前的包都已經收到,客戶端收到server的ACK報文後,進入FIN_WAIT_2狀態

第三次揮手:server等待client發送完數據,發送FIN=1,ACK=1到client請求關閉,server進入LAST_ACK狀態。此時發送的seq有變化,因為上一個ACK的後server端可能又發送了一些數據,說以數據位元組序號發送了變化,為w,但是ack還是保持不變

第四次揮手:client收到server發送的FIN後,回復ACK確認到server,client進入TIME_WAIT狀態。發送ack=w+1,表示希望伺服器下個發送的報文的位元組序號是w+1,確認了伺服器之前發送的w位元組都已經正確收到,發送seq=u+1表示當前client的位元組序號是u+1.server收到client的ACK後就關閉連接了,狀態為CLOSED。client等待2MSL,仍然沒有收到server的回復,說明server已經正常關閉了,client關閉連接。

其中,MSL(Maximum Segment Lifetime):報文最大生存時間,是任何報文段被丟棄前在網路內的最長時間。當client回復server的FIN後,等待(2-4分鍾),即使兩端的應用程序結束。

TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態的原因是如果client直接進入CLOSED狀態,由於IP協議不可靠性或網路問題,導致client最後發出的ACK報文未被server接收到,那麼server在超時後繼續向client重新發送FIN,而client已經關閉,那麼找不到向client發送FIN的連接,server這時收到RST並把錯誤報告給高層,不符合TCP協議的可靠性特點。如果client直接進入CLOSED狀態,而server還有數據滯留在網路中,當有一個新連接的埠和原來server的相同,那麼當原來滯留的數據到達後,client認為這些數據是新連接的。等待2MSL確保本次連接所有數據消失。

當客戶端等待2MSL後伺服器端沒有再次發送確認的報文後,client認為該次斷開連接已經正常結束,client進入closed狀態。四次揮手正式結束

C. 確認號什麼時候有意義

【計算機通信網路復習】TCP協議 原創
2021-05-09 20:40:37

再不學習就會變成xzy姐姐那樣!

碼齡4年

關注
1. TCP協議的報文格式
TCP報文也稱為報文段(segment),分首部和數據兩部分。首部的前20個位元組是固定的,後面是選項,因此TCP首部最小長度是20位元組。選項部分長度可變,最多為40位元組。
TCP協議報文格式
(1)源/目的埠(16bits),埠號加上IP地址構成了一個套接字socket。
(2)序號(32bits),本報文段發送數據第一個位元組序號,使用隨機數產生器產生一個初始序號。
(3)確認號(32bits),當ACK=1時有意義,當ACK=0時沒有意義。期望收到對方下次發送數據第一個位元組序號。(也就是期望收到的下一個報文段的首部中的序號)由於序號欄位長度為32bit,可對4GB數據進行編號,以保證序號重復使用時,舊序號數據早已在網路中消失。
(4)數據偏移(4bits),它指出數據開始的地方離TCP報文段的起始處有多遠,這是由於TCP報文中含有選項和填充欄位。實際上就是TCP報文段首部的長度,其值所表示的距離單位是32比特(以4位元組為一個單元來計算的)。
(5)保留(6bits),供今後使用,目前置為0。
(6)控制比特(6bits)
緊急位URG:URG=1時,報文應盡快傳送(相當於加速數據),不按原來順序來傳送。要與緊急指針(Urgent Pointer)欄位配合使用。緊急指針指出在本報文段中的緊急數據的最後一個位元組的序號。緊急指針使接收方可以知道緊急數據有多長。
在這里插入圖片描述
確認位ACK:ACK=1時有意義,代表這個數據包是響應數據包,與接收序號(確認序號)配合使用。
推送位PSH(PuSH):PSH=1時,當兩個進程進行互動式通信時,一端應用進程希望在輸入一個命令之後能夠立即得到對方的響應,立即創建一個報文段發送到對方。
在這里插入圖片描述
復位RST(ReSeT):RST=1時,表明出現嚴重差錯,必須釋放連接,然後再重建連接。還可以用來拒絕一個非法報文段或拒絕打開一個連接。
同步位SYN:在建立連接時使用;SYN=1且ACK=0時,表明這是連接請求報文段。對方若同意建立連接,則應在發回的報文段中SYN=1且ACK=1。因此,SYN=1,就表示這是一個連接請求或連接接受報文,而ACK位的值用來區分是哪一種報文(請求/接受)。
終止位FIN(FINal):FIN=1,表明發送位元組已經發完,要求釋放傳輸連接。
(7)窗口(16bits),用來控制對方發送的數據量。用接收方的接收能力來控制發送方的數據發送量,數值是動態變化的。
(8)校驗和(32bits),包括首部和數據這兩部分,要在TCP報文段的前面加上一個12位元組偽首部。
TCP在校驗前,需要根據IP數據包增加偽首部。偽首部增加了TCP校驗和的檢錯能力:檢查TCP報文是否收錯了(目的IP地址)、傳輸層協議是否正確(傳輸層協議號)等。
在這里插入圖片描述

(9)緊急指針(16bits),同時與URG位並用,指明緊急數據之後正常數據的起始位置。
(10)選項(0-40bits),單位元組選項有兩個:選項結束和無操作。多位元組選項有三個:最大報文段長度、窗口擴大因子以及時間戳。

2. TCP連接的建立與釋放
2.1. TCP連接建立
(1)需要經過**「三次握手」**(Three-Way Handshake)。這是為了對每次發送的數據量進行跟蹤與協商,確保數據段的發送和接收同步,根據所接收到的數據量而確認數據發送、接收完畢後何時撤消聯系,並建立虛連接。
(2)TCP 連接建立的「三次握手」:
**最初,**客戶端處於CLOSE(關閉)狀態,伺服器處於LISTEN(收聽)狀態。
第一次握手:客戶端發送SYN包(seq=x, ack=y)到伺服器,並進入SYN_SENT狀態,等待伺服器確認。
第二次握手:伺服器收到客戶端的SYN包必須確認,同時伺服器也要發送SYN+ACK包(seq=y, ack=x+1);伺服器進入SYN_RECV狀態。
第三次握手:伺服器收到客戶端的SYN包必須確認,同時伺服器也要發送SYN+ACK包(seq=y, ack=x+1);伺服器進入SYN_RECV狀態。
TCP連接的「三次握手」

2.2. TCP連接釋放
(1)需要經過**「四次揮手」**(Four-Way Wavehand)。由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。
(2)TCP 連接釋放的「四次揮手」:
此時,客戶端和伺服器均處於ESTABLISHED狀態。
第一次揮手:客戶端向伺服器發送FIN包(seq=u, ack=v),進入FIN_WAIT_1狀態;u=客戶端上次發送最後一個位元組序號加1。
第二次揮手:伺服器收到FIN包後不回復FIN包,而回復ACK包(seq=v, ack=u+1),v=伺服器上次發送最後一個位元組序號加1;伺服器通知應用程序客戶端要求關閉連接,伺服器進入CLOSE_WAIT狀態,即半關閉狀態,此時客戶端雖沒有數據要發送,但伺服器可能有數據要發送;客戶端進入CLOSE_WAIT_2狀態,且要等待一段時間。
第三次揮手:伺服器將最後的數據發送完畢後,向客戶端發送FIN包(seq=w, ack=u+1),由於在半關閉狀態,伺服器很可能又發送了一些數據,假定此時的序列號為seq=w;伺服器進入LAST_ACK狀態,等待客戶端確認。
第四次揮手:客戶端收到FIN包後,向伺服器發送ACK包(seq=u+1, ack=w+1),表示連接徹底釋放。
在這里插入圖片描述

3. TCP協議流量控制、擁塞控制
(1)TCP不是按傳送的報文段編號。TCP將所要傳送的整個報文(可能包括多個報文段)看成是由一個個位元組組成的數據流,然後對每一個位元組編號。在連接建立時,雙方商定初始序號。TCP將每一次傳送的報文段中的第一個數據位元組的序號放在TCP首部的序號欄位中。TCP的確認是對接收到的數據的最高序號(即收到的數據流中的最後一個序號)表示確認。但返回的確認序號是已收到的數據的最高序號加1。也就是確認序號即表示期望下次收到的第一個數據位元組的序號。
(2)TCP採用滑動窗口方式進行流量控制。窗口大小以位元組為單位。TCP報文段首部窗口欄位的數值是當前設定的接收窗口數值。發送窗口在連接建立時由雙方商定,但在通信的過程中,接收方可根據自己的資源情況,隨時動態地調整接收窗口的大小,然後告訴發送方,使發送方的窗口和自己的接收窗口一致。
在這里插入圖片描述
(3)擁塞控制用於防止由於過多的報文進入網路,而造成路由器與鏈路過載。
擁塞窗口:源端一次最多能發送的數據包數量。
門限窗口:擁塞窗口按指數增長還是線性增長的界限。
擁塞控制技術:
慢開始:每出現一次擁塞超時,擁塞窗口都降低到1。
擁塞避免:當擁塞窗口增大到門限窗口值時,就將擁塞窗口指數增長速度降低為線性增長,避免網路再次出現擁塞。
加速遞減:每出現一次擁塞超時,就將門限窗口值減半。
在這里插入圖片描述
TCP每發送一個報文段,就設置一次定時器。只要定時器設置的重發時間已到而沒有收到確認,就要重發這一報文段。計算往返時延的自適應演算法(加權法):
在這里插入圖片描述

文章知識點與官方知識檔案匹配
網路技能樹跨區域網路的通信學習網路層的作用
22781 人正在系統學習中
打開CSDN APP,看更多技術內容

TCP中的RST標志(Reset)詳解_大葉子不小的博客_rst狀態
RST表示復位,用來異常的關閉連接,在TCP的設計中它是不可或缺的。就像上面說的一樣,發送RST包關閉連接時,不必等緩沖區的包都發出去(不像上面的FIN包),直接就丟棄緩存區的包發送RST包。而接收端收到RST包後,也不必發送ACK包來確認。
繼續訪問
TCP詳解_binary~的博客_tcp 詳解
復位RST(ReSeT) 當 RST=1 時,表明 TCP 連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然後再重新建立運輸連接 同步SYN(SYNnchronization) 在連接建立時用來同步序號。當 SYN=1 而 ACK=0 時,表明這是一個連接請求報文...
繼續訪問
TCP 四種定時器(重傳定時器,堅持計時器,保活定時器,時間等待計時器)
主要介紹了TCP 四種定時器,重傳定時器,堅持計時器,保活定時器,時間等待計時器的相關資料,需要的朋友可以參考下
TCP協議的RST標志位
TCP首部欄位有6個是flags,每個標志位有特殊的含義,它們可以單獨存在,也可以同時存在。對於接收方,不同的標志位代表不同的意思,需要做正確的處理 Flags 可以在點擊乙太網報文結構查看各協議層協議首部欄位及其含義 TCP協議首部格式 上圖標注的紅圈裡有6個標志位,每個標志位佔用一個比特 URG 緊急指針有效標識。它告訴系統此報文段中有緊急數據,應盡快傳送(相當於高優先順序的數據) ACK 確認序號有效標識。只有當ACK=1時確認號欄位才有效。當ACK=0時,確認號無效 PSH 標識接收方.
繼續訪問

TCP基礎_yao00037的博客_tcp rst位為1時
RST:該位為1時,表示TCP連接中出現異常必須強制斷開連接。 SYN:該位為1時,表示希望建立連接,並在其序列號的欄位進行序列號初始值的設定。 FIN:該位為1時,表示今後不會再有數據發送,希望斷開連接。當通信結束希望斷開連接時,通信雙方...
繼續訪問
TCP的連接狀態標識 (SYN, FIN, ACK, PSH, RST, URG)
TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.其中,對於我們日常的分析有用的就是前面的五個欄位。它們的含義是:(1)SYN表示建立連接,(2)FIN表示關閉連接,(3)ACK表示響應,(4)PSH表示有 DATA...
繼續訪問
計算機網路
1.網路協議
繼續訪問

最新發布 TCP協議
7.緩沖區:操作系統會給每個進程分配空間,每創建一個套接字就會給套接字分配一個發送和接受緩沖區。sendto就是從發送緩沖區里拷貝數據,recvfrom從接受緩沖區拷貝數據 查看接受緩沖區和發送緩沖區的大小:getsocket(sock,lebvel,optval,optlen);65536 64K sendto:阻塞模式:如果緩沖區里沒有足夠的空間,就等到空間足夠大正在把數據拷貝到發送緩沖區中 非阻塞模式:如果緩沖區沒有足夠的空間就有多少拷貝多少,拷貝完立即返回,返回的是實際拷貝的位元組數 //1.
繼續訪問

計算機網路-TCP/IP_純情程序猿的博客_計算機網路tcp/ip
PSH(Push 推送位):告訴對方收到該報文段後是否立即把數據推送給上層。如果值為 1,表示應當立即把數據提交給上層,而不是緩存起來。 RST(復位):表示是否重置連接。如果 RST=1,說明 TCP 連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,...
繼續訪問
TCP解析_越學習越無知的博客_tcp解析
RST (ReSeT): 當 RST=1 時,表明 TCP 連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然後再重新建立運輸連接 同步SYN: 同步 SYN = 1 表示這是一個連接請求或連接接受報文 ...
繼續訪問
TCP數據報首部
源埠(Source Port),目標埠(Destination Port) 各2位元組 源埠號,標識主機上發起傳送的應用程序;目的埠標識主機上傳送要到達的應用程序。源端和目的端的埠號,用於尋找發端和收端應用進程。這兩個值加上I P首部中的源端I P地址和目的端I P地址唯一確定一個TCP連接。一個I P地址和一個埠號有時也稱為...
繼續訪問
TCP協議的確認重傳機制
TCP協議是面向連接的傳輸層協議,TCP的傳輸特點具有可靠性,它具有面向連接服務來確保可靠穩定傳輸,而確認重傳機制是TCP協議保證可靠穩定傳輸最重要的機制,他包括累計確認、超時時間計算、快速重傳等幾個方面。 確認重傳機制 在發送一個數據之後,就開啟一個定時器,若是在這個時間內沒有收到發送數據的ACK確認報文,則對該報文進行重傳,在達到一定次數還沒有成功時放棄並發送一個復位信號。 ...
繼續訪問
17-tcp首部分析二_songly_的博客
  RST:表示重建或重置,如果RST = 1表示tcp連接出現嚴重的錯誤(主機崩潰或其他原因),必須先釋放連接,然後再重新建立連接。同時RST還可以用於拒絕一個非法報文段或拒絕打開一個連接。   SYN:表示在建立連接時同步序號,如果SYN ...
繼續訪問
【TCP/IP詳解】TCP重置報文段及RST常見場景分析
本文簡單講述了TCP中產生RST的常見場景,指出了產生`RST`的三個條件分別是:1. 目的地為某埠的`SYN`到達,然而在該埠上並沒有正在監聽的伺服器;2. TCP想取消一個已有連接;3. TCP接收到一個根本不存在的連接上的分節。並給出了程序代碼及抓包結果......
繼續訪問
網路相關的面試題
網路相關的面試題 伺服器端不調用accept會發生什麼 不調用accept時,也能建立連接,即三次握手完成。但不能進行API的控制,即不能進行繼續通訊。以及建立好連接的隊列大大小為:backlog。從而在Unix系統伺服器中,若客戶端調用 connect() ,客戶端連接超時失敗。而在Linux系統中,若客戶端調用 connect()。TCP 的連接隊列滿後,Linux 伺服器不會拒絕連...
繼續訪問
網路編程面試題整理(四)
1:重傳機制 TCP每發送一個報文段,就設置一次定時器。只要定時器設置的重發時間到而還沒有收到確認,就要重發這一報文段。 TCP環境報文往返時間不定、有很大差別。 A、B在一個區域網絡,往返時延很小 A、C在一個互聯網內,往返時延很大 因此,A很難確定一個固定的、與B、C通信都適用的定時器時間。 TCP採用了一種自適應演算法。這種演算法記錄每一個報文段發出的時間,以及收到相應的確認報文段的時間。...
繼續訪問
TCP的狀態:SYN, FIN, ACK, PSH, RST, URG 簡介及 ACK確認機制
1、TCP的狀態FLAGS欄位狀態 在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG. 對於我們日常的分析有用的就是前面的五個欄位:它們的含義是: SYN表示建立連接, FIN表示關閉連接, ACK表示響應, PSH表示有 DATA數據傳輸, RST表示連接重置。 其中,ACK是可能與SYN,FIN等同時使用的,比如:SYN和ACK可能同時為1,它表示的就是建立連接之後的響應,如果只是單個的一個SYN,它表示的只是建立連接。T..
繼續訪問
TCP/IP模型之傳輸層(TCP/UDP協議)
網路層,數據鏈路層與物理層實現了網路中主機之間的數據通信,計算機網路的本質活動是實現分布在不同地理位置的主機之間的進程通信,以實現應用層的各種網路服務功能。1. 傳輸層的功能傳輸層的主要功能是實現分布式進程之間的通信。利用網路層提供的服務,在源主機的應用進程與目的主機的應用進程建立「端—端」連接。傳輸層之間傳輸的報文稱為「傳輸協議數據單元(TPDU)」,TPDU有效載荷稱為應用層的數據。2. 埠...
繼續訪問
TCP選項
TCP首部可以由多達40位元組的可選信息。選項用於把附加信息傳遞給終點,或用來填充對齊其他選項。我們將定義兩大類選項:1位元組選項和多位元組選項。第一類選項包括兩種選項:選項列表結束和誤操作。在大多數實現中,第二類選項包括了五種選項:最大報文段長度、窗口擴大因子、時間戳、允許SACK和SACK,見下圖。 選項結束(EOF) 選項結束(end of optio...
繼續訪問
3.TCP協議頭詳解(包含選項部分)
1.TCP協議頭格式 2.各欄位說明 3.選項部分詳解
繼續訪問

TCP報文段首部中「窗口」欄位
在TCP報文段的首部中有一個「窗口大小」的欄位,該欄位佔16bit=2byte。該欄位主要用於TCP滑動窗口進行流量控制,很多人喜歡把TCP的MSS和「窗口大小」欄位混淆,今天在這了做一個區分說明。 MSS是TCP報文段中數據部分的最大長度,如果上層交付下來的數據超過MSS就要對交付下來的數據進行分段。在TCP連接的第一次、第二次握手中會分別告知對方MSS,從而起到通信雙方協商MSS的效果。
繼續訪問
論TCP/IP協議的體系的結構及其各層協議
目錄 1.1 TCP/IP協議的歷史和發展過程 1.2 TCP/IP協議的體系結構模型 2.1 IP網際層的功能 2.2 IP地址及其轉換 2.2.1 IP地址 2.2.2 IP地址的轉換 2.2.3 子網技術 2.3 IP數據報的格式 2.4 Internet控制報文協議ICMP 3.1 TCP運輸層協議概述 3.2 埠及套接字 3.3
繼續訪問
計算機網路——傳輸層
一、傳輸層提供的服務1.傳輸層的功能(1)提高服務質量(2)多路復用(3)分段與重新組裝。2.傳輸層定址與埠硬體埠是不同硬體設備進行交互的介面,而軟體埠是應用層的各種協議進程與傳輸實體進行層間交互的一種地址。無連接服務與面向連接服務面向連接服務就是在數據交換之前,必須先建立連接,當數據交換結束後,則應該終止這個連接。在無連接服務的情況下,兩個實體之間的通信不需要先建立好一個連接,因此其下層的有
繼續訪問
熱門推薦 TCP序列號和確認號詳解
TCP序列號和確認號詳解在網路分析中,讀懂TCP序列號和確認號在的變化趨勢,可以幫助我們學習TCP協議以及排查通訊故障,如通過查看序列號和確認號可以確定數據傳輸是否亂序。但我在查閱了當前很多資料後發現,它們大多隻簡單介紹了TCP通訊的過程,並沒有對序列號和確認號進行詳細介紹,結合實例的講解就更沒有了。近段時間由於工作的原因,需要對TCP的序列號和確認號進行深入學習,下面便是我學習後的一些知識點總結
繼續訪問
TCP傳輸中序號與確認序號的交互
本實驗通過SSH遠程登錄伺服器,然後使用Wireshark抓包分析。開頭的三次握手已經省略。關於序號的交互過程,需要記住一點:TCP首部中的確認序號表示已成功收到位元組,但還不包含確認序號所指的位元組,希望下一次能收到確認序號所指的位元組。 當在遠程登錄軟體上鍵入命令時,客戶端便開始了數據的發送,TCP頭如下: 初始化序列號ISN = 1,這個序列號是客戶端對發送數據的一個標
繼續訪問
tcp保留欄位重置為rst=1則表示

D. 網路的數據包發送與接收不同步怎麼

傳輸控制協議(Transmission Control Protocol, TCP)

TCP協議主為了在主機間實現高可靠性的包交換傳輸協議。本文將描述協議標准和實現的一些方法。因為計算機網路在現代社會中已經是不可缺少的了,TCP協議主要在網路不可靠的時候完成通信,對軍方可能特別有用,但是對於政府和商用部門也適用。TCP是面向連接的端到端的可靠協議。它支持多種網路應用程序。TCP對下層服務沒有多少要求,它假定下層只能提供不可靠的數據報服務,它可以在多種硬體構成的網路上運行。下面的圖是TCP在層次式結構中的位置,它的下層是IP協議,TCP可以根據IP協議提供的服務傳送大小不定的數據,IP協議負責對數據進行分段,重組,在多種網路中傳送。

TCP的上面就是應用程序,下面是IP協議,上層介麵包括一系列類似於操作系統中斷的調用。對於上層應用程序來說,TCP應該能夠非同步傳送數據。下層介面我們假定為IP協議介面。為了在並不可靠的網路上實現面向連接的可靠的傳送數據,TCP必須解決可靠性,流量控制的問題,必須能夠為上層應用程序提供多個介面,同時為多個應用程序提供數據,同時TCP必須解決連接問題,這樣TCP才能稱得上是面向連接的,最後,TCP也必須能夠解決通信安全性的問題。

網路環境包括由網關(或其它設備)連接的網路,網路可以是區域網也可以是一些城域網或廣域網,但無論它們是什麼,它們必須是基於包交換的。主機上不同的協議有不同的埠號,一對進程通過這個埠號進行通信。這個通信不包括計算機內的I/O操作,只包括在網路上進行的操作。網路上的計算機被看作包傳送的源和目的結點。特別應該注意的是:計算機中的不同進程可能同時進行通信,這時它們會用埠號進行區別,不會把發向A進程的數據由B進程接收的。

進程為了傳送數據會調用TCP,將數據和相應的參數傳送給TCP,於是TCP會將數據傳送到目的TCP那裡,當然這是通過將TCP包打包在IP包內在網路上傳送達到的。接收方TCP在接收到數據後會通信上層應用程序,TCP會保證接收數據順序的正確性。雖然下層協議可能不會保證順序是正確的。這里需要說明的是網關在接收到這個包後,會將包解開,看看是不是已經到目的地了,如果沒有到,應該走什麼路由達到目的地,在決定後,網關會根據下一個網路內的協議情況再次將TCP包打包傳送,如果需要,還要把這個包再次分成幾段再傳送。這個落地檢查的過程是一個耗時的過程。從上面,我們可以看出TCP傳送的基本過程,當然具體過程可能要復雜得多。

在實現TCP的主機上,TCP可以被看成是一個模塊,和文件系統區別不大,TCP也可以調用一些操作系統的功能,TCP不直接和網路打交道,控制網路的任務由專門的設備驅動模塊完成。TCP只是調用IP介面,IP向TCP提供所有TCP需要的服務。通過下圖我們可以更清楚地看到TCP協議的結構。

上面已經說過了,TCP連接是可靠的,而且保證了傳送數據包的順序,保證順序是用一個序號來保證的。響應包內也包括一個序列號,表示接收方准備好這個序號的包。在TCP傳送一個數據包時,它同時把這個數據包放入重發隊列中,同時啟動記數器,如果收到了關於這個包的確認信息,將此包從隊列中刪除,如果計時超時則需要重新發送此包。請注意,從TCP返回的確認信息並不保證最終接收者接收到數據,這個責任由接收方負責。

每個用於傳送TCP的通道都有一個埠標記,因為這個標記是由每個TCP終端確定的,因此TCP可能不唯一,為了保證這個數值的唯一,要使用網路地址和埠號的組合達到唯一標識的目的,我們稱這個為了套接字(Socket),一個連接由連接兩端的套接字標識,本地的套接字可能和不同的外部套接字通信,這種通信是全雙工的。

通過向本地埠發送OPEN命令及外部套接字參數建立連接,TCP返回一個標記這個連接的名稱,以後如果用戶需要使用這個名稱標記這個連接。為了保存這個連接的信息,我們假設有一個稱為傳輸控制塊(Transmission Control Block,TCB)的東西來保存。OPEN命令還指定這個連接的建立是主動請求還是被動等待請求。下面我們要涉及具體的功能了,TCP段以internet數據報的形式傳送。IP包頭傳送不同的信息域,包括源地址和目的地址。TCP頭跟在internet包頭後面,提供了一些專用於TCP協議的信息。下圖是TCP包頭格式圖:

源埠:16位;

目的埠:16位

序列碼:32位,當SYN出現,序列碼實際上是初始序列碼(ISN),而第一個數據位元組是ISN+1;

確認碼:32位,如果設置了ACK控制位,這個值表示一個准備接收的包的序列碼;

數據偏移量:4位,指示何處數據開始;

保留:6位,這些位必須是0;

控制位:6位;

窗口:16位;

校驗位:16位;

優先指針:16位,指向後面是優先數據的位元組;

選項:長度不定;但長度必須以位元組記;選項的具體內容我們結合具體命令來看;

填充:不定長,填充的內容必須為0,它是為了保證包頭的結合和數據的開始處偏移量能夠被32整除;

我們前面已經說過有一個TCB的東西了,TCB里有存儲了包括發送方,接收方的套接字,用戶的發送和接收的緩沖區指針等變數。除了這些還有一些變數和發送接收序列號有關:

發送序列變數

SND.UNA - 發送未確認

SND.NXT - 發送下一個

SND.WND - 發送窗口

SND.UP - 發送優先指針

SND.WL1 - 用於最後窗口更新的段序列號

SND.WL2 - 用於最後窗口更新的段確認號

ISS - 初始發送序列號

接收序列號

RCV.NXT - 接收下一個

RCV.WND - 接收下一個

RCV.UP - 接收優先指針

IRS - 初始接收序列號

下圖會幫助您了解發送序列變數間的關系:

當前段變數

SEG.SEQ - 段序列號

SEG.ACK - 段確認標記

SEG.LEN - 段長

SEG.WND - 段窗口

SEG.UP - 段緊急指針

SEG.PRC - 段優先順序

連接進程是通過一系列狀態表示的,這些狀態有:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和 CLOSED。CLOSED表示沒有連接,各個狀態的意義如下:

LISTEN - 偵聽來自遠方TCP埠的連接請求;

SYN-SENT - 在發送連接請求後等待匹配的連接請求;

SYN-RECEIVED - 在收到和發送一個連接請求後等待對連接請求的確認;

ESTABLISHED - 代表一個打開的連接,數據可以傳送給用戶;

FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;

FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;

CLOSE-WAIT - 等待從本地用戶發來的連接中斷請求;

CLOSING - 等待遠程TCP對連接中斷的確認;

LAST-ACK - 等待原來發向遠程TCP的連接中斷請求的確認;

TIME-WAIT - 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;

CLOSED - 沒有任何連接狀態;

TCP連接過程是狀態的轉換,促使發生狀態轉換的是用戶調用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;傳送過來的數據段,特別那些包括以下標記的數據段SYN,ACK,RST和FIN;還有超時,上面所說的都會時TCP狀態發生變化。

下面的圖表示了TCP狀態的轉換,但這圖中沒有包括錯誤的情況和錯誤處理,不要把這幅圖看成是總說明了。

3.3. 序列號

請注意,我們在TCP連接中發送的位元組都有一個序列號。因為編了號,所以可以確認它們的收到。對序列號的確認是累積性的,也就是說,如果用戶收到對X的確認信息,這表示在X以前的數據(不包括X)都收到了。在每個段中位元組是這樣安排的:第一個位元組在包頭後面,按這個順序排列。我們需要認記實際的序列空間是有限的,雖然很大,但是還是有限的,它的范圍是0到2的32次方減1。我想熟悉編程的一定知道為什麼要在計算兩個段是不是相繼的時候要使用2的32次方為模了。TCP必須進行的序列號比較操作種類包括以下幾種:

(a) 決定一些發送了的但未確認的序列號;

(b) 決定所有的序列號都已經收到了;

(c) 決定下一個段中應該包括的序列號。

對於發送的數據TCP要接收確認,處理確認時必須進行下面的比較操作:

SND.UNA = 最老的確認了的序列號;

SND.NXT = 下一個要發送的序列號;

SEG.ACK = 接收TCP的確認,接收TCP期待的下一個序列號;

SEG.SEQ = 一個數據段的第一個序列號;

SEG.LEN = 數據段中包括的位元組數;

SEG.SEQ+SEG.LEN-1 = 數據段的最後一個序列號。

請注意下面的關系:

SND.UNA < SEG.ACK =< SND.NXT

如果一個數據段的序列號小於等於確認號的值,那麼整個數據段就被確認了。而在接收數據時下面的比較操作是必須的:

RCV.NXT = 期待的序列號和接收窗口的最低沿;

RCV.NXT+RCV.WND-1 = 最後一個序列號和接收窗口的最高沿;

SEG.SEQ = 接收到的第一個序列號;

SEG.SEQ+SEG.LEN-1 = 接收到的最後一個序列號;

上面幾個量有如下關系:

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND 或 RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

測試的第一部分是檢查數據段的開始部分是否在接收窗口中,第二部分是檢查數據段的結束部分是否也在接收窗口內;上面兩個檢查通過任何一個就說明它包括窗口要求的數據。實際中的情況會更復雜一些,因為有零窗口和零數據段長,因此我們有下面四種情況:

段長度
接收窗口
測試

0
0
SEG.SEQ = RCV.NXT

0
>0
RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND

>0
0
不可接受

>0
>0
RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND或RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

請注意接收窗口的大小可以為零,在窗口為零時它只用來接收ACK信息,因此對於一個TCP來說,它可以使用零大小窗口在發送數據的同時接收數據。即使接收窗口的大小為零,TCP必須處理所有接收到信息的RST和URG域。

我們也應用計數的方式保護了一些特定的控制信息,這是通過隱式地使用一些控制標記使數據段能夠可靠地重新發送(或確認)為達到的。控制信息並不在段數據空間中傳送,因此,我們必須採用隱式指定序列號進行控制。SYN和FIN是需要保護的控制量,這兩個控制量也只在連接打開和關閉時使用。SYN被認為是在第一個實際數據之間的數據,而FIN是最後一個實際數據之後的數據。段長度(SEG.LEN)包括數據和序列號空間,如果出現了SYN,那麼SEG.SEQ是SYN的序列號。

初始序列號選擇

協議對於特定連接被重復使用沒有什麼限制。連接是由一對套接字定義的。新的連接實例被定義為連接的另一次恢復,這就帶來了問題:TCP如果確定多個數據段是從以前連接的另一次恢復中取得的呢?這個問題在連接迅速打開和關閉,或因為內存原因被關閉然後又迅速建立後顯示特別突出。

為了避免混亂,用戶必須避免因此恢復使用某一連接,而使序列號發生混亂。我們必須保證序列號的正確性,即使TCP失敗,根本不知道以前的序列號是什麼的情況下也要保證序列號的正確性。當新的連接被創建時,產生一個新的初始序列號(ISN)產生子,它用來選擇一個新的32位ISN。產生子和32位時鍾的低度位位元組相關,低位位元組的刷新頻率大概是4微秒,因此ISN的循環時間大概是4.55小時。因此我們把網路包的最長生存時間(MSL)小於4.55小時,因此我們可以認為ISN是唯一的。對於每個連接都有發送序列號和接收序列號,初始發送序列號(ISS)由發送TCP選擇,而初始接收序列號是在連接建立過程中產生的。

對於將要連接或初始化的連接,兩個TCP必須和對方的初始序列號同步。這通過交換一個控制位SYN和初始序列號完成。我們把帶有SYN的數據段稱為"SYNs"。同步的獲得過程這里就不重復了,每方必須發送自己的序列號並返回對對方序列號的確認。

1) A --> B SYN 本方序列號是X

2) A <-- B ACK 本方序列號被確認

3) A <-- B SYN 對方序列號是Y

4) A --> B ACK 確認對方序列號

上面的第2步和第3步可以合並,這時可以成為3階段,所以我們可以稱它為三消息握手。這個過程是必須的,因為序列號不和全局時鍾關聯,TCP也可以有不同的機制選擇ISN。接收到第一個SYN的接收方不可能知道這個數據段是不是被延時,除非它記住了在連接上使用的最近的序列號(這通常是不可能的),因此它必須要求發送者確認。

為了保證TCP獲得的確認是剛才發送的段產生的,而不是仍然在網路中的老數據段產生的,因此TCP必須在MSL時間之內保持沉默。在本文中,我們假設MSL=2小時,這是出於工程的需要,如果用戶覺得可以,他可以改變MSL。請注意如果TCP重新初始化,而內存中的序列號正在使用,不需要等待,但必須確認使用的序列號比當前使用的要大。

如果一台主機在未保留任何序列號的情況下失敗,那麼它應該在MSL時間之內不發出任何數據段。下面將會這一情況進行說明。TCP的實現可以不遵守這個規定,但是這會造成老數據被當成新數據接收,而新數據被當成老數據拒絕的情況。

每當數據段形成並進入輸出隊列,TCP會為它指定序列空間中的一個值。TCP中多復本檢測和序列演算法都依賴於這個地址空間,在對方發送或接收之前不會超過2的32次方個包存在於輸出隊列中。所有多餘的數據段都會被刪除。如果沒有這個規定,會出現多個數據段被指定同一個序列號的情況,會造成混亂。數據段中序列號的多少和數據段中的位元組數一樣多。

在通常情況下,TCP保留下一個要發送的序列號和還未確認的最老的序列號,不要在沒有確認的時候就再次使用,這樣會有些風險,也正是因為這樣的目的,所以序列空間很大。對於2M的網路,要4.5小時來耗盡序列空間,因為一個數據段可能的最大生存時間也不過十幾分之一秒,這就留下了足夠的空間;而在100M的網路上需要5.4分鍾,雖然少了點,但也可以了。

如果在實現TCP時沒有為保存序列號留下空間,那清除多餘的包可能就不能實現了,因此推薦這種類型的TCP實現最好在失敗後等待MSL時間,這樣保證多餘的包被刪除。這種情況有時候也可能會出現在保留序列號的TCP實現中。如果TCP在選擇一個另一個TCP連接正在使用的序列號時,這台主機突然失敗了,這就產生了問題。這個問題的實質在於主機不知道它失敗了多久,也不知道多餘的復本是不是還在網路中。

處理這種問題的方法是等待MSL時間,如果不這樣就要冒著對方錯誤接收數據的危險,要等待的時間也就稱為「沉默時間」。實現者可以讓用戶選擇是不是等待,但是無論用戶如何也不見得非要等待MSL時間。

3.4. 建立一個連接

建立連接應用的是三消息握手。如果雙方同時都發送SYN也沒有關系,雙方會發現這個SYN中沒有確認,於是就知道了這種情況,通常來說,應該發送一個"reset"段來解決這種情況。三消息握手減少了連接失敗的可能性。下面就是一個例子,在尖括弧是的就是數據段中的內容和標記。其它的就不多說了。

在第2行,TCP A發送SYN初始化序列號,表示它要使用序列號100;第3行中,TCP B給出確認,並且期待著A的帶有序列號101的數據段;第4行,TCP A給出確認,而在第5行,它也給出確認,並發送了一些數據,注意第4行的序列號與第5號的一樣,因為ACK信息不佔用序列號空間內的序列號。同時產生請求的情況如下圖所示,只復雜一點。

使用三消息握手的主要原因是為了防止使用過期的數據段。為了這個目的,必須引入新的控制消息,RESET。如果接收TCP處理非同步狀態,在接收到RESET後返回到LISTEN狀態。如果TCP處理下面幾種狀態ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT時,放棄連接並通過用戶。我們下面就詳細說明後一種情況。

通過上面的例子,我們可以看出TCP連接是如何從過期數據段的干擾下恢復的。請注意第4行和第5行中的RST(RESET信號)。

半開連接和其它非正常狀態

如果一方在未通過另一方的情況下關閉連接,或雙方雖然失敗而不同步的情況我們稱為半開連接狀態。在一方試圖發送數據時連接會自動RESET。然而這種情況畢竟屬於不正常情況。應該做出相應的處理。如果A處的連接已經關閉,B處並不知道。當B希望發送數據到A時,就會收到RESET信號,表示這個TCP連接有誤,要中止當前連接。

假設A和B兩個進程相互通信的時候A的TCP發生了失敗,A依靠操作系統支持TCP的存在,通常這種情況下會有恢復機制起作用,當TCP重新恢復的時候,A可能希望從恢復點開始工作。這樣A可能會試圖OPEN連接,然後在這個它認為還是打開的連接上傳送數據,這時A會從本地(也就是A的)TCP上獲得錯誤消息「未打開連接」。A的TCP將發送包括SYN的數據段。下面的例子將顯示這一過程:

上面這個例子中,A方收到的信息並沒有確認任何東西,這時候A發現出了問題,於是發送了RST控制信息。另一種情況是發生在A失敗,而B方仍然試圖發送數據時,下面的例子可以表示這種情況,請注意第2行中A對B發送來的信息不知所雲。

在下面的例子中,A方和B方進行的被動連接,它們都在等待SYN信息。過期的包傳送到B方使B回應了,而收到回應的A卻發現不對頭,傳送RST控制信息,B方返回被動LISTEN狀態。

現實中的情況太多了,我們列舉一些產生RST控制信息的規則如下:通常情況下,RST在收到的信息不是期待的信息時產生。如果在不能確定時不要輕易發送RST控制信息。下面有三類情況:

如果連接已經不存在,而發送來的消息又不是RST,那麼要返回RST。如果想拒絕對不存在的連接進行SYN,可以使用這種辦法。如果到達的信息有一個ACK域,返回的RST信息可以從ACK域中取得序列號,如果沒有這個域,就把RST的序列號設置為0,ACK域被設備為序列號和到達段長度之和。連接仍然處於CLOSE狀態。

如果連接處於非同步狀態(LISTEN,SYN-SENT,SYN-RECEIVED),而且收到的確認是對未發出包的確認或是接收到數據段的安全級別與不能連接要求的相一一致時,就發送RST。如果SYN未被確認時,而且收到的數據段的優先順序比要求的優先順序要高,那麼要麼提高本地優先順序(得事先徵得用戶和系統的許可)要麼發送RST;如果接收數據段的優先順序比要求的優先順序低,就算是匹配了,當然如果對方發現優先順序不對提高了優先順序,在下一個包中提高了優先順序,這就不算是匹配了。如果連接已經進入SYN,那麼接收到數據段的優先順序必須和本地優先順序一樣,否則發送RST。如果到達的信息有一個ACK域,返回的RST信息可以從ACK域中取得序列號,如果沒有這個域,就把RST的序列號設置為0,ACK域被設備為序列號和到達段長度之和。連接仍然處於與原來相同的狀態。

如果連接處於同步狀態(ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT),任何超出接收窗口的序列號的數據段都產生如下結果:發出一個空確認數據段,此段中包括當前發送序列號,另外還包括一個確認指出希望接收的下一個數據段的序列號,連接仍然保存在原來的狀態。如果因為安全級,優先順序之類的問題,那就發送RST信號然後進入CLOSED狀態。

E. 計算機網路原理問題 請解答第二問

2017年12月07日星期四,

問題:

請注意看上圖,1分組中的第二行(tcp報頭)中第二個4位元組的值就是Sequence number(順序號碼),它明確的告訴目標主機(d3444750)需要接收Sequence number(順序號碼)為846b741c5的數據包,然後2分組中的源主機(d3444750)對Sequence number(順序號碼)846b741c5的數據包進行確認,並按照tcp規則將Sequence number(順序號碼)加一後寫入第二行的第三個4位元組中即Acknowledge number(確認號碼),同時,向自己的目標主機(c0a80008)發送Sequence number(順序號碼)為(e0599fef)的數據包,最後,3分組中的第二行中的第三個4位元組對剛才從主機(d3444750)接收的(e0599fef)的數據包進行了確認【也是Acknowledge number(確認號碼)+1】,又因為接到了主機(d3444750)對846b741c5的數據包的確認,因此將同時發送Sequence number(順序號碼)為846b741c6的數據包給目標主機(d3444750)。

參考書內容:TCP(Transmission Control Protocol)傳輸控制協議

TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,採用三次握手確認建立一個連接:

位碼即tcp標志位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)

第一次握手:主機A發送位碼為syn=1,隨機產生seq number=1234567的數據包到主機B,主機B由SYN=1知道,A要求建立聯機;

第二次握手:主機B收到請求後,要確認聯機信息,向A發送ack number=1234568(主機A的seq number+1),syn=1,ack=1,隨機產生seq number=7654321的包;

第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及ack(對A的發送來的請求,B的確認,)是否為1,若正確,主機A會再發送ack number=7654322(主機B的seq number+1),ack=1,主機B收到後確認seq number值(7654322)並且ack=1則連接建立成功。

擴展閱讀材料:

TCP傳輸連接中的SYN、ACK、SEQ、AN分別是什麼意思?他們所帶的數字又是代表什麼?

SYn=1.ACK=0,SEQ=200
SYN=1,ACK=1.SEQ=4800,AN=201
SYN=1,ACK=1.SEQ=201,AN=4801

SYN,ACK是標志位
SEQ,AN是數據包序號
SYN=1, ACK=0, SEQ=200 的意思是:發送端發出一個SYN請求(SYn=1),同時發送端發送了一個序號為SEQ=200的數據包,
SYN=1, ACK=1, SEQ=4800, AN=201 的意思是:接收端的確認信息,收到了序號為SEQ=200的數據包,同時接收端也發送了一個初始數據包序號為SEQ=4800的數據包,並等待發送端確認,

SYN=1,ACK=1.SEQ=201,AN=4801的意思是:首先,發送端通過接收端送回的AN=201,知道接收端已成功的接收了序號為SEQ=200的數據包,接下來發送端要發送序號為SEQ=201的數據包,並且同時告知接收端剛才送來的序號為SEQ=4800的包已收到,

閱讀全文

與計算機網路rst1相關的資料

熱點內容
網路培訓認證哪個好 瀏覽:5
網路連接異常怎樣聯系客服 瀏覽:942
怎麼設置網路共享文件 瀏覽:142
升級無線網路後怎麼樣 瀏覽:52
網路適配器打開wifi 瀏覽:285
手機無法自動連接網路 瀏覽:133
計算機網路運送消息的實體 瀏覽:149
手機網路關了還能定位到大數據嗎 瀏覽:851
網路ping測試手機 瀏覽:881
為什麼網路會斷斷續續連接 瀏覽:639
計算機發展與計算機網路發展感想 瀏覽:817
中國軍隊網路安全 瀏覽:440
安全策略阻止了網路共享 瀏覽:14
網路營銷是哪個專業 瀏覽:327
有哪些軟體可以查看網路信道 瀏覽:16
終端查看網路密碼 瀏覽:265
網路類型設置電腦 瀏覽:691
安卓平板接入藍牙共享網路 瀏覽:866
你使用網路時有哪些困惑 瀏覽:758
網路訂餐平台有哪些 瀏覽:52

友情鏈接