導航:首頁 > 數據處理 > 傳輸層如何保證包數據不變

傳輸層如何保證包數據不變

發布時間:2023-02-14 06:42:21

① 網路協議 | TCP和UDP可靠性傳輸

前文:
網路協議
一、協議

1、HTTP協議:基於TCP連接的,主要解決如何包裝數據,對應於應用層;
2、TCP/UDP協議:主要解決數據如何在網路中傳輸,對應於傳輸層;
3、IP協議:對應於網路層;

· 在傳輸數據時,可以只使用傳輸層(TCP/IP),但是那樣的話,由於沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用應用層協議,應用層協議很多,有HTTP、FTP、TELNET等等,也可以自己定義應用層協議。
· web使用HTTP作傳輸層協議,以封裝HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發送到網路上。
· TCP/IP:傳輸層協議,主要解決數據如何在網路中傳輸。

TCP(TransmissionControl Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議。

UDP是User Datagram Protocol,一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。可靠性由上層應用實現,所以要實現udp可靠性傳輸,必須通過應用層來實現和控制。

確認機制、重傳機制、滑動窗口。

1.應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段(segment)。

2.當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。當TCP收到發自TCP連接另一端的數據,它將發送一個確認。TCP有延遲確認的功能,在此功能沒有打開,則是立即確認。功能打開,則由定時器觸發確認時間點。

3.TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。

4.既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。

5.既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。[2]

6.TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。

TCP協議用於控制數據段是否需要重傳的依據是設立重發定時器。在發送一個數據段的同時啟動一個重傳,如果在重傳超時前收到確認(Acknowlegement)就關閉該重傳,如果重傳超時前沒有收到確認,則重傳該數據段。在選擇重發時間的過程中,TCP必須具有自適應性。它需要根據互聯網當時的通信情況,給出合適的重發時間。

這種重傳策略的關鍵是對定時器初值的設定。採用較多的 演算法 是Jacobson於1988年提出的一種不斷調整超時時間間隔的動態演算法。其工作原理是:對每條連接TCP都保持一個變數RTT(Round Trip Time),用於存放當前到目的端往返所需要時間最接近的估計值。當發送一個數據段時,同時啟動連接的定時器,如果在定時器超時前確認到達,則記錄所需要的時間(M),並修正[2] RTT的值,如果定時器超時前沒有收到確認,則將RTT的值增加1倍。通過測量一系列的RTT(往返時間)值,TCP協議可以估算數據包重發前需要等待的時間。在估計該連接所需的當前延遲時通常利用一些統計學的原理和演算法(如Karn演算法),從而得到TCP重發之前需要等待的時間值。

TCP的一項功能就是確保每個數據段都能到達目的地。位於目的主機的TCP服務對接受到的數據進行確認,並向源應用程序發送確認信息。使用數據報頭序列號以及確認號來確認已收到包含在數據段的相關的數據位元組。

TCP在發回源設備的數據段中使用確認號,指示接收設備期待接收的下一位元組。這個過程稱為期待確認。

源主機在收到確認消息之前可以傳輸的數據的大小稱為窗口大小。用於管理丟失數據和流量控制。

UDP它不屬於連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。

傳輸層無法保證數據的可靠傳輸,只能通過應用層來實現了。實現的方式可以參照tcp可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到了應用層。實現確認機制、重傳機制、窗口確認機制。
如果你不利用 Linux 協議棧以及上層socket機制,自己通過抓包和發包的方式去實現可靠性傳輸,那麼必須實現如下功能:

發送:包的分片、包確認、包的重發

接收:包的調序、包的序號確認

目前有如下開源程序利用udp實現了可靠的數據傳輸。分別為RUDP、RTP、UDT。

RUDP 提供一組數據服務質量增強機制,如擁塞控制的改進、重發機制及淡化伺服器演算法等,從而在包丟失和網路擁塞的情況下, RTP 客戶機(實時位置)面前呈現的就是一個高質量的 RTP 流。在不幹擾協議的實時特性的同時,可靠 UDP 的擁塞控制機制允許 TCP 方式下的流控制行為。

實時傳輸協議(RTP)為數據提供了具有實時特徵的端對端傳送服務,如在組播或單播網路服務下的互動式視頻音頻或模擬數據。應用程序通常在 UDP 上運行 RTP 以便使用其多路結點和校驗服務;這兩種協議都提供了傳輸層協議的功能。但是 RTP 可以與其它適合的底層網路或傳輸協議一起使用。如果底層網路提供組播方式,那麼 RTP 可以使用該組播表傳輸數據到多個目的地。

RTP 本身並沒有提供按時發送機制或其它服務質量(QoS)保證,它依賴於底層服務去實現這一過程。 RTP 並不保證傳送或防止無序傳送,也不確定底層網路的可靠性。 RTP 實行有序傳送, RTP 中的序列號允許接收方重組發送方的包序列,同時序列號也能用於決定適當的包位置,例如:在視頻解碼中,就不需要順序解碼。

基於UDP的數據傳輸協議(UDP-basedData Transfer Protocol,簡稱UDT)是一種互聯網數據傳輸協議。UDT的主要目的是支持高速廣域網上的海量數據傳輸,而互聯網上的標准數據傳輸協議TCP在高帶寬長距離網路上性能很差。顧名思義,UDT建於UDP之上,並引入新的擁塞控制和數據可靠性控制機制。UDT是面向連接的雙向的應用層協議。它同時支持可靠的數據流傳輸和部分可靠的數據報傳輸。由於UDT完全在UDP上實現,它也可以應用在除了高速數據傳輸之外的其它應用領域,例如點到點技術(P2P),防火牆穿透,多媒體數據傳輸等等。

本文來自地址: https://blog.csdn.net/gettogetto/article/details/76736365

② 網路基礎-傳輸層, 網路層數據鏈路層

同軸電纜: 半雙工通訊;
集線器: 類似同軸電纜, 半雙工通訊;容易沖突;
網橋: 兩個介面, 通過自學習記錄每個介面側的 mac 地址;從而起到隔絕沖突域的作用;
交換機: 相當於介面更多的網橋, 全雙工通訊;
路由器: 可以在不同網段之間發送數據, 隔絕廣播域;

IP地址的組成:
IP地址有兩部分組成: 網路標識(網路ID, 網段), 主機標識( 主機ID);

如何避免浪費IP資源?

信道:信息傳輸的通道, 一條傳輸介質上(比如網線), 可以有多條信道;
單工通信: 信號只能往一個方向傳, 任何時候不能改變信號的方向;

半雙工通信:信號可以雙向傳播, 但是必須交替進行, 同一時間只能往一個方向傳播;

全雙工通信:信號可以同時雙向傳播;

數據幀:數據鏈路層

如何確保一個數據幀的完整性:
幀的尾部有FCS標識符是根據幀首和幀尾計算得來的, 在獲得一個幀數據後幀首幀尾根據計算計算如果值等於FCS則數據幀完整, 去掉幀首幀尾即可獲得中間的數據buffer;
數據鏈路層的數據(MTU)大小為不超過1500個位元組,因此我們可以推斷出傳輸層的數據段最大為不超過1460位元組;(網路層的首部最小20個位元組, 傳輸層首部最小20個位元組, 因此傳輸層的數據段最大為1460);

ping 的幾個用法:

通過tracert, pathping ip地址的方式, 可以查看途徑的路由器;

TTL : Time To Live(生存時間) 每經過一個路由器值就會減1; 為0時數據包不再傳輸;

埠:
UDP首部中埠是佔用2個位元組(因此其取值范圍是0-65535);
防火牆可以可以設置開啟/關閉某些埠提升安全性;
常用命令:

傳輸層的兩個協議
TCP: 傳輸控制協議;
UDP: 用戶數據報協議;

TCP的數據格式:

TCP標志位的作用:

如果數據超時或者收到三次確認都會重新發送保證數據完整性;
主要是通過ARQ(自動重傳技術-超時重發)+滑動窗口協議實現(例如一次可以接收4個數據包, 就是一個緩沖區的設置);
另外通過SACK(選擇性確認)來告訴發送方哪些數據已經接收到哪些數據丟失, 這樣TCP就只發送丟失的部分即可;

如果接收方的數據緩沖區已經滿了, 而發送方還在不停的發數據, 則需要進行流量控制;如果不進行控制則接收方只能將大量的數據包進行丟棄, 造成的大量的網路資源浪費;

什麼是流量控制?
讓發送方的發送速度不要太快, 讓接收方有足夠的時間和空間來處理和接受數據;注意這個概念是指點對點之間;

原理:
通過確認報文中的窗口欄位來控制發送方的發送速率;
發送方的發送窗口大小不能超過接收方的窗口大小;
當發送方收到接收方的窗口為0時則不再發數據;

特殊情況:
剛開始接收方發送了0窗口報文給發送方, 然後發送方停止了發送數據;
後面接收方有空間了, 發送了非0窗口報文給發送方結果報文丟失了;
則接收方和發送方陷入循環;
解決方案: 發送方收到0窗口報文的時候停止發送數據, 同時開啟一個定時器, 隔一段時間發送測試報文取詢問接收方窗口的大小, 如果仍然收到0窗口報文則重新刷新啟動定 時器;

鏈路的吞吐量在過載的時候會導致擁塞;直觀的理解為, 一條路可以同時供100輛車100km/h通過, 但是當有200輛車的時候估計只能以50km/h通過, 當有300輛車時估計會堵的動不了;
擁塞控制是指避免過多的數據注入到網路中, 避免網路中的路由器或者鏈路過載;擁塞控制是一個全局性的過程, 涉及到所有的主機, 路由器; 是大家共同努力的結果; 注意區分流量控制是點對點之間的;

幾個縮寫:
MSS: 每個段最大的數據部分大小, 在建立鏈接是確定;
swnd: 擁塞窗口;
rwnd:接收窗口;
swnd:發送窗口; swnd=min(swnd, rwnd);

擁塞控制思路:
慢開始(慢啟動)-擁塞避免- 快速重傳-快速恢復;

a. 慢開始 :

b. 擁塞避免 :

c. 快重傳 :

d. 快恢復 :

e. 用圖片表示擁塞控制

狀態解讀:
Closed: Client處於關閉狀態;
Listen: Server處於監聽狀態, 等待Client鏈接;
SYN-RCVD: 表示Server收到SYN報文, 當收到Client的ack報文後進入ESTABLished狀態;
SYN-SENT: 表示Client已經發出SYN-SENT報文, 等待Server的第二次握手;
ESTABlished: 已經建立鏈接;

TCP建立鏈接前兩次握手的特點:

ACK和ack的區別:
大寫的ACK(Acknowledgement)是標識位, 可以通過它標識包的性質, [ACK] or [SYC] or [FIN] .
小寫的ack(Acknowledgement Number), 是確認號。 即收到seq=x 的數據包後,回復 ack=x+1 的確認。

狀態解讀
FIN-WAIT1: 表示向主動斷開, 向對方發送了FIN報文後進入FIN-WAIT1狀態;
CLOSE-WAIT: 表示等待關閉, 當對方發送FIN報文給自己,會回應一個ACK報文, 同時進入CLOSE-WAIT狀態, 此狀態下如果仍然有數據發送給對方則會繼續發送, 如果沒有數據發給對方,則發送FIN給對方;
FIN-WAIT2: 主動方收到對方的ACK報文後就會處於FIN-WAIT2狀態然後等待對方的FIN報文;
LASK-ACK: 被動一方在發送FIN報文後處於LAST-ACK狀態, 收到主動方的ACK報文後就進入CLOSED狀態;
TIME-WAIT: 主動方收到對方的FIN報文後回復ACK報文給對方並進入TIME-WAIT狀態, 等待2MSL時間後進入CLOSED狀態;
如果在FIN-WAIT1狀態下同時收到對方的FIN和ACK報文則直接進入TIME-WAIT狀態, 無需經過FIN-WAIT2狀態;
CLOSED: 關閉狀態;
CLOSING: 一種比較罕見的狀態, 表示發出FIN報文後沒有收到對方的ACK報文反而也收到了FIN報文,即雙方幾乎同時發送FIN報文時就會進入CLOSING狀態;表示雙方都在進行關閉鏈接;

細節補充

為了提高重傳的性能; 可靠性傳輸是在傳輸層進行控制的;

這個取決於系統的設置, 例如有些系統在重新傳輸5次後仍然不能成功, 就會發送reset報文( RST )斷開TCP鏈接;

三次握手的目的: 防止伺服器端一直等待, 浪費資源;
如果改成兩次握手會出現的情況: 假如client客戶端第一次發送的請求報文段, 因為網路延遲的原因, 在釋放鏈接後才到達伺服器端, 本來這是一個應該失效的請求鏈接, 但是server端收到這個請求後會誤認為這是client發送的新的鏈接請求, 於是sever端就會再次給client發送確認報文然後建立鏈接, 等待client發送數據過來, 這樣的話, server端就會一直處於鏈接狀態等待;

採用三次握手的方法可以防止上述情況發生:例如上述情況, client沒有向server發出確認, server端收不到確認就知道client不是建立鏈接;

另一種解析的思路 : client和server建立鏈接是為了相互交換數據, 所以得確保自己和對方的數據收發功能都處於正常狀態;
第一次握手: server端可以確認自己的接收功能和client端的發送功能正常;
第二次握手: client端可以確認自己的發送和接收功能都是正常, 並且server端的接收和發送功能都是正常的;
第三次握手: server端確認自己的發送功能和client的接收功能正常;;

第三次握手的時候server處於SYB-RCVD狀態, 如果等不到client端的ACK, server端會再次發送ACK+SYN包, 如果多次發送後仍然等不到client的ACK包, 則server端發送RST包, 強制斷開鏈接;

有必要, 而且不能省去, 原因如下: 假如Client在發送ACK報文後立即進入了斷開狀態, 然後因為網路狀態Server端沒有收到這個ACK報文則會重發FIN報文給Client, 則可能會出現的情況如下:
a. Client端沒有反應, Server重復嘗試發送FIN給Client, 浪費資源;
b. Client剛好有個新的應用分配了同一個埠, 新應用本是想建立鏈接, 結果收到FIN報文後就會進入斷開鏈接操作;

e

③ 網路協議 tcp協議和https協議 保證數據的安全 疑惑

TCP安全是相對UDP的,兩者同屬於傳輸層,安全的重點是信息的接受是否完整不丟包。因為TCP在傳輸層檢查自己發的包,對端收到沒有,而UDP傳輸層只管發,收沒收到不管。https是屬於應用層,安全的重點是信息的內容傳輸泄不泄密,相比http明文傳輸,https是安全的

④ 傳輸層的主要任務是完成

進程通信服務。

傳輸層是整個網路體系結構中的關鍵層次之一,主要負責向兩個主機中進程之間的通信提供服務。由於一個主機同時運行多個進程,因此運輸層具有復用和分用功能。

傳輸層在終端用戶之間提供透明的數據傳輸,向上層提供可靠的數據傳輸服務。傳輸層在給定的鏈路上通過流量控制、分段/重組和差錯控制來保證數據傳輸的可靠性。傳輸層的一些協議是面向鏈接的,這就意味著傳輸層能保持對分段的跟蹤,並且重傳那些失敗的分段。

重要性

傳輸層是整個協議層次結構的核心,是唯一負責總體數據傳輸和控制的一層。在OSI七層模型中傳輸層是負責數據通信的最高層,又是面向網路通信的低三層和面向信息處理的高三層之間的中間層。

因為網路層不一定保證服務的可靠,而用戶也不能直接對通信子網加以控制,因此在網路層之上,加一層即傳輸層以改善傳輸質量。

⑤ 簡述TCP/IP四層模型和OSL七層模型的概念,每一層的作用,這兩個模型的區別是什麼

1、TCP/IP通訊協議:

提供點對點的鏈接機制,將數據應該如何封裝、定址、傳輸、路由以及在目的地如何接收,都加以標准化。

它將軟體通信過程抽象化為四個抽象層,採取協議堆棧的方式,分別實現出不同通信協議。

協議族下的各種協議,依其功能不同,被分別歸屬到這四個層次結構之中,常被視為是簡化的七層OSI模型。

2、TCP/IP的四層模型:

應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網路遠程訪問協議(Telnet)等。

傳輸層:提供了節點間的數據傳送服務,如傳輸控制協議、用戶數據報協議等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,負責傳送數據,並且確定數據已被送達並接收。

互連網路層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。

網路介面層:對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、Serial Line等)來傳送數據。

