數據傳輸過程詳解
一、FTP客戶端發送數據到FTP伺服器端,詳述其工作過程。兩台機器的連接情況如下圖所示:
詳細解答如下
1.1、假設初始設置如下所示:
客戶端FTP埠號為:32768
伺服器端FTP埠號為:21
1.2、不同網路段上的兩台計算機通過TCP/IP協議通訊的過程如下所示:
協議是水平的,服務是垂直的。
物理層,指的是電信號的傳遞方式,透明的傳輸比特流。
鏈路層,在兩個相鄰結點間的線路上無差錯地傳送以幀為單位的數據。
網路層,負責為分組交換網上的不同主機提供通信,數據傳送的單位是分組或包。
傳輸層,負責主機中兩個進程之間的通信,數據傳輸的單位是報文段。
網路層負責點到點(point-to-point)的傳輸(這裡的「點」指主機或路由器),而傳輸層負責端到端(end-to-end)的傳輸(這裡的「端」指源主機和目的主機)。
1.3、數據包的封裝過程
不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網路層叫做數據報(datagram),在鏈路層叫做幀(frame)。數據封裝成幀後發到傳輸介質上,到達目的主機後每層協議再剝掉相應的首部,最後將應用層數據交給應用程序處理。兩台計算機在不同的網段中,那麼數據從一台計算機到另一台計算機傳輸過程中要經過一個或多個路由器。
1.4、工作過程
(1)在PC1客戶端,將原始數據封裝成幀,然後通過物理鏈路發送給Switch1的埠1。形成的幀為:
註:發送方怎樣知道目的站是否和自己在同一個網路段?每個IP地址都有網路前綴,發送方只要將目的IP地址中的網路前綴提取出來,與自己的網路前綴比較,若匹配,則意味著數據報可以直接發送。也就是說比較二者的網路號是否相同。本題中,PC1和PC2在兩個網路段。
(2)Switch1收到數據並對數據幀進行校驗後,查看目的MAC地址,得知數據是要發送給PC2,所以Switch1就對數據幀進行存儲轉發,查看自己的MAC地址列表後,從埠2將數據轉發給路由器的S0埠。
(3)Router收到數據後,先對數據進行校驗,然後對IP數據報進行分析,重新對數據進行封裝,查看路由表後,從S1埠將數據發送出去,此時得到新的數據幀如下:
註:目的IP和源IP地址不會被改的,改變的是MAC,路由器會把遠端的源MAC地址改成下一跳的MAC地址,然後就發送出去
(4)Switch2接收到Router給它發送的數據後,進行校驗後直接存儲轉發,查看自己的MAC地址列表後,將數據幀從埠1發送給PC2伺服器端。
(5)PC2伺服器端收到數據後,先進行校驗,然後進行拆分,得到TCP報文段,由此可以知道目的埠號是21,然後把數據交付給相應的FTP應用進程進行處理。
二、在數據的傳輸中會出現以下一些問題,該如何解決?
1、針對數據鏈路層,傳輸的數據會出現差錯或者丟失的問題,也有兩端傳輸速度不同的問題,如何解決這些問題?
答:首先我們假設主機A向主機B發送數據
(1)差錯控制
差錯控制方法分兩類,一類是自動請求重發ARQ,另一類是前向糾錯FEC,也叫前向糾錯碼(Forward Error Correction簡稱FEC)。
在ARQ方式中,當接收端發現差錯時,就設法通知發送端重發,直到收到正確的碼字為止,ARQ方式只使用檢錯碼。
在FEC方式中,接收端不但能發現差錯,而且能確定二進位碼元發生錯誤的位置,從而加以糾正,FEC方式必須使用糾錯碼。常用的糾錯碼有奇偶校驗碼、循環冗餘碼和海明碼等
例如:在數據幀中加上CRC,這樣主機B就可以檢驗所接收的數據是否有差錯,如果有差錯,那麼主機B可以向主機A發送一個否認幀NAK,以表示主機A應當重傳出現差錯的那個數據幀。
(2)丟失的解決辦法
超時重傳。如果主機A在發送完數據給主機B之後,若到了超時計時器所設置的重傳時間而還沒有收到主機B的任何確認幀ACK,則主機A就重傳前面所發送的這一數據幀。
(3)流量控制
①假設主機A向主機B傳輸的數據是無差錯的,那麼,最簡單的流量控制方法就是:發送方每發送一幀數據就暫時停下來,接收方收到數據幀之後就交付給主機,然後發一信息給發送方,表示接收的任務已經完成,這時,發送方再接著發送下一個數據幀。在這種情況下,接收方的接收緩存的大小隻要能夠裝得下一個數據幀即可。
②滑動窗口:分別在發送端和接收端設置發送窗口和接收窗口
發送窗口用來對發送端進行流量控制,為發送窗口的大小WT就是代表在還沒有收到對方確認信息的情況下發送端最多可以發送多少個數據幀。每收到對一個幀的確認,發送窗口就向前滑動一個位置。由此也可以知道,第一種流量控制發法中,WT=1。
在接收端設置接收窗口時為了控制可以接收哪些數據而不可以接收哪些數據,在接收端只有當收到的數據幀的發送序號落入接收窗口內才允許將該數據幀收下。每收到一個序號正確的幀,接收窗口就向前滑動一個位置。
2、IP數據報有它的長度,而數據傳輸過程中,一些中間設備也有一個相關的設置MTU(最大傳輸單元),如果現在假設IP數據報的長度是5000位元組,而MTU設置是1500位元組,那麼該怎麼辦?
答:解決的辦法是對IP數據報進行分片與重組。詳細過程如下:
2.1、 IP v4數據報格式
一個IP v4數據報由報頭和數據兩部分組成,其中數據包括高層需要傳輸的數據,而報頭是為了正確傳輸高層數據而增加的控制信息。報頭的前一部分是固定長度,共20位元組,是所有IP數據報必須具有的。在報頭的固定部分的後面是一些可選欄位,其長度是可變的。下圖給出了IPv4數據報的格式義。
IP數據報的格式
2.2、不同數據鏈路層協議的MTU值
一個路由器可能連接不同MTU的網路,如下圖
2.3、IP數據報分片
數據報分片時,每個分片前都要加上相應的IP報頭,形成新的IP數據報,除包含一些分片控制域(如標誌、偏移量)外,分片的報頭和原IP數據報的報頭基本一樣。
標識符、標誌、偏移量3個欄位在IP報頭中的作用是:
標識:佔16bit,標識數據報。當數據報長度超出網路最大傳輸單元(MTU)時,必須要進行分割,並且需要為分割段(fragment)提供標識。所有屬於同一數據報的分割段被賦予相同的標識值。
標誌:佔3bit,指出該數據報是否可分段。目前只有前兩個比特有意義。
標誌欄位中的最低位記為MF(More Fragment)。MF=1即表示後面「還有分片」的數據報。MF=0表這已是若干數據報片中的最後一個。
標誌欄位中間的一位記為DF(Don』t Fragment)。只有當DF=0時才允許分片。
片偏移:佔13bit,若有分段時,用以指出該分段在數據報中的相對位置,也就是說,相對於用戶數據欄位的起點,該片從何處開始。片偏移以8位元組為偏移單位,即每個分片的長度一定是8位元組(64Bit)的整數倍。
2.4、IP數據報重組
在最終的目的主機上將接收到的所有分片進行重新組裝的過程就是IP數據報重組。這時要根據數據報的標識、標誌、偏移量等欄位將分段的各個IP數據報重新組裝成完整的原始數據報。
2.5本題的詳解過程
數據報的數據部分為5000位元組長(使用固定首部),需要分片長度不超過1500位元組的數據報片。因固定首部長度為20位元組,因此每個數據報片的長度不能超過1480位元組。於是分為4個數據報片,其數據報片的數據部分長度分別為1480位元組、1480位元組、1480位元組和560位元組。原始數據報首部被複製為各數據報片的首部,但必須修改有關欄位的值。分片結果如下圖所示:
3、兩個主機的應用進程,也會出現差錯和丟失,兩端的緩存也不同,如何控制流量?應用進程如何與埠號進行匹配?
答:因為運輸層提供的功能是應用進程之間的邏輯通信,所以面向連接的傳輸控制協議TCP就保證了全雙工的可靠交付的服務。具體的有關差錯控制和流量控制如下面的詳細解釋:
3.1、運輸層為相互通信的應用進程提供了邏輯通信,如下圖所示:
3.2、TCP發送報文段的示意圖如下:
3.3、TCP 的數據編號與確認
TCP 協議是面向位元組的。TCP 將所要傳送的報文看成是位元組組成的數據流,並使每一個位元組對應於一個序號。
在連接建立時,雙方要商定初始序號。TCP 每次發送的報文段的首部中的序號欄位數值表示該報文段中的數據部分的第一個位元組的序號。
TCP 的確認是對接收到的數據的最高序號表示確認。接收端返回的確認號是已收到的數據的最高序號加 1。因此確認號表示接收端期望下次收到的數據中的第一個數據位元組的序號。
3.4、TCP 的流量控制與擁塞控制
(1)滑動窗口(進行流量控制)
TCP 採用大小可變的滑動窗口進行流量控制。窗口大小的單位是位元組。
在 TCP 報文段首部的窗口欄位寫入的數值就是當前給對方設置的發送窗口數值的上限。
發送窗口在連接建立時由雙方商定。但在通信的過程中,接收端可根據自己的資源情況,隨時動態地調整對方的發送窗口上限值(可增大或減小)。
上圖(a)表示發送端要發送 900 位元組長的數據,劃分為 9 個 100 位元組長的報文段,而發送窗口確定為 500 位元組。發送端只要收到了對方的確認,發送窗口就可前移。發送 TCP 要維護一個指針。每發送一個報文段,指針就向前移動一個報文段的距離。
上圖(b)表示發送端已發送了 400 位元組的數據,但只收到對前 200 位元組數
據的確認,同時窗口大小不變。現在發送端還可發送 300 位元組。
上圖(c)表示發送端收到了對方對前 400 位元組數據的確認,但對方通知發送端必須把窗口減小到 400 位元組。現在發送端最多還可發送 400 位元組的數據。
利用可變窗口大小進行流量控制雙方確定的窗口值是 400,如下圖所示:
(2)擁塞控制
為了更好地進行擁塞控制,網際網路標準推薦使用一下三種技術,慢啟動(slow_start)、加速遞減(multiplicative decrease)和擁塞避免(congestion avoidance)。
「擁塞避免」並非指完全能夠避免了擁塞。利用以上的措施要完全避免網路擁塞還是不可能的。「擁塞避免」是說在擁塞避免階段把擁塞窗口控制為按線性規律增長,使網路比較不容易出現擁塞。
3.5、埠號的識別
(1)埠的概念:
埠就是運輸層服務訪問點 TSAP。
埠的作用就是讓應用層的各種應用進程都能將其數據通過埠向下交付給運輸層,以及讓運輸層知道應當將其報文段中的數據向上通過埠交付給應用層相應的進程。
從這個意義上講,埠是用來標誌應用層的進程。
(2)埠在進程之間的通信中所起的作用
(3)埠號
埠用一個 16 bit 埠號進行標誌。
埠號只具有本地意義,即埠號只是為了標誌本計算機應用層中的各進程。在網際網路中不同計算機的相同埠號是沒有聯繫的。
埠號分為兩類:
一類是熟知埠,其數值一般為 0~1023。當一種新的應用程序出現時,必須為它指派一個熟知埠。
另一類則是一般埠,用來隨時分配給請求通信的客戶進程。
埠的作用可用下圖來表示:
(4)插口
TCP 使用「連接」(而不僅僅是「埠」)作為最基本的抽象,同時將 TCP 連接的端點稱為插口(socket),或套接字、套介面。插口包括IP地址(32bit)和埠號(16bit),共48bit。插口和埠、IP 地址的關係是:


TAG:電子工程專輯 |