可靠性傳輸
1. 差錯控制
傳送方將資料幀傳送, 但是當傳送方傳送的是乙個 1的時候此時接受方卻接受的是乙個 0.
(1)校驗
接收方如果幀校驗接受到的幀沒有問題, 則對傳送方傳送乙個肯定性的確認, 當對這個資料幀進行校驗發現這個幀有問題的時候, 此時接受方一種是將這個資料幀扔掉, 另一種就是告訴傳送方接收的資料幀有問題, 此時向傳送方傳送乙個否定性確認訊息.
(2)差錯檢測和校正
檢錯就是如果發現資料幀傳輸的有問題, 則將接受的資料幀扔掉, 校正就是如果接收方發現接收到的資料幀有問題, 就將這個資料幀進行較正最常用的校驗碼是crc校驗碼
(2)重發
(3)幀的編號
乙個幀中包含了資料真正的資料, 幀的校驗碼, 幀的序號, 確認號, 校驗資訊, 幀頭, 幀尾. 接收方在接收到幀的時候向傳送方傳送乙個確認訊息, 而這個訊息可能也會在中途丟失, 此時當定時器到達時間的時候, 傳送方就會再次傳送乙個幀, 此時為了防止幀的重複接受, 資料幀中應該包含乙個編號來標示資料幀的序號. 在接受的時候, 接收方也必須傳送給傳送方自己接受到了那個幀, 因此資料幀中也應該包含乙個確認號, 來識別接受方接受的是那個資料幀.
2. 流量控制
傳送方傳送資料的速度太快, 而接收方接受資料的速度太慢, 此時傳送方就需要降低自己的傳送速度.當傳送方傳送資料速度非常快, 而接受方接收資料的速度又特別的滿, 此時在接收方設定乙個緩衝區, 當緩衝區滿達到一定限度的時候, 此時的接受方就給傳送方傳送乙個資訊, 告訴傳送方讓其暫停傳送等候通知.
基本資料鏈路協議
wait_for_evet(&event)
其中引數 event 就是需要等待的事件
每一層都是乙個對應的程序, 它們都是處於乙個等待的狀態, 對於傳送方來說, 網路層有資料要交給資料鏈路層, 資料鏈路層對應的程序就要等待網路層將準備好的資料交給自己, 然後資料鏈路層將資料進行封裝交給物理層, 物理層將資料傳送出去, 對於接收方, 資料鏈路層時刻準備著物理層將資料交給自己, 然後資料鏈路層將資料進行解包再將資料交給網路層.
1. 無限制的單工協議
(1)簡化一
a 和 b 之間的通道傳輸不會出錯, 因此在傳輸的過程中就不需要進行差錯檢驗
(2)簡化二
a 和 b 之間在傳輸的過程中不會接受端可以無限的進行資料的接收
因此有了上面兩個簡化的話, 那麼對於資料鏈路層來說, 它只管進行資料的封裝以及上下層之間的互動即可, 其他的任務都不用管. 傳送方只管將物理層的資料傳送出去即可. 資料鏈路層每次去問網路層看有沒有資料需要自己去傳送, 如果沒有就繼續dengdai,如果有資料需要自己傳送, 那麼就從 wait_for_event 這個函式中跳出
//傳送方
void sender1(vod)
}
對於接受方而言, 接收方只需要一直等待, 只要有物理層給自己傳送資料, 接受方就將資料直接接受, 然後將資料解包送給上面的網路層
//接收方
void receiver1(void)
}
2. 單工的停 - 等協議
由於接收方的接收資料的能力有限, 所以傳送方不能一直傳送訊息, 傳送方在傳送完資料後就停下來, 等待接收方給自己傳送乙個訊號, 接收方在接受到乙個資料後, 將這個資料進行處理, 等到資料處理完之後接收方給傳送方傳送乙個訊號告訴傳送方現在資料已經處理完畢可以進行傳送了, 此時傳送方接受到這個訊號後才可以繼續進行資料的傳送.
//傳送方
void sender2(vod)
}
//接收方
void receiver2(void)
}
3. 有雜訊的通道
在協議二的基礎上加上乙個定時器. 同時也有差錯檢驗. 對於傳送方必須有乙個時間限制,當定時器時間已經到的時候, 接受方還沒有給自己乙個確認訊號, 此時傳送方就認為接受方沒有接收到幀, 對於接受方而言, 在收到資料後將資料進行處理, 處理完資料後就需要在定時器的時間範圍內給傳送方乙個訊號, 告訴接受方自己接受到資料. 同時對於傳送方而言, 為了防止幀的重**送, 它必須有乙個幀的序號, 來記錄下乙個傳送的幀的序號, 而對於接受方為了防止接收幀的重複, 此時接受方就需要有乙個幀的序號來記錄下乙個要接收幀的序號. 因此用乙個位元位就可以記錄幀的序號. 傳送方傳送乙個 1 號幀, 接收方等待接收 1 號幀, 接受方接收到 1 號幀的時候就傳送乙個確認等待接受 0 號幀, 此時傳送方再傳送乙個 0 號幀, 接收方等待接收 0 號幀, 接收方接收到 0 號幀的時候就傳送乙個確認訊號等待接收 1 號幀. 同時協議三增加乙個應答號, 應答號用來表示當前收到的是哪個幀.幀的序號是傳送方傳送的幀的序號, 乙個位元位就好了, 應答號是接收方接收到的幀的序號, 只需乙個位元位.
4. 雙向傳輸
當接收方接收到資料後對其進行處理, 然後當它要將資料傳送給上面的網路層的時候會給傳送方傳送乙個確認訊號, 而在此過程中這個訊號每次都會被丟失, 此時接受方就會因為接受不到確認訊號且定時器已經到達時間, 此時傳送方會不斷地傳送重複幀, 接受方會不斷地將接受到的重複幀扔掉, 此時系統會陷入死鎖狀態.
為了提高通道的利用率, 我們採用兩條通道來解決傳送方和接受方的通訊. 對於傳送方, 當傳送方傳送乙個資料幀的時候, 就將它所傳送的幀的型別也包括在這個幀中. 假如兩個程序 a 和 b, 當 a 向 b 傳送資料幀的時候, 在這個資料幀的首部加上乙個幀的型別, b 接受到 a 發來的資料幀的時候就先檢查資料幀的型別, 當 b 檢查該資料幀的時候, 發現這是乙個資料幀的時候, 此時就將這個資料幀交給上面的網路層, 再向 a 傳送乙個應答幀, 當 a 接收到這個幀的時候就先檢查幀的型別, 當發現這是乙個應答幀的時候就說明發給對方的幀對方成功接受, 此時就從網路層取下乙個資料進行傳送.
5. 滑動視窗
包含樓量控制, 差錯處理. 每一方都有乙個傳送視窗, 傳送視窗表示傳送一次最多傳送多少資料對方可以接收. 每乙個接收方有乙個接收視窗, 這個視窗的大小可以根據傳送方的不同設定自己一次可以接收資料的接受量.
(1)滑動視窗原理(設 wt = 5, wr = 3)
傳送方傳送資料時一次傳送 5 個資料幀(0 ~ 4)之後就停下來, 接受方接受資料的時候一次接受多個, 其中它接受乙個資料初處理乙個資料, 接受到第三個資料的時候就處理第三個資料, 當處理完第三個資料(2)的時候給傳送方乙個確認訊息2, 此時傳送方就知道接收方接受到了第三個資料了, 於是下次從 2 號資料開始傳送.
(2) 一維滑動視窗協議
a 傳送乙個資料幀傳送視窗滿了, 此時就必須等待 b給 a 傳送確認訊息, b 接受到乙個資料幀後等給 a 傳送乙個確認訊息,a 接受到這個確認訊息後知道 b 成功接受到了 自己的訊息, 於是傳送下乙個資料幀, 到了 b 之後, b 傳送乙個資料給 a 時, 此時 b 的視窗已滿, 於是它就停下來等待 a 的確認訊息, a 接受到這個訊息後就傳送乙個確認訊息給 b, 此時 b 就知道 a 成功接受到了訊息
a 傳送乙個幀後 b 接受到乙個幀, 然後傳送乙個確認訊息給 b, b接收到確認訊息後傳送
(3)後退 n 幀協議
傳送方有大於 1 個的傳送視窗, 接受方只有乙個接受視窗. 傳送端每次傳送資料幀的時候一次傳送一批資料幀. 當有乙個幀出錯, 將後面的所有的幀全部重發. 加入傳送方傳送 0, 1, 2, 3, 4, 5, 6 七個幀, 接受方此時接受乙個 0 號幀, 處理完 1 號幀後就傳送乙個0 號確認訊息, 此時傳送方滑動視窗轉過就可以傳送第八個資料幀了, 接著接受方接收到了乙個 1 號幀, 處理 1 號幀, 處理完之後傳送乙個 1 號確認訊息給 傳送方, 傳送方就可以傳送第九個資料幀了, 但是此時 2 號幀丟失了, 此時丟失的這個幀就必須等到傳送方的定時器時間到的時候傳送方才知道對方沒有接受到 2 號幀, 於是就將2號後面所有的資料幀進行重新傳送. 通道利用率較低, 適用於出錯率較低的通道. 是一種實用的 ppp 可靠傳輸. 當資料幀的序號是 n 位的時候, 此時傳送方的傳送視窗是 2 ^ n - 1 個滑動視窗, 接收方的視窗數是 1
(4) 選擇性重發
在後退 n 幀協議上的基礎上增加的功能是對於出錯的資料幀, 剛才已經發過的資料幀不用重新傳送, 只對出錯的資料幀進行重新傳送.傳送視窗大於 1, 接受視窗大於 1.
Linux TCP傳輸可靠性
在物理網路上傳輸的資料 幀頭 網路層協議 ip 傳輸層協議報頭 tcp udp 應用層協議報頭 http 使用者需要傳遞的資料 幀尾 tcp報頭是由 20個位元組的固定部分 40位元組的選項部分 可選 確認號 確認機制 超時重傳機制 保證資料能夠完整地到達對方 序號 進行排序和去重,保證到達的資料不...
TCP 保證傳輸可靠性
tcp協議保證資料傳輸可靠性的方式主要有 計算方式 在資料傳輸的過程中,將傳送的資料段都當做乙個16位的整數。將這些整數加起來。並且前面的進製不能丟棄,補在後面,最後取反,得到校驗和。傳送方 在傳送資料之前計算檢驗和,並進行校驗和的填充。接收方 收到資料後,對資料以同樣的方式進行計算,求出校驗和,與...
資料鏈路層和傳輸層提供的可靠傳輸問題
我們知道資料鏈路層和傳輸層都提供可靠傳輸服務,傳輸層是一定要提供的,比如tcp就是可靠傳輸協議,保證了端到端的可靠傳輸,確保每乙個報文段都能按序送達對方,如果下層傳輸丟失,也能及時通過arq協議來重傳,那麼為什麼會丟失呢,可能是因為網路層的路由器負載過高,導致後來的資料報被丟棄,那麼傳輸層就需要重傳...