3、OSI模型:

國際標准化組織(ISO)和國際電報電話咨詢委員會(CCITT)聯合制定的開放系統互連參考模型,為開放式互連信息系統提供了一種功能結構的框架。

4、OSL七層模型的功能:

物理層:物理層規定了激活、維持、關閉通信端點之間的機械特性、電氣特性、功能特性以及過程特性。。在這一層,數據的單位稱為比特(bit)。

數據鏈路層:數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:物理地址定址、數據的成幀、流量控制、數據的檢錯、重發等。在這一層,數據的單位稱為幀(frame)。

網路層:網路層負責對子網間的數據包進行路由選擇。網路層還可以實現擁塞控制、網際互連等功能。在這一層,數據的單位稱為數據包(packet)。

傳輸層:傳輸層是第一個端到端,即主機到主機的層次。傳輸層負責將上層數據分段並提供端到端的、可靠的或不可靠的傳輸。此外,傳輸層還要處理端到端的差錯控制和流量控制問題。

會話層:會話層管理主機之間的會話進程,即負責建立、管理、終止進程之間的會話。會話層還利用在數據中插入校驗點來實現數據的同步。

表示層:表示層對上層數據或信息進行變換以保證一個主機應用層信息可以被另一個主機的應用程序理解。表示層的數據轉換包括數據的加密、壓縮、格式轉換等。

應用層:應用層為操作系統或網路應用程序提供訪問網路服務的介面。


5、兩個模型的區別:

功能分層不同:

TCP/IP協議中的應用層處理開放式系統互聯模型中的第五層、第六層和第七層的功能。

傳輸限制不同:

TCP/IP協議中的傳輸層並不能總是保證在傳輸層可靠地傳輸數據包,而開放式系統互聯模型可以做到。

提供選擇不同:

TCP/IP協議還提供一項名為UDP(用戶數據報協議)的選擇。UDP不能保證可靠的數據包傳輸。

(5)傳輸層如何保證包數據不變擴展閱讀

TCP/IP協議並不完全符合OSI的七層參考模型,OSI(Open System Interconnect)是傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型。

該模型的目的是使各種硬體在相同的層次上相互通信。

而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。

由於ARPANET的設計者注重的是網路互聯,允許通信子網(網路介面層)採用已有的或是將來有的各種協議,所以這個層次中沒有提供專門的協議。

參考資料

TCP/IP協議-網路

OSI-網路

⑥ 傳輸層協議(TCP, UDP)

傳輸層定義了主機應用程序之間端到端的連通性。傳輸層中最為常見的兩個協議分別是傳輸控制協議TCP(Transmission Control Protocol)和用戶數據報協議UDP(User Datagram Protocol)。

為了簡化問題說明,本課程以Telnet為例描述相關技術。設備支持通過Telnet協議和Stelnet協議登錄。使用Telnet,Stelnet v1協議存在安全風險,建議你使用STelnet v2登錄設備。
為了簡化問題說明,本課程以FTP為例來描述相關技術。設備支持通過FTP協議,TFTP以及SFTP傳輸文件。使用FTP,TFTP,SFTP v1協議存在風險,建議使用SFTP v2方式進行文件操作。

TCP是一種面向連接的傳輸層協議,提供可靠的傳輸服務。

TCP是一種面向連接的端到端協議。TCP作為傳輸控制協議,可以為主機提供可靠的數據傳輸。TCP需要依賴網路協議為主機提供可用的傳輸路徑。

TCP允許一個主機同事運行多個應用進程。每台主機可以擁有多個應用埠,沒對埠號,源和目標IP地址的組合唯一地標識了一個會話。埠分為知名埠和動態埠。有些網路服務會使用固定的埠,這類埠稱為知名埠,埠號范圍為 0~1023 。
比如:FTP,HTTP,Telnet,SNMP服務均使用知名埠。
動態埠范圍 1024~65535 ,這些埠號一般不會固定分配給某個服務,也就是說許多服務都可以使用這些埠。只要運行的程序向系統提出訪問網路的申請,那麼系統就可以從這些埠號中分配一個供該程序使用。

TCP通常使用IP作為網路層協議,這是TCP數據被封裝在IP數據包內。TCP數據段由TCP Header(頭部)和TCP Data(數據)組成。TCP最多可以有60個位元組的頭部,如果沒有Options欄位,正常的長度是20位元組。

TCP Header是由如上圖標識一些欄位組成,這里列出幾個常用欄位。

注意:

1)主機A(通常也叫客戶端)發送一個標識了SYN數據段,標識期望與伺服器A建立連接,此數據段的序列號(seq)為a;
2)伺服器A回復標識了SYN+ACK的數據段,此數據段的序列號(seq)為b,確認序列號為主機A的序列號加1(a+1),以此作為對主機A的SYN報文的確認。
3)主機A發送一個標識了ACK的數據段,此數據段的序列號(seq)為a+1,確認序列號為伺服器A的序列號加1(b+1),以此作為對伺服器A的SYN報文段的確認。

TCP是一種可靠的,面向連接的全雙工傳輸層協議。
TCP連接的簡歷是一個三次握手的過程。

TCP的可靠傳輸還提現在TCP使用了確認技術來確保目的設備收到了從源設備發來的數據,並且是准確無誤的。
確認技術的工作原理如下:
目的設備接收到源設備發送的數據段時,會向源端發送確認報文,源設備收到確認報文後,繼續發送數據段,如此重復。
如圖所示,主機A向伺服器A發送TCP數據段,為描述方便假設每個數據段的長度都是500個位元組。
當伺服器A成功收到序列號是M+1499的位元組以及之前的所有位元組時,會以序列號M+1400+1=M+1500進行確認。另外,由於數據段N+3傳輸失敗,所以伺服器A未能收到序列號為M+1500的位元組,因此伺服器A還會再次以序列號M+1500進行確認。

注意:上面說到,數據段 N+3 傳輸失敗,那麼第二次確認號M+1500,主機A會將N+3,N+4,N+5全部發送一次。

TCP滑動窗口技術通過動態改變窗口大小來實現對端到端設備之間的數據傳輸進行流量控制。
如圖所示,主機A和伺服器A之間通過滑動窗口來實現流量控制。為了方便理解,此例中只考慮主機A發送數據給伺服器A時,伺服器A通過滑動窗口進行流量控制。

例子中:
主機A向伺服器發送4個長度為1024位元組的數據段,其中主機的窗口大小為4096個位元組。伺服器A收到第3個位元組之後,緩存區滿,第4個數據段被丟棄。伺服器以ACK3073(1024*3=3072)響應,窗口大小調整為3072,表明伺服器的緩沖區只能處理3072個位元組的數據段。於是主機A改變其發送速率,發送窗口大小為3072的數據段。

主機在關閉連接之前,要確認收到來自對方的ACK。

TCP支持全雙工模式傳輸數據,這意味著統一時刻兩個方向都可以進行數據的傳輸。在傳輸數據之前,TCP通過三次握手建立的實際上是兩個方向的連接,一次在傳輸完畢後,兩個方向的連接必須都關閉。
TCP連接的建立是一個三次握手過程,而TCP連接的終止則要經過四次揮別。

如圖:
1.主機A想終止連接,於是發送一個標識了FIN,ACK的數據段,序列號為a,確認序列號為b。
2.伺服器A回應一個標識了ACK的數據段,序列號為b,確認序號為a+1,作為對主機A的FIN報文的確認。
3.伺服器A想終止連接,於是向主機A發送一個標識了FIN,ACK的數據段,序列號為b,確認好為a+1。
4.主機A回應一個標識了ACK的數據段,序列號為a+1,確認序號為b+1,作為對伺服器A的FIN報文的確認。
以上四次交互完成了兩個方向連接的關閉。

TCP斷開連接的步驟,這個比較詳細:
https://blog.csdn.net/ctrl_qun/article/details/52518479

UDP是一種面向無連接的傳輸層協議,傳輸可靠性沒有保證。

當應用程序對傳輸的可靠性要求不高時,但是對傳輸速度和延遲要求較高時,可以用UDP協議來替代TCP協議在傳輸層控制數據的轉發。UDP將數據從源端發送到目的端時,無需事先建立連接。UDP採用了簡單,容易操作的機制在應用程序間傳輸數據,沒有使用TCP中的確認技術或滑動窗口機制,因此UDP不能保證數據傳輸的可靠性,也無法避免接受到重復數據的情況。

UDP頭部僅佔8個位元組,傳輸數據時沒有確認機制(注意,但是有校驗和)。

UDP報文分為UDP報文頭和UDP數據區域兩個部分。報頭由源埠,目的埠,報文長度以及校驗和組成。UDP適合於實時數據傳輸,比如語音和視頻通信。相比TCP,UDP的傳輸效率更高,開銷更小,但是無法保證數據傳輸可靠性。UDP頭部的標識如下:
1)16位源埠號:源主機的應用程序使用的埠號。
2)16位目的埠號:目的主機的應用程序使用的埠號。
3)16位UDP長度:是指UDP頭部和UDP數據的位元組長度。因為UDP頭部長度是8位元組,所以欄位的最小值為8。
4)16位UDP校驗和:該欄位提供了與TCP校驗欄位同樣的功能;該欄位是可選的。

使用UDP傳輸數據時,由 應用程序 根據需要提供報文到達確認,排序,流量控制等功能。

主機A發送數據包時,這些數據包是以有序的方式發送到網路中的,每個數據包獨立地在網路中被發送,所以不同的數據包可能會通過不同的網路徑叨叨主機B。這樣的情況下,先發送的數據包不一定先到達主機B。因為UDP數據包沒有序號,主機B將無法通過UDP協議將數據包按照原來的順序重新組合,所以此時需要 應用程序 提供報文的到達確認,排序和流量控制等功能(也就是說UDP報文的到達確認,排序和流量控制是應用程序來確定的)。通常情況下,UDP採用實時傳輸機制和時間戳來傳輸語音和視頻數據。

UDP適合傳輸對延遲敏感的流量,如語音和視頻。
在使用TCP協議傳輸數據時,如果一個數據段丟失或者接受端對某個數據段沒有確認,發送端會重新發送該數據段。
TCP重新發送數據會帶來傳輸延遲和重復數據,降低了用戶的體驗。對於延遲敏感的應用,少量的數據丟失一般可以被忽略,這是使用UDP傳輸能夠提升用戶的體驗。

總結:
1.TCP頭部中的確認標識位有什麼作用呢?
TCP報文頭中的ACK標識位用於目的端對已接受到數據的確認。目的端成功收到序列號為x的位元組後,會以序列號x+1進行確認。
2.TCP頭部中有哪些標識位參與TCP三次握手?
在TCP三次握手過程中,要使用SYN和ACK標識位來請求建立連接和確認建立連接。

⑦ 網路執法官

反擊網路執法官
作為管理軟體的「網路執法官」已經流行一段時間了,對於深受其害的小菜們一定對他非常痛恨,今天我們以網管及被管理者的身份說說該軟體的執法過程、突破過程。首先我們先看一下網路上對「網路執法官」的描述:可以在區域網中任意一台機器上運行網路執法官的主程,它可以穿透防火牆、實時監控、記錄整個區域網用戶上線情況,可限制各用戶上線時所用的IP、時段,並可將非法用戶踢下區域網。該軟體適用范圍為區域網內部,不能對網關或路由器外的機器進行監視或管理!

因為在網路上傳聞它可以穿透防火牆,真是嚇了我一大跳,但在軟體方有沒有這種說法,我就不清楚了,可能是一些擁護者把他神聖化了,於是俺開始研究他如何穿透防火牆的。讀完此文您也就知道「穿透防火牆是怎麼實現的」。

其實「絡網執法官」是通過ARP欺騙來達到管理目的,網路關於ARP欺騙的文章很多,不太清楚的可以去搜索一下。其實「絡網執法官」只不過是一個很普通的管理軟體,其功能雖說更全面、更穩定但也和其它軟體沒有什麼本質上的分別。要想知道他是怎麼管理所在網段而不讓所管理的工作站上網,這還要追尋到網路通信原理上面。因為此軟體主要特性是建立在數據鏈路層,所以其它我就將他簡化了,圖表一是IOS七層參考模型主要功能。

網路基礎:物理層、數據鏈路層、網路層

使用者方面:傳輸、會話、表示及應用層

我們知道,我們的通信是和網路的七層協議密切相關的,以下我們虛擬一個區域網,來講解網路通信過程及「網路執法官」的管理過程。當我們在七層協議最上層,主機A想和其它主機通信,比如telnet到主機B,各層都為數據打包後在封裝自己能識別的數據標簽,我們只說四層以下的通信過程,如圖二。

1、當數據包到達傳輸層,由於telnet使用TCP協議,傳輸層將上層傳過來的數據不變在封裝TCP的包頭以便目標主機可以正確解包,繼續向下層(網路層)傳遞。

2、網路層同樣不會改變之前的數據包,當然也包括之前的任何頭文件,首先主機A要對目標主機作判斷,他會用自己的IP地址和自己的子網掩碼進行與運算結果是172.16.12.0,然後在拿自己的掩碼和主機B的IP地址作與運算,結果是172.16.12.0,這個時候他知道他們在同一網段內,這時他會封裝自己的IP及目標的IP地址,同上層傳下來的數據一下向下傳。

3、數據鏈路層其實包括兩個子層,一是LLC子層另一個是MAC子層。我們知道在乙太網中通信是物理定址的,在這層中會封裝自己的MAC地址及對方的MAC地址。當然用戶是沒有通知他MAC地址是多少的,這時主機會查自己的緩存表,看有沒有主機B的MAC地址,如果有就封裝,否則他會發一個ARP的地址解析廣播包,該包只會存活在該網段並且以打了標簽,雖說所有的主機都可以收到該廣播包,但只會傳遞到該主機的數據鏈路層,更確切的說傳遞到了數據鏈路層的高層就給丟棄了。

4、接著該數據會從我們的網線等傳輸介質傳出去,主機B當收到數據的時候進行相同的工作但是作相反的操作,我相信不用解釋太多您能明白,如圖三所示。

以上是簡單的描述了一下兩台主機的數據傳輸過程,說了半天也沒說到「絡網執法官」是怎麼可以不讓我們上網的,其實我們區域網的工作站想通過代理伺服器上公網的數據包和以上就有點不同了,其實明白了上面的我們就很容易了解工作站去公網的數據包是怎麼走的了。

話說主機A想去黑X官方網站,數據在傳輸到網路層的時候在這個時候呢他會用自己的IP和自己的子網掩碼進行與結果是172.16.12.0,然後在拿自己的掩碼和黑X官方網站的IP與運算(黑X的IP地址由DNS得到),結果為61.152.251.0發現不在同一個網段,注意:這時也是用自己IP和目標IP進行封裝,然後向下層傳遞。在數據鏈路層這時就不會封裝黑X的MAC地址,他也不知道MAC地址是什麼,這時他會封裝網關的MAC地址,而讓網關將數據轉發出去。同時在網關收到數據時候,他會查看目標IP地址,當然不是他自己的IP地址了,所以他知道這個數據發是要由他路由出去的,然後把數據包發給了他的鄰居或網路運營商的路由器上去,重復以上動作,在TTL值為0之前將數據傳遞給黑X官方網站,數據傳遞成功!

至於「網路執法官」為什麼可以根據網卡的MAC剝奪我們上網的權力呢!由於「網路執法官」利用ARP欺騙的原理,他會持續不斷的發低速的ARP廣播包,他主要是欺騙該PC機的第二層設備,使得該主機迷失正確的MAC地址,使第二層功能失效。該軟體管理有如下症狀:

1、主機無法訪問internet,而區域網功能沒問題,是由於ARP歪曲的通告一個偽網關MAC地址,使用戶機器無法找到真正網關的MAC地址,當然在數據鏈路層就封裝錯誤了。

2、無法訪問internet、無法使用區域網功能(一般網管不會這么做,只會對付受限制用戶的手法),這種情況是運行「網路執法官」的主機欺騙了所有區域網中同網段主機,使所有主機歪曲的記錄了被管理的主機的MAC地址,同樣被管理的主機也會錯誤的記錄到其它主機的MAC地址,導致如上結果。

3、無法訪問internet、無法使用區域網功能、桌面上常常彈出「IP地址沖突」的字樣(一般受限制用戶也不會有此待遇),這種是一個典型的「IP地址爭奪游戲」。

在針對這種以MAC地址+IP地址來管理我們的網路管理軟體,在對付第一種限制時,區域網無限制。網上有種方法就是用http、sock代理,就是給同網段一台機器上安裝相應的軟體,起到可以上網的辦法!但是您說這種方法可行嗎?圖四給你結論,當網管發現後會繼續封殺!一般網管不用發現該方法也是不可行的,比如:你看到一件事物是假的,你用看到的事物在去思考當然也是假的。

還有一種方法,就是改MAC地址,當然,這種方法是從原理上把這種軟體控制功能給搞定了,但是您別忘了這個公司除了網路管理軟體還有網管本人呢!他會根據您的IP地址及計算機名繼續封殺。小菜問了:「我改了計算機名、IP地址、MAC地址那不就OK了嗎?」常理說這種方法是一定行的,但是一個合理規劃的網路是不會讓你隨意更改以上各種設置的。比如公司30台主機,網關的設置是192.168.1.1/27,看你怎麼改,當網管工作不認真的時候告訴您,你暫時勝了,要是遇到我哈哈……。如果網管也是個小菜完全可以用這個方法以達到上網的目的,但是這個時候在「網路絡執法官」的主界面中會多出一個用戶來。

在網路上呼聲最高的一種,暴力解決,拿個比管理軟體頻率更高的ARP軟體和網管(頻率達到幾千個Frame/秒)對攻,更有甚者提倡用網路執法官VS網路執法官,這種方法是最可笑的,因為軟體設計中為了保護網管不被攻擊而設置了「友鄰用戶」他們可以相互發現但不能相互管理,這是我說為什麼這種方法可笑的原因。另外在「日誌」中可以查到友鄰用戶的記錄,如果被網管查到是你在搞鬼,我相信你的這個月的獎金沒了!

靜態MAC地址突破管理,arp –d、arp –s等命令把ARP高速緩存改成ARP靜態緩存,這種對於只限制了internet的功能,並且網路執法官是安裝在網關上是行之有效的,如果軟體沒有安裝在網關上嘿嘿……還是不行。(小菜:那麼我們就沒辦法上網了嗎?)當然不是,一種方法只能保證TCP連接可以通信,就是自己用靜態ARP緩存,並且不斷的向網關及其它主機發送正確自己的MAC地址信息,可以保證上internet的TCP正常連接,註:TCP有錯誤檢測機制,可以重傳!當然,如果網管是一個非常狡猾而且卑鄙的話,還會在一分鍾內把你踢出局!

看網路執法官很厲害吧!大家一定以為我在為這款軟體作廣告,其實是想告訴大家不同的管理方法我們要用不同的對策,攻防中才有進步嘛!我在來看看他的管理范圍如圖四,他的管理%

⑧ 求答案,,,

OSI七層模型

OSI中的層 功能 TCP/IP協議族
應用層 文件傳輸,電子郵件,文件服務,虛擬終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示層 數據格式化,代碼轉換,數據加密 沒有協議
會話層 解除或建立與別的接點的聯系 沒有協議
傳輸層 提供端對端的介面 TCP,UDP
網路層 為數據包選擇路由 IP,ICMP,RIP,OSPF,BGP,IGMP
數據鏈路層 傳輸有地址的幀以及錯誤檢測功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層 以二進制數據形式在物理媒體上傳輸數據 ISO2110,IEEE802,IEEE802.2
被過濾廣告

TCP/IP五層模型的協議
應用層
傳輸層
網路層
數據鏈路層
物理層
被過濾廣告

物理層:中繼器、集線器、還有我們通常說的雙絞線也工作在物理層
數據鏈路層:網橋(現已很少使用)、乙太網交換機(二層交換機)、網卡(其實網卡是一半工作在物理層、一半工作在數據鏈路層)
網路層:路由器、三層交換機
傳輸層:四層交換機、也有工作在四層的路由器

除了層的數量之外,開放式系統互聯(OSI)模型與TCP/IP協議有什麼區別?
開放式系統互聯模型是一個參考標准,解釋協議相互之間應該如何相互作用。TCP/IP協議是美國國防部發明的,是讓互聯網成為了目前這個樣子的標准之一。開放式系統互聯模型中沒有清楚地描繪TCP/IP協議,但是在解釋TCP/IP協議時很容易想到開放式系統互聯模型。兩者的主要區別如下:

·TCP/IP協議中的應用層處理開放式系統互聯模型中的第五層、第六層和第七層的功能。

·TCP/IP協議中的傳輸層並不能總是保證在傳輸層可靠地傳輸數據包,而開放式系統互聯模型可以做到。TCP/IP協議還提供一項名為UDP(用戶數據報協議)的選擇。UDP不能保證可靠的數據包傳輸。

TCP/UDP協議
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於傳輸層協議。其中TCP提供IP環境下的數據可靠傳輸,它提供的服務包括數據流傳送、可靠性、有效流控、全雙工操作和多路復用。通過面向連接、端到端和可靠的數據包發送。通俗說,它是事先為所發送的數據開辟出連接好的通道,然後再進行數據發送;而UDP則不為IP提供可靠性、流控或差錯恢復功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用。TCP支持的應用協議主要有:Telnet、FTP、SMTP等;UDP支持的應用層協議主要有:NFS(網路文件系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系統)、TFTP(通用文件傳輸協議)等.
TCP/IP協議與低層的數據鏈路層和物理層無關,這也是TCP/IP的重要特點

OSI是Open System Interconnect的縮寫,意為開放式系統互聯。
OSI七層參考模型的各個層次的劃分遵循下列原則:

1、同一層中的各網路節點都有相同的層次結構,具有同樣的功能。

2、同一節點內相鄰層之間通過介面(可以是邏輯介面)進行通信。

3、七層結構中的每一層使用下一層提供的服務,並且向其上層提供服務。

4、不同節點的同等層按照協議實現對等層之間的通信。

第一層:物理層(PhysicalLayer),規定通信設備的機械的、電氣的、功能的和過程的特性,用以建立、維護和拆除物理鏈路連接。具體地講,機械特性規定了網路連接時所需接插件的規格尺寸、引腳數量和排列情況等;電氣特性規定了在物理連接上傳輸bit流時線路上信號電平的大小、阻抗匹配、傳輸速率距離限制等;功能特性是指對各個信號先分配確切的信號含義,即定義了DTE和DCE之間各個線路的功能;規程特性定義了利用信號線進行bit流傳輸的一組操作規程,是指在物理連接的建立、維護、交換信息是,DTE和DCE雙放在各電路上的動作系列。

在這一層,數據的單位稱為比特(bit)。

屬於物理層定義的典型規范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

第二層:數據鏈路層(DataLinkLayer):在物理層提供比特流服務的基礎上,建立相鄰結點之間的數據鏈路,通過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動作系列。

數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:物理地址定址、數據的成幀、流量控制、數據的檢錯、重發等。

在這一層,數據的單位稱為幀(frame)。

數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。

第三層是網路層

在計算機網路中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網路層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。網路層將數據鏈路層提供的幀組成數據包,包中封裝有網路層包頭,其中含有邏輯地址信息- -源站點和目的站點地址的網路地址。

如果你在談論一個IP地址,那麼你是在處理第3層的問題,這是「數據包」問題,而不是第2層的「幀」。IP是第3層問題的一部分,此外還有一些路由協議和地址解析協議(ARP)。有關路由的一切事情都在第3層處理。地址解析和路由是3層的重要目的。網路層還可以實現擁塞控制、網際互連等功能。

在這一層,數據的單位稱為數據包(packet)。

網路層協議的代表包括:IP、IPX、RIP、OSPF等。

第四層是處理信息的傳輸層。第4層的數據單元也稱作數據包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的數據單元稱為段(segments)而UDP協議的數據單元稱為「數據報(datagrams)」。這個層負責獲取全部信息,因此,它必須跟蹤數據單元碎片、亂序到達的數據包和其它在傳輸過程中可能發生的危險。第4層為上層提供端到端(最終用戶到最終用戶)的透明的、可靠的數據傳輸服務。所為透明的傳輸是指在通信過程中傳輸層對上層屏蔽了通信傳輸系統的具體細節。

傳輸層協議的代表包括:TCP、UDP、SPX等。

第五層是會話層

這一層也可以稱為會晤層或對話層,在會話層及以上的高層次中,數據傳送的單位不再另外命名,統稱為報文。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制。如伺服器驗證用戶登錄便是由會話層完成的。

第六層是表示層

這一層主要解決擁護信息的語法表示問題。它將欲交換的數據從適合於某一用戶的抽象語法,轉換為適合於OSI系統內部使用的傳送語法。即提供格式化的表示和轉換數據服務。數據的壓縮和解壓縮, 加密和解密等工作都由表示層負責。

第七層應用層,應用層為操作系統或網路應用程序提供訪問網路服務的介面。

應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。

通過 OSI 層,信息可以從一台計算機的軟體應用程序傳輸到另一台的應用程序上。例如,計算機 A 上的應用程序要將信息發送到計算機 B 的應用程序,則計算機 A 中的應用程序需要將信息先發送到其應用層(第七層),然後此層將信息發送到表示層(第六層),表示層將數據轉送到會話層(第五層),如此繼續,直至物理層(第一層)。在物理層,數據被放置在物理網路媒介中並被發送至計算機 B 。計算機 B 的物理層接收來自物理媒介的數據,然後將信息向上發送至數據鏈路層(第二層),數據鏈路層再轉送給網路層,依次繼續直到信息到達計算機 B 的應用層。最後,計算機 B 的應用層再將信息傳送給應用程序接收端,從而完成通信過程。下面圖示說明了這一過程。

OSI 的七層運用各種各樣的控制信息來和其他計算機系統的對應層進行通信。這些控制信息包含特殊的請求和說明,它們在對應的 OSI 層間進行交換。每一層數據的頭和尾是兩個攜帶控制信息的基本形式。

對於從上一層傳送下來的數據,附加在前面的控制信息稱為頭,附加在後面的控制信息稱為尾。然而,在對來自上一層數據增加協議頭和協議尾,對一個 OSI 層來說並不是必需的。

當數據在各層間傳送時,每一層都可以在數據上增加頭和尾,而這些數據已經包含了上一層增加的頭和尾。協議頭包含了有關層與層間的通信信息。頭、尾以及數據是相關聯的概念,它們取決於分析信息單元的協議層。例如,傳輸層頭包含了只有傳輸層可以看到的信息,傳輸層下面的其他層只將此頭作為數據的一部分傳遞。對於網路層,一個信息單元由第三層的頭和數據組成。對於數據鏈路層,經網路層向下傳遞的所有信息即第三層頭和數據都被看作是數據。換句話說,在給定的某一 OSI 層,信息單元的數據部分包含來自於所有上層的頭和尾以及數據,這稱之為封裝。

例如,如果計算機 A 要將應用程序中的某數據發送至計算機 B ,數據首先傳送至應用層。 計算機 A 的應用層通過在數據上添加協議頭來和計算機 B 的應用層通信。所形成的信息單元包含協議頭、數據、可能還有協議尾,被發送至表示層,表示層再添加為計算機 B 的表示層所理解的控制信息的協議頭。信息單元的大小隨著每一層協議頭和協議尾的添加而增加,這些協議頭和協議尾包含了計算機 B 的對應層要使用的控制信息。在物理層,整個信息單元通過網路介質傳輸。

計算機 B 中的物理層收到信息單元並將其傳送至數據鏈路層;然後 B 中的數據鏈路層讀取計算機 A 的數據鏈路層添加的協議頭中的控制信息;然後去除協議頭和協議尾,剩餘部分被傳送至網路層。每一層執行相同的動作:從對應層讀取協議頭和協議尾,並去除,再將剩餘信息發送至上一層。應用層執行完這些動作後,數據就被傳送至計算機 B 中的應用程序,這些數據和計算機 A 的應用程序所發送的完全相同 。

一個 OSI 層與另一層之間的通信是利用第二層提供的服務完成的。相鄰層提供的服務幫助一 OSI 層與另一計算機系統的對應層進行通信。一個 OSI 模型的特定層通常是與另外三個 OSI 層聯系:與之直接相鄰的上一層和下一層,還有目標聯網計算機系統的對應層。例如,計算機 A 的數據鏈路層應與其網路層,物理層以及計算機 B 的數據鏈路層進行通信。

⑨ 有關數據包問題

TCP簡介
TCP是一種面向連接(連接導向)的、可靠的、基於位元組流的運輸層(Transport layer)通信協議,由IETF的RFC 793說明(specified)。在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,UDP是同一層內另一個重要的傳輸協議。
在網際網路協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。
應用層向TCP層發送用於網間傳輸的、用8位位元組表示的數據流,然後TCP把數據流分割成適當長度的報文段(通常受該計算機連接的網路的數據鏈路層的最大傳送單元(MTU)的限制)。之後TCP把結果包傳給IP層,由它來通過網路將包傳送給接收端實體的TCP層。TCP為了保證不發生丟包,就給每個位元組一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的位元組發回一個相應的確認(ACK); 如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
首先,TCP建立連接之後,通信雙方都同時可以進行數據的傳輸,其次,他是全雙工的;在保證可靠性上,採用超時重傳和捎帶確認機制。
在流量控制上,採用滑動窗口協議,協議中規定,對於窗口內未經確認的分組需要重傳。
在擁塞控制上,採用慢啟動演算法。 [編輯本段]什麼是TCP/IP?TCP/IP(Transmission Control Protocol/Internet Protocol) 即傳輸控制協議/網間協議,是一個工業標準的協議集,它是為廣域網(WANs)設計的。它是由ARPANET網的研究機構發展起來的。
有時我們將TCP/IP描述為互聯網協議集\"Internet Protocol Suite\",TCP和IP是其中的兩個協議(後面將會介紹)。由於TCP和IP是大家熟悉的協議,以至於用TCP/IP或IP/TCP這個詞代替了整個協議集。這盡管有點奇怪,但沒有必要去爭論這個習慣。例如,有時我們討論NFS 是基於TCP/IP時,盡管它根本沒用到TCP(只用到IP,和另一種互動式 協議UDP而不是TCP)。
Internet是網路的集合,包括ARPANET、NSFNET、分布在各地的區域網、以及其它類型的網路,如(DDN,Defense Data Network美國國防數據網路),這些統稱為Internet。所有這些大大小小的網路互聯在一起。(因為大多數網路基本協議是由DDN組織開發的,所以以前有時DDN與Internet在某種意義上具有相同的含義)。網路上的用戶可以互相傳送信息,除一些有授許可權制和安全考慮外。一般的講,互聯網協議文檔案是Internet委員會自己採納的基本標准。 TCP/IP標准與其說由委員會指定,倒不如說由\"輿論\"來開發的。 任何人都可以提供一個文檔,以RFC(Request for Comment需求注釋) 方式公布。
TCP/IP的標准在一系列稱為RFC的文檔中公布。文檔由技術專家、特別工作組、或RFC編輯修訂。公布一個文檔時,該文檔被賦予一個RFC量,如RFC959說明FTP、RFC793說明TCP、RFC791說明IP等。 最初的RFC一直保留而從來不會被更新,如果修改了該文檔,則該文檔又以一個新號碼公布。因此,重要的是要確認你擁有了關於某個專題的最新RFC文檔。文後會列出主要的RFC文檔號。 [編輯本段]TCP所支持的服務類型不管怎樣,TCP/IP是一個協議集。為應用提供一些\"低級\"功能,這些包括IP、TCP、UDP。其它是執行特定任務的應用協議,如計算機間傳送文件、發送電子郵件、或找出誰注冊到另外一台計算機。因此, 最重要的\"商業\"TCP/IP服務有:
* 文件傳送File Transfer。
文件傳送協議FTP(File Transfer Protocol)允許用戶從一台計算機到另一台取得文件,或發送文件到另外一台計算機。從安全性方面考慮,需要用戶指定一個使用其它計算機的用戶名和口令。它不同與NFS(Network File System)和Netbios協議。一旦你要訪問另一台 系統中的文件,任何時刻都要運行FTP。而且你只能拷貝文件到自己的機器中去來使用它。(RFC 959中關於FTP的說明)
* 遠程登錄Remote login
網路終端協議TELNET允許用戶登錄到網路上任一計算機上。你可啟動一個遠程進程連接到指定的計算機,直到進程結束,期間你所鍵入的內容被送到所指定的計算機。值得注意的是,這時你實際上是與你的計算機進行對話。TELENET程序使得你的計算機在整個過程中不見了,所敲的每一個字元直接送到所登錄的計算機系統。一般的說,這種遠程連接是通過類式撥號連接的,也就是,撥通後,遠程系統提示你輸入注冊名和口令,退出遠程系統,TELNET程序也就退出,你又與自己的計算機對話了。微電腦中的TELNET工具一般含有一個終端模擬程序。
* 計算機郵件Mail
允許你發送消息給其它計算機的用戶。通常,人們趨向於使用指定的一台或兩台計算機。計算機郵件系統只需你簡單地往另一用戶的郵件文件中添加信息,但隨之產生問題,使用的微電腦的環境不同,還有重要的是宏(MICRO)不適合於接受計算機郵件。為了發送電子郵件,郵件軟體希望連接到目的計算機,如果是微電腦,也許它已關機,或者正在運行另一個應用程序呢?出於這種原因,通常由一個較大的系統來處理這些郵件,也就是一個一直運行著的郵件伺服器。郵件軟體成為用戶從郵件伺服器取回郵件的一個界面。
任何一個的TCP/IP工具提供上述這些服務。這些傳統的應用功能在基於TCP/IP的網路中一直扮演非常重要的角色。目前情況有點變化,這些功能使用也發生變化,如老系統的改造,計算機的發展等,出現了各種安裝版本,如:微電腦、工作站、小型機、和巨型機等。這些計算機好像在一起完成指定的任務,盡管有時看來像是只用到某個指定 的計算機,但它是通過網路得到其它計算機系統的服務。伺服器Server是為網路上其它提供指定服務的系統,客戶Client是得到這種服務的另外計算機系統。(值得注意的是,服務/客戶機不一定是不同的計算機,有可能是同一計算機中的不同運行程序)。以下是幾種目前計算機上典型的一些服務,這些服務可在TCP/IP網路上調用。
* 網路文件系統(NFS)
這種訪問另一計算機的文件的方法非常接近於流行的FTP。網路文件系統提供磁碟或設備服務,而無需特定的網路實用程序來訪問另一系統的文件。可以簡單地認為它是一個外加的磁碟驅動器。這種額外\"虛擬\"磁碟驅動器就是其它計算機系統的磁碟。這非常有用。你只需加大幾台計算機的磁碟容量,就可使網路上其他用戶訪問它,且不說所帶來的經濟效益,它還能夠讓幾台工作的計算機共享相同的文件。它也使得系統維護和備份易如反掌,因為再不必為大量的不同機器上 的文件的升級和備份而擔心。
* 遠程列印(Remote printing)
允許你使用其它計算機上的列印機,好像這些列印機直接連到你的計算機上。
* 遠程執行(Remote execution)
允許你請求運行在不同計算機上的特殊程序。當你在一個很小的計算機上運行一個需要大機系統資源的程序時,這時候遠程執行非常有用。
* 名字伺服器(Name servers)
在一個大的系統安裝過程中,需要用到大量的各種名字,包括用戶名、口令,姓名、網路地址、帳號等,管理這些是非常令人乏味的。因此將這些數據形成資料庫,放到一個小系統中去,其它系統通過網路來訪問這些數據。
* 終端伺服器(Terminal servers)
很多的終端連接安裝不再直接將終端連到計算機,取而代之的是,將他們連接到終端伺服器上。終端伺服器是一個小的計算機,它只需知道怎樣運行TELNET(或其它一些完成遠程登錄的協議)。如果你的終端想連上去,只用鍵入要連的計算機名就可。通常有可能同時有幾個這種連接,這時終端伺服器採用快速開關技術來切換。
上述所描述的一些協議是由Berkeley, Sun,或其它組織定義的。因此,它們不是互聯網協議集(Internet Protocol Suite)的一部分, 只是使用到TCP/IP的工具,如同一般的TCP/IP 應用協議。因為協議的定義不一致,並且商業支持的TCP/IP工具廣泛應用,也許會把這些協議作為互聯協議集中的一部分。上述列出的只是基於TCP/IP部分服務的一些簡單例子,但包含了一些\"主要\"的應用。
TCP功能:提供計算機程序間連接、檢測和丟棄重復的分組、完成數據報的確認、流量控制和網路擁塞。 [編輯本段]TCP的服務流程TCP協議提供的是可靠的、面向連接的傳輸控制協議,即在傳輸數據前要先建立邏輯連接,然後再傳輸數據,最後釋放連接3個過程。TCP提供端到端、全雙工通信;採用位元組流方式,如果位元組流太長,將其分段;提供緊急數據傳送功能。
盡管TCP和UDP都使用相同的網路層(IP),TCP卻向應用層提供與UDP完全不同的服務。
TCP提供一種面向連接的、可靠的位元組流服務。
面向連接意味著兩個使用TCP的應用(通常是一個客戶和一個伺服器)在彼此交換數據之前必須先建立一個TCP連接。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說「喂」,然後才說明是誰。
在一個TCP連接中,僅有兩方進行彼此通信。廣播和多播不能用於TCP。
TCP通過下列方式來提供可靠性:
�6�1應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據報長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段(segment)TCP如何確定報文段的長度。
�6�1當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。�6�1當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒
�6�1TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。
�6�1既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
�6�1既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。
�6�1TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
兩個應用程序通過TCP連接交換8bit位元組構成的位元組流。TCP不在位元組流中插入記錄標識符。我們將這稱為位元組流服務(bytestreamservice)。如果一方的應用程序先傳10位元組,又傳20位元組,再傳50位元組,連接的另一方將無法了解發方每次發送了多少位元組。收方可以分4次接收這80個位元組,每次接收20位元組。一端將位元組流放到TCP連接上,同樣的位元組流將出現在TCP連接的另一端。
另外,TCP對位元組流的內容不作任何解釋。TCP不知道傳輸的數據位元組流是二進制數據,還是ASCII字元、EBCDIC字元或者其他類型數據。對位元組流的解釋由TCP連接雙方的應用層解釋。
這種對位元組流的處理方式與Unix操作系統對文件的處理方式很相似。Unix的內核對一個應用讀或寫的內容不作任何解釋,而是交給應用程序處理。對Unix的內核來說,它無法區分一個二進制文件與一個文本文件。
TCP是網際網路中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求後,等待對方回答SYN,ACK。這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動窗口協議。第一次握手:建立連接時,客戶端發送SYN包(SEQ=x)到伺服器,並進入SYN_SEND狀態,等待伺服器確認。第二次握手:伺服器收到SYN包,必須確認客戶的SYN(ACK=x+1),同時自己也送一個SYN包(SEQ=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態。第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ACK=y+1),此包發送完畢,客戶端和伺服器時入Established狀態,完成三次握手。 [編輯本段]TCP所提供服務的主要特點(1)面向連接的傳輸;
(2)端到端的通信;
(3)高可靠性,確保傳輸數據的正確性,不出現丟失或亂序;
(4)全雙工方式傳輸;
(5)採用位元組流方式,即以位元組為單位傳輸位元組序列;
(6)緊急數據傳送功能。 [編輯本段]TCP的重傳策略TCP協議用於控制數據段是否需要重傳的依據是設立重發定時器。在發送一個數據段的同時啟動一個重發定時器,如果在定時器超時前收到確認就關閉該定時器,如果定時器超時前沒有收到確認,則重傳該數據段。
這種重傳策略的關鍵是對定時器初值的設定。目前採用較多的演算法是Jacobson於1988年提出的一種不斷調整超時時間間隔的動態演算法。其工作原理是:對每條連接TCP都保持一個變數RTT,用於存放當前到目的端往返所需要時間最接近的估計值。當發送一個數據段時,同時啟動連接的定時器,如果在定時器超時前確認到達,則記錄所需要的時間(M),並修正RTT的值,如果定時器超時前沒有收到確認,則將RTT的值增加1倍。 [編輯本段]TCP的埠號TCP段結構中埠地址都是16比特,可以有在0~65535范圍內的埠號。對於這65536個埠號有以下的使用規定:
(1)埠號小於256的定義為常用埠,伺服器一般都是通過常用埠號來識別的。任何TCP/IP實現所提供的服務都用1~1023之間的埠號,是由IANA來管理的;
(2)客戶端只需保證該埠號在本機上是惟一的就可以了。客戶埠號因存在時間很短暫又稱臨時埠號;
(3)大多數TCP/IP實現給臨時埠號分配1024~5000之間的埠號。大於5000的埠號是為其他伺服器預留的。
TCP協議是如何確保數據傳輸高可靠性
為了保證可靠性,發送的報文都有遞增的序列號。序呈和確認號用來確保傳輸的可靠性。此外,對每個報文都設立一個定時器,設定一個最大時延。對那些超過最大時延仍沒有收到確認信息的報文就認為已經丟失,需要重傳。 [編輯本段]如何重置TCP/IP協議在Windows Server 2003(簡稱Windows 2003)的連接屬性對話框中,如果點擊「Internet協議(TCP/IP)選項,「卸載」按鈕為灰色,是不可用的。這是因為TCP/IP協議是Windows Server 2003的核心組件,不能刪除。
如果我們需要將TCP/IP重置到原始狀態,該怎麼辦呢?此時,我們可以藉助「netsh」命令行工具來解決這一問題。在「運行」對話框中輸入「cmd」,打開「命令提示符」窗口,然後輸入命令行「netsh int ip reset resetlog.txt」或「netsh int ip reset c:\resetlog.txt」並按回車鍵。其中的「reset」命令可以重寫與TCP/IP相關的注冊表項「System\CurrentCon trolSet\Services\Tcpip\Parameters\」和「System\CurrentControlSet\Services\DHCP\Parame ters\」,運行以上命令的結果與刪除並重新安裝TCP/IP的效果相同。
此外,兩個命令行的不同之處僅僅在於「resetlog.txt」日誌文件的存儲位置有所區別。前者是將日誌文件創建在當前文件夾中,而後者則指定了具體的保存路徑。
在Windows XP的網路組件列表裡,Internet 協議 (TCP/IP)的"卸載"按鈕是灰色不可選狀態。這是因為傳輸控制協議/Internet 協議 (TCP/IP) 堆棧是 Microsoft XP/ 2003 的核心組件(TCP/IP協議是Windows XP的默認協議),不能刪除。所以Windows XP不允許卸載TCP/IP協議。如果在特殊情況下需要重新安裝TCP/IP協議,如何操作?
解決方法
在這種情況下,如果需要重新安裝 TCP/IP 以使 TCP/IP 堆棧恢復為原始狀態。可以使用 NetShell 實用程序重置 TCP/IP 堆棧,使其恢復到初次安裝操作系統時的狀態。具體操作如下:
1、單擊 開始 --> 運行,輸入 "CMD" 後單擊 "確定";
2、在命令行模式輸入命令
netsh int ip reset C:\resetlog.txt
(其中,Resetlog.txt記錄命令結果的日誌文件,一定要指定,這里指定了Resetlog.txt 日誌文件及完整路徑。)
運行結果可以查看C:\resetlog.txt (咨詢中可根據用戶實際操作情況提供)
運行此命令的結果與刪除並重新安裝 TCP/IP 協議的效果相同。
注意
本操作具有一定的風險性,請在操作前備份重要數據,並根據操作熟練度酌情使用。 [編輯本段]TCP公司簡介[以下為非計算機類]Technical Consumer Procts,INC之英文縮寫TCP,是美國大型跨國光源公司,主要生產經營各種優質節能光源、燈具及相關照明電器產品。1997年,全球第一支高品質螺旋型節能燈在美國TCP公司問世,一經推出即得到國際照明行業的高度評價,並受到美國消費者的普遍歡迎。TCP公司當年即榮獲全美節能燈銷售第一的桂冠。隨著TCP不斷追求技術創新,產品品質不斷提升,其數百款光源產品均通過了國際能效認證機構ENERGY STAR(能源之星)的認證,多年保持美國銷量第一的殊榮,產品行銷全球許多國家。TCP也成為美國、加拿大等北美地區最著名的光源品牌之一。
上個世紀末,TCP來到中國,在上海市及江蘇省投資數億興建了多家現代照明生產基地,員工總數已超過14000人,工程技術人員佔15%。TCP全資控股的上海振欣電子工程有限公司,鎮江強凌電子有限公司、揚州強凌電子有限公司以及淮安強凌電子有限公司每天有超過140萬只的高品質節能燈光源出口到美國等西方發達國家。2004年,美國TCP(上海)天燦寶照明電器有限公司成立,其專門負責高品質的TCP光源及燈具產品在中國國內的銷售和服務。在前期市場導入階段,TCP在上海、北京已取得成功的銷售業績,數百家大型機構搶先分享了TCP照明科技。
TCP「讓照明成為享受」的理念,正走向中國日益發展的新生活。
製造理念:高品質、高可靠性、高一致性、低價位
企業精神:誠信、發展、創新、超越
企業座右銘:你想要一個穩定的世界,必須創造一個世界。
品牌戰略:做世界上最好的節能光源,讓照明成為享受。
產品戰略:讓所有使用白熾燈的地方都可以用節能燈代替。
營銷戰略:以上海、北京、廣州為中心,逐步建立遍布全國的營銷組織網路。

⑩ 【網路協議筆記】第四層:傳輸層(Transport)TCP協議簡介(1)

TCP有以下幾個知識點。

圖片備用地址

圖片備用地址

TCP的幾個要點:可靠傳輸、流量控制、擁塞控制、連接管理(建立和釋放連接)。
也正因為這幾點使得首部變得很復雜。

佔4位,取值范圍是0x0101 ~ 0x1111。

乘以4就是首部長度(Header Length)。所以取值范圍是5 ~ 60位元組,由於首部固定部分佔用20位元組,所以可選部分至多佔用40位元組(和網路層首部一樣)。

為什麼叫數據偏移?因為相對TCP報文向右偏移首部長度後就是數據部分。
UDP的首部中有個16位的欄位記錄了整個UDP報文段的長度(首部 + 數據)。
但是,TCP的首部中僅僅有個4位的欄位記錄了TCP報文段的首部長度,並沒有欄位記錄TCP報文段的數據長度。
分析:UDP首部中佔16位的長度欄位是冗餘的,純粹是為了保證首部是32bit對齊。
TCP/UDP的數據長度,完全可以由IP數據包的首部推測出來,傳輸層的數據長度 = 網路層的總長度 - 網路層的首部長度 - 傳輸層的首部長度。

佔6位,目前全為0。

與UDP一樣,TCP檢驗和的計算內容:偽首部 + 首部 + 數據。偽首部佔用12位元組,僅在計算檢驗和時起作用,並不會傳遞給網路層。

圖片備用地址

一共佔6位或9位。

有些資料中,TCP首部的保留(Reserved)欄位佔3位,標志(Flags)欄位佔9位。Wireshark中也是如此。是因為標志位中的前3位是無用的,所以兩種說法都不能說是錯的。

圖片備用地址

圖片備用地址

意思:緊急。當URG=1時,緊急指針欄位才有效。表明當前報文段中有緊急數據,應優先盡快傳送。
緊急指針存放的是長度值,表示TCP的前多少位元組是需要緊急優先處理的。

意思:確認。當ACK=1時,確認號欄位才有效。

意思:推。一般用在互動式網路中。PUSH標志位所表達的是發送方通知接收方傳輸層應該盡快的將這個報文段交給應用層。

意思:重置。當RST=1時,表明連接中出現嚴重差錯,必須釋放連接,然後再重新建立連接。

意思:同步。當SYN=1 & ACK=0時,表明這是一個建立連接的請求。若對方同意建立連接,則回復SYN=1 & ACK=1。
請求方再發送SYN=0 & ACK=1時表明開始傳輸數據。這也是三次握手的流程。

意思:完成。表明數據已經發送完畢,要求釋放連接。

佔4位元組。首先,傳輸的每一個位元組都會有一個編號(連續的位元組編號也是連續的)。
在建立連接後,序號代表這一次傳給對方的TCP數據部分的第一個位元組的編號。

佔4位元組。在建立連接後,確認號代表期望對方下一次傳過來的TCP數據部分的第一個位元組的編號。

佔2位元組。這個欄位有流量控制功能,用以告知對方下一次允許發送的數據大小(位元組為單位)。

ARQ(Automatic Repeat-reQuest), 自動重傳請求。

圖片備用地址

無差錯情況

A發送數據M1到B,B收到數據M1後向A發送確認信號M1;
A收到確認信號M1後,繼續向B發送數據M2,B接收後向A發送確認信號M2。
超時重傳

A發送數據M1到B,A在發送數據途中丟包或B發現數據M1有錯誤直接丟掉,導致B無法向A發送確認信號M1;
A在一定時間間隔後發現沒有收到B發送的確認信號M1,A會繼續向B發送數據M1;
B收到數據M1後向A發送確認信號M1,A收到確認信號M1後,繼續向B發送M2數據。
通過確認與超時重傳機制實現可靠傳輸,在發送完一個分組後,必須暫時保留已發送的分組的副本。
分組和確認分組都必須進行編號。超時計時器的重傳時間應當比數據在分組傳輸的平均往返時間更長一些。

圖片備用地址

確認丟失

A發送數據M1到B,B接收到數據M1後,向A發送確認信號M1;
B在向A發送確認信號M1中途丟包,此時A在一定時間間隔後發現沒有收到B發送的確認信號M1,A會繼續向B發送數據M1;
B收到數據M1後會丟棄重復的數據M1(之前已經收到數據M1,只是A不知道),繼續向A發送確認信號M1;
A收到確認信號M1後,繼續開始發送M2數據。
確認遲到

A發送數據M1到B,B接收到數據M1後,向A發送確認信號M1;
B在向A發送確認信號M1時,由於網路延遲等原因導致A在一定時間段內未收到確認信號;
A會繼續向B發送數據M1,B收到數據M1後丟棄重復的數據M1,並向A發送確認信號M1;
A收到確認信號M1後,繼續開始發送M2數據,M2數據剛發送出去,此時A剛好接收到B在第一次發送的確認信號M1,
但由於之前已經成功接收並處理了第二次的確認信號M1,所以A在收到確認信號後什麼也不做。
出現差錯或丟失的時候,發送方會將自己備份的副本再重傳一次,直到收到接收的確認信息。
當接收方收到重復的數據時,會直接丟棄,但是會給發送方請確認自己已經收到了。

上面的停止等待協議每發送一組數據就必須等到接收方回復確認後,再發起第二組數據,如果出現超時重傳的話,效率更低。
因此為了提高傳輸的效率,改進了等待傳輸協議。

連續ARQ協議和滑動窗口協議的機制是以接收方回復確認為單位,每次連續發送一個滑動窗口指定的數據組。

圖片備用地址

A發送數據給B時,一次性發送M1~M4(A和B建立連接時,B告訴A自己的緩存池可以容納多少位元組數據,
A根據這個緩存池的大小構建一個同大小的發送窗口–也可以理解為發送緩存池),此時A開始等待確認,B收到全部數據後會向A發送確認信號M4(以最後一個編號為准);
A收到確認信號後,繼續向B發送M5 M8(A把之前構建的窗口滑動並鎖定到對應大小的數據段上,即M5 M8),以此往復直到數據傳輸完畢。
如果接收窗口最多能接收4個包(窗口大小),但發送方只發了2個包,接收方如何確定後面還有沒有2個包?

答案:接收方會在等待一定時間後發現沒有第3個包,就會返回收到2個包的確認信號給發送方。

滑動窗口是由發送方維護的類似指針的變數,在每收到一個接收方的確認消息後,
該指針向前移動並發送數據,到窗口指定大小的數據組時停下,等待接收方的確認。

圖片備用地址

累積確認機制: 發送方不對收到的分組逐個發送確認,而是對按序到達的最後一個分組發送確認,
這樣就表示:到這個分組為止的所有分組都已正確收到了。

優點:容易實現,即使確認丟失也不必重傳。
缺點:不能向發送方反映出接收方已經正確收到的所有分組的信息。
Go-back-N(回退 N): 為了解決上述同一窗口中數據組不能完整確認的問題,連續ARQ協議採用了回退機制。
比如說:發送方發送了前5個分組,而中間的第3個分組丟失了。這時接收方只能對前兩個分組發出確認。
發送方無法知道後面三個分組的下落,而只好把後面的三個分組都再重傳一次。這就叫做 Go-back-N(回退 N),表示需要再退回來重傳已發送過的N個分組。

結論:當通信線路質量不好時,連續ARQ協議會帶來負面的影響。可能還不如傳統的停止等待協議。

TCP連接的每一端都必須設有兩個窗口——一個發送窗口和一個接收窗口。
TCP的可靠傳輸機制用位元組的序號進行控制。TCP所有的確認都是基於序號而不是基於報文段。
TCP兩端的四個窗口經常處於動態變化之中。
TCP連接的往返時間RTT也不是固定不變的。需要使用特定的演算法估算較為合理的重傳時間。

滑動窗口是面向位元組流的,為了方便記住每個分組的序號,
現在假設有一個1200位元組的數據,分12組,每一組數據是100個位元組,代表一個數據段的數據(每一個數據都有自己的TCP首部),每一組給一個編號(1~12)。

圖片備用地址

圖片備用地址

TCP通信時,如果發送序列中間某個數據包丟失,TCP會通過重傳最後確認的分組後續的分組,這樣原先已經正確傳輸的分組也可能重復發送,降低了TCP性能。
SACK(Selective Acknowledgment,選擇確認)技術 ,使TCP只重新發送丟失的包,不用發送後續所有的分組,
而且提供相應機制使接收方能告訴發送方哪些數據丟失,哪些數據已經提前收到等。

在建立TCP連接時,就要在TCP首部的選項中加上「允許SACK」的選項,而雙方必須都事先商定好。
原來首部中的「確認號欄位」的用法仍然不變。只是以後在TCP報文段的首部中都增加了SACK選項,以便報告收到的不連續的位元組塊的邊界。

圖片備用地址

Kind:佔1個位元組,值為5代表這是SACK選項。
Length:佔1個位元組,表明SACK選項一共佔用多少位元組。
Left Edge:佔4個位元組,左邊界。
Right Edge:佔4個位元組,右邊界。

圖片備用地址

上圖的著色模塊代表已接收數據,空白代表未接收數據。左右邊界意思是會把未接收完畢的TCP數據包的已接收數據進行左右標記。

由於TCP的選項不能超過40個位元組,去除Kind和Length佔用的2個位元組,還剩下38個位元組給左右邊界使用。
一組邊界佔用8個位元組(左右邊界各佔4個位元組),所以邊界不能超過4組。也能夠因此推斷出SACK選項的最大佔用位元組數是4 * 8 + 2 = 34。

思考:超過選項邊界的數據怎麼辦?
超過邊界的數據需要重新傳輸,但這已經很大程度提高了傳輸效率。

重傳機制是TCP中最重要和最復雜的問題之一。TCP每發送一個報文段,就對這個報文段設置一次計時器。
只要計時器設置的重傳時間到但還沒有收到確認,就要重傳這一報文段。那麼這個重傳時間到底應該設置多少呢?建議跳過,有興趣的可以去查閱相關資料。

圖片備用地址

為什麼選擇在傳輸層就將數據分割成多個段,而不是等到網路層再分片傳遞給數據鏈路層?
-->網路層沒有可靠傳輸協議,丟包無法只發送一個報文段,所以需要分割成多個段。

如果在傳輸層不分段,一旦出現數據丟失,整個傳輸層的數據都得重傳
如果在傳輸層分段了,一旦出現數據丟失,只需要重傳丟失的那些段即可

歡迎大家的意見和交流

email: [email protected]

閱讀全文

與傳輸層如何保證包數據不變相關的資料

熱點內容
流量產品券怎麼用 瀏覽:994
寧波凍品市場在哪裡 瀏覽:945
什麼是威望數據 瀏覽:575
知道公司怎麼買產品 瀏覽:189
監理員如何學習施工技術 瀏覽:731
稅收信息採集多久通知 瀏覽:928
產後豐胸什麼產品好 瀏覽:84
為什麼會收到etc收費信息 瀏覽:750
為什麼直播間看不到信息 瀏覽:964
提前進入左轉待轉區多久收到信息 瀏覽:20
渤海交易所怎麼樣 瀏覽:132
皮膚發癢用什麼化工產品 瀏覽:83
沒技術的人如何養家糊口 瀏覽:880
什麼叫退市交易整理期 瀏覽:7
身份信息發到多少人的群里算侵權 瀏覽:598
modbustcp如何讀取數據的 瀏覽:210
有什麼好項目可以做代理商理財 瀏覽:635
上徵信要什麼程序 瀏覽:949
小學教資信息技術是什麼 瀏覽:765
五菱汽車代理多少錢 瀏覽:300