當前位置:首頁 » 操作系統 » rudp源碼

rudp源碼

發布時間: 2022-09-25 12:45:54

❶ 【面經】位元組跳動-後端開發-2019秋招

https://zhuanlan.hu.com/p/50186804

因為每個人的理解不太一樣,所以我在這里就不給出所謂的答案了,大家可以根據自己的理解加以描述,我只在一些地方做出一些提示。有的問題已經忘了,大概也就這些了。

線程用於小任務,而進程用於更多的'重量級'的任務- 應用基本執行。 一個線程和進程之間的另一個區別是,在同一進程中的線程共享相同的地址空間,而不同的進程沒有。 因此線程可以讀寫同樣的數據結構和變數,便於線程之間的通信。 

定義方面:進程是程序在某個數據集合上的一次運行活動;線程是進程中的一個執行路徑。

進程間的通信主要是指多個進程間的數據交互。
同步主要指維護多個進程或者線程之間數據的准確性和一致性。

進程通信方式:管道(Pipe)、信號(signal)、信號量(semophere)、消息隊列(message queue)、共享內存(shared memory)、套接字(socket)。

同步方式:將線程串列化(wait notify方法來睡眠和喚醒線程)、互斥鎖(加鎖 mutex)、管程、臨界區、信號量

TCP的優點: 可靠,穩定。TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。TCP的邏輯通信信道是全雙工的可靠信道。 
TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。

UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……
UDP的缺點: 不可靠,不穩定。因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網路質量不好,就會很容易丟包。
面向數據報: 不能夠靈活的控制讀寫數據的次數和數量,應用層交給UDP多長的報文, UDP原樣發送, 既不會拆分, 也不會合並。但是不會存在粘包的問題。

三次握手:為了保證接收方和發送方的接收能力和發送能力都正常。
四次揮手:為了釋放全雙工的信道。所以是單獨釋放和確認的。

這是因為服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文里發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方是否現在關閉發送數據通道,需要上層應用來決定,因此,己方ACK和FIN一般都會分開發送。

TCP通過序列號、確認應答、超時重傳、擁塞控制來保證傳輸的可靠性

確認應答機制&序列號
TCP將每個位元組的數據都進行了編號,即為序列號。
每一個ACK都帶有對應的確認序列號,意思是告訴發送者,我已經收到了哪些數據;;下一次你從哪裡開始發。

超時重傳&序列號
主機A發送數據給B之後, 可能因為網路擁堵等原因, 數據無法到達主機B; 如果主機A在一個特定時間間隔內沒有收到B發來的確認應答, 就會進行重發;主機A未收到B發來的確認應答,也可能是因為ACK丟失了,因此主機B會收到很多重復數據,這時候利用序列號可以使得主機B來實現數據報文的去重。

擁塞控制
每次發送數據包的時候, 將擁塞窗口和接收端主機反饋的窗口大小做比較, 取較小的值作為實際發送的窗口。
擁塞控制, 歸根結底是TCP協議想盡可能快的把數據傳輸給對方, 但是又要避免給網路造成太大壓力的折中方案。

TCP通過滑動窗口、流量控制、延遲應答、捎帶應答來提升傳輸的效率

滑動窗口機制
1. 窗口大小指的是無需等待確認應答而可以繼續發送數據的最大值.
2. 發送窗口內欄位的時候, 不需要等待任何ACK, 直接發送;
3. 收到第一個ACK後, 滑動窗口向後移動, 繼續發送下一個窗口欄位的數據; 依次類推;
4. 操作系統內核為了維護這個滑動窗口, 需要開辟發送緩沖區來記錄當前還有哪些數據沒有應答; 只有確認應答過的數據, 才能從緩沖區刪掉;
5. 窗口越大, 則網路的吞吐率就越高

流量控制
接收端處理數據的速度是有限的. 如果發送端發的太快, 導致接收端的緩沖區被打滿, 這個時候如果發送端繼續發送, 就會造成丟包, 繼而引起丟包重傳等等一系列連鎖反應。
1.接收端將自己可以接收的緩沖區大小放入TCP首部中的 "窗口大小" 欄位, 通過ACK端通知發送端;
2.窗口大小欄位越大, 說明網路的吞吐量越⾼高;
3.接收端一旦發現自己的緩沖區快滿了, 就會將窗口大小設置成一個更小的值通知給發送端;
4.發送端接受到這個窗口之後, 就會減慢自己的發送速度;
5.如果接收端緩沖區滿了, 就會將窗口置為0; 這時發送⽅方不再發送數據, 但是需要定期發送一個窗口

延遲應答
如果接收數據的主機立刻返回ACK應答, 這時候返回的窗口可能比較小.
窗口越大, 網路吞吐量就越大, 傳輸效率就越高. 我們的目標是在保證網路不擁塞的情況下盡量提高傳輸效率;

捎帶應答
在延遲應答的基礎上, 我們發現, 很多情況下, 客戶端伺服器在應用層也是 「一發一收」 的.
那麼客戶端在發送數據的同時,攜帶對方消息的報文序列號,來順帶通知對方,自己所接收到的報文情況

TCP擁塞控制主要有四種方法,滑動窗口機制、慢啟動機制、擁塞避免機制、快速重傳與恢復。

滑動窗口機制
在發送數據的時候,將發送窗口內的數據全部發送,才會停下來等待ACK,如果接收到對方的ACK信息,則滑動窗口前移。

慢啟動機制
在剛開始發送數據的時候,發送窗口取一個較小的值,來防止網路擁塞,同時探測對方的接收能力。如果收到了對方的ACK回應,則按照對方要求的窗口大小來調整發送窗口,否則進行窗口的擴大。窗口大小一開始是1,之後進行指數級別擴大,其中ssthresh為估算的一個發送窗口閾值,當窗口大小超過這個閾值,則之後的窗口每次擴大1,不再是指數級別的擴大。

還有一個概念是 AIMD(加法增大乘法減小):無論在慢啟動階段還是在擁塞控制階段,只要網路出現超時,就是將發送端的擁塞窗口(cwnd)置為1,ssthresh置為cwnd的一半,然後開始執行慢啟動演算法;當網路頻發出現超時情況時,ssthresh就下降的很快,為了減少注入到網路當中的分組數,而加法增大是執行擁塞避免演算法後,使擁塞窗口緩慢的增大,以防止網路過早出現擁塞。

快速重傳
快重傳演算法要求首先接收方收到一個失序的報文段後立刻發出重復確認,而不要等待自己發送數據時才進行捎帶確認。當發送方收到ACK之後,進行相應的報文重傳。

快速恢復
當發送方連續收到三個重復確認時(代表丟了三個包),執行「乘法減小」演算法,慢啟動門限減半,從而預防網路發生阻塞。由於發送方現在認為網路很可能沒有發生阻塞(因為沒有超時),因此現在不執行慢啟動演算法,而是把擁塞窗口(cwnd)值設置為慢啟動門限減半後的值,然後開始執行擁塞避免演算法,擁塞窗口cwnd值線性增大

TCP和UDP是傳輸層協議(物理層、數據鏈路層、網路層、傳輸層、會話層、表示層、應用層)

UDP沒有擁塞解決措施,當網路擁塞時,直接丟掉UDP的包。解決方式:在傳輸層之上,利用UDP並改造:如 RUDP(傳輸層)、RTP(應用層和傳輸層之間)、UDT(應用層)等

先把兩個鏈表按照奇偶性分成兩個鏈表(偶數構造成雙向鏈表);然後一個鏈表從頭部開始,另一個鏈表從尾部開始,插入第一個鏈表即可。

創建一個class,利用雙向鏈表構造這個雙向隊列,實現 getHead() getTail() addToHead() addToTail() popHead() popTail()

假設二維矩陣 g,查找的數為 t
先往右找(二分查找),找到 g[0][i]=a > t > g[0][i+1]=b,(所有行的 i+1, ... 的列的元素肯定全部小於 t,可以忽略),然後從 i 往下找(二分查找),找到 g[j][i] = c > t > g[j+1][i] = d,(說明 0~j 行的 0~i 列均大於 t,可以忽略),然後繼續往左找,再往下找,左下不斷交替,最終即可判斷是否存在 t

翻轉鏈表:三個指針解決。p c n 分別記錄 前一個節點,當前節點,後一個節點
初始化:前一個節點 p = NULL,當前節點 c = head,後一個節點 n = head.next;
運行:c.next = p; p = n.next ; n.next = c; c = p ; p = n; n = c.next; 注意判斷是不是null
結束:while(n != null)

redis有五種數據類型:string(字元串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字元串)
string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。
string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。
string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。
常用命令:set、get、decr、incr、mget等。
注意:一個鍵最大能存儲512MB。

Hash(哈希)
Redis hash 是一個鍵值(key→value)對集合;是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。
每個 hash 可以存儲 2^32 -1 鍵值對(40多億)。
常用命令:hget、hset、hgetall等。
應用場景:存儲一些結構化的數據,比如用戶的昵稱、年齡、性別、積分等,存儲一個用戶信息對象數據。

List(列表)
Redis 列表是簡單的字元串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
list類型經常會被用於消息隊列的服務,以完成多程序之間的消息交換。
常用命令:lpush、rpush、lpop、rpop、lrange等。
列表最多可存儲 2^32 - 1 元素 (4294967295, 每個列表可存儲40多億)。

Set(集合)
Redis的Set是string類型的無序集合。和列表一樣,在執行插入和刪除和判斷是否存在某元素時,效率是很高的。集合最大的優勢在於可以進行交集並集差集操作。Set可包含的最大元素數量是4294967295。
集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。
應用場景:
1、利用交集求共同好友
2、利用唯一性,可以統計訪問網站的所有獨立IP。
3、好友推薦的時候根據tag求交集,大於某個threshold(臨界值的)就可以推薦。
常用命令:sadd、spop、smembers、sunion, srem, srange, sinter等。
集合中最大的成員數為 232 - 1(4294967295, 每個集合可存儲40多億個成員)。

zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重復。
sorted set是插入有序的,即自動排序。
常用命令:zadd、zrange、zrem、zcard等。
當你需要一個有序的並且不重復的集合列表時,那麼可以選擇sorted set數據結構。
應用舉例:
(1)例如存儲全班同學的成績,其集合value可以是同學的學號,而score就可以是成績。
(2)排行榜應用,根據得分列出topN的用戶等。

Redis對於hash沖突,採用的是鏈地址法(其他的解決沖突的方法是再哈希和開放地址(線性探測和二次探測))
Redis為了控制哈希表佔用內存的大小,採用雙哈希表結構,並逐步擴大哈希表容量的策略。
Redis存儲一個對象時,首先使用 zipmap又稱為small hash存儲。這樣會節省很多哈希自身所需要的元數據的存儲開銷。當域欄位field的數量超過限制范圍,或者欄位值value的長度大小超過系統限定的位元組數,此時Redis將該zipmap轉化為正常的hash進行存儲。

參考  https://www.jianshu.com/p/7f53f5e683cf  源碼分析:

結構

但是在 dict 擴容縮容時,需要分配新的 hashtable,然後進行漸進式搬遷,這時候兩個 hashtable 存儲的分別是舊的 hashtable 和新的 hashtable。待搬遷結束後,舊的 hashtable 被刪除,新的 hashtable 取而代之。

rehash

擴容:當 hash 表中元素的個數(即第一個hash表的used)等於第一維數組的長度(即第一個hash表的size)時,就會開始擴容,擴容的新數組是原數組大小的 2 倍。不過如果 Redis 正在做 bgsave,為了減少內存頁的過多分離 (Copy On Write),Redis 盡量不去擴容 (dict_can_resize 標志是否能夠擴容),但是如果 hash 表已經非常滿了,元素的個數已經達到了第一維數組長度的 5 倍 (dict_force_resize_ratio),說明 hash 表已經過於擁擠了,這個時候就會強制擴容。

縮容:當 hash 表因為元素的逐漸刪除變得越來越稀疏時,,Redis 會對 hash 表進行縮容來減少 hash 表的第一維數組空間佔用。縮容的條件是元素個數低於數組長度的 10%。縮容不會考慮 Redis 是否正在做 bgsave。

收縮或者擴展哈希表需要將ht[0]表中的所有鍵全部rehash到ht[1]中,但是rehash操作不是一次性、集中式完成的,而是分多次,漸進式,斷續進行的,這樣才不會對伺服器性能造成影響

漸進式rehash(incremental rehashing)

漸進式rehash的關鍵:
1、字典結構dict中的一個成員rehashidx,當rehashidx為-1時表示不進行rehash,當rehashidx值為0時,表示開始進行rehash。
2、在rehash期間,每次對字典的添加(只加到 ht[1])、刪除(ht[0] ht[1] 全部查找並刪除)、查找(先查找 ht[0],如果未找到再查 ht[1])、或更新操作時,都會判斷是否正在進行rehash操作,如果是,則順帶進行單步rehash(調用_dictRehashStep 函數,該函數調用 dictRehash(d, 1)),並將rehashidx+1。新添加到字典的key-val一律會被保存到ht[1]裡面,而ht[0]不再進行任何添加操作,這一措施保證了ht[0]包含的key-val對數量只增不減,並隨著rehash操作的執行而最終變成空表。
3、dictRehash(dict* d, int n) 函數每次 rehash 前進 n 步(順序訪問 n 個 ht[0].table 的非空 dictEntry),如果 dictEntry 一直為空,則訪問到 n*10 個空 dictEntry 之後,本次 rehash 結束。
4、啟動 redis 會啟動一個 cron 定時任務(定時任務默認每秒執行 server.h CONFIG_DEFAULT_HZ=10 次),每次定時任務運行 1ms 的 rehash,調用 dictRehash(d, 100),執行100步rehash。
4、當rehash時進行完成時,將rehashidx置為-1,表示完成rehash。同時 ht[0]=ht[1],ht[1]=Null,更換表指針。

http1.1 通過設定 Connection:keep-alive 欄位來保持TCP的長連接,從而能夠在一次建立連接的情況下處理多個請求。
下一個請求需要在上一個請求的響應之後發送,因此會存在隊頭阻塞。
HTTP1.1進一步地支持在持久連接上使用管道化(pipelining)特性。管道化允許客戶端在已發送的請求收到服務端的響應之前發送下一個請求,藉此來減少等待時間提高吞吐率。但是需要響應的順序是按照請求順序進行,因此也會存在隊頭阻塞。

http2 開啟了完全的多路復用:一個連接被多個流復用。一個流表示一次請求-響應過程。
這個過程有兩個概念:流和幀。幀代表著最小的數據單位,每個幀會標識出該幀屬於哪個流,流也就是多個幀組成的數據流。
多路復用,就是在一個 TCP 連接中可以存在多條流。換句話說,也就是可以發送多個請求,對端可以通過幀中的標識知道屬於哪個請求。通過這個技術,可以避免 HTTP 舊版本中的隊頭阻塞問題,極大的提高傳輸性能。

掛掉,則一段時間之後,保活時間到期,則關閉。或者TCP等待時間結束,關閉TCP連接。或者採用應用層周期發送心跳包來檢測是否對方還在。

好處:
減少服務端連接壓力,減少佔用內存,提升連接吞吐量;
連接數的減少改善了網路擁塞狀況,慢啟動時間減少,擁塞和丟包恢復速度更快;
避免連接頻繁創建和關閉(三次連接、四次揮手);

四種方法
GET:獲取信息
POST:傳輸實體
PUT:上傳文件
DELETE:刪除文件

頭部信息:
Host (主機和埠號)
Connection (鏈接類型)
Upgrade-Insecure-Requests (升級為 HTTPS 請求)
User-Agent (瀏覽器名稱)
Accept (傳輸文件類型)
Referer (頁面跳轉處)
Accept-Encoding(文件編解碼格式)
Cookie (Cookie)
x-requested-with :XMLHttpRequest (是 Ajax 非同步請求)

arp發出去之後,交換機會查找自己的 mac 緩存表,如果存在,則直接返回,不存在則按照 IP 選擇埠進行發送,如果不存在 IP 的埠,則廣播。之後每個路由器都有隔離廣播的作用,其也緩存了 IP 對應的埠,並向對應的埠進行發送。

java 相關

創建進程調用的是OS哪些方法?具體說說

我們聊聊JAVA吧,你了解JVM嗎?給我講講

JVM具體會在什麼時候進行垃圾回收?JMM具體說說?

垃圾回收演算法具體說說?各種垃圾回收器了解嗎?什麼時候執行STOP THE WORLD?

感覺應該是總監,很高冷。

說說項目?(沒啥興趣)

我們聊聊JAVA吧,現在我要求設計一個容器,容器滿的時候生產者阻塞,容器空的時候消費者阻塞(我跟他講了一下BlockingQueue和Condition,然後用Condition來寫)

二叉樹的最大路徑。

好吧,今天就到這里了(哈???)

三面面完一度覺得自己涼透了,過兩天收到offer call,然後就收到offer了。白菜價,很高興了。

總的來說,個人感覺頭條面試演算法題不難(應該是給我放水了,謝謝面試官),不過絕對不能做不出來。基礎一定要牢固,一些細節問題一定要搞清楚,一般還會問一些設計問題,這種問題就要靠靈機一動了(其實主要還是看對各種原理的理解,例如說那道隊列的問題)。噢,對了,還有一件事,一面是要求自己寫測試用例運行的,所以coding一定要快准狠。

❷ Reliable UDP Protocol

RUDP:可靠用戶數據報協議(Reliable UDP)
可靠用戶數據報協議(RUDP)是一種基於可靠數據協議 (RDP: RFC908 和 1151 (第二版 )) 的簡單分組傳輸協議。作為一個可靠傳輸協議, RUDP 用於傳輸 IP 網路間的電話信號。它允許獨立配置每個連接屬性,這樣在不同的平台可以同時實施不同傳輸需求下的協議。 UDP/IP 協議中的 RUDP 是分層的並為虛擬連接提供可靠有序發送(直到重新發送的最大數目)。 RUDP 設計靈活,便於多種傳輸層使用。傳輸電訊號協議就是其應用之一。

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

為了與網路 TCP 通信量同時工作, RUDP 使用類似於 TCP 的重發機制和擁塞控制演算法。在最大化利用可用帶寬上,這些演算法都得到了很好的證明。

RUDP 特徵包括:

客戶機確認響應伺服器發送給客戶機的包;
視窗和擁塞控制,伺服器不能超出當前允許帶寬;
一旦發生包丟失,伺服器重發給客戶機;
比實時流更快速,稱為「緩存溢出」。
協議結構
1 2 3 4 5 6 7 8 16bit
SYN ACK EAK RST NUL CHK TCS 0 Header Length
Sequence number Ack number
Checksum

Control Bits ― 表示數據包當前狀態,具體細節如下:

SYN:SYN 位表示當前為同步段
ACK:ACK 位表示協議頭有效的承認序號。
EACK:EACK 位表示當前為擴展承認欄位。
RST:RST 位表示該數據包為復位欄位。
NUL:NUL 位表示該數據包為空欄位。.
CHK:CHK 位表示檢驗和欄位是否包含協議頭或協議頭與主體(數據)的檢驗和。
TCS:TCS位表示該數據包是傳輸連接狀態欄位。
0:表示該欄位的值必須設置為0。
Header Length ― 表示數據包中的用戶數據起始位置。

Sequence Number ― 當打開第一個連接,每個對等結構任意選取一個初始序列號。該序列號用於SYN欄位打開連接。在發送數據、空或復位欄位之前,每個傳送方會相應增加序列號。

Acknowledgement Number ― 該欄位表示傳送方最後傳送接收方接收的數據包的序列。

Checksum ― 協議頭中總會計算出檢驗和以確保完整性。這里檢驗和的演算法與UDP和TCP協議頭檢驗和的演算法相同。
RDP:可靠數據協議(Reliable Data Protocol)
可靠數據協議 RDP 是一種面向連接的傳輸協議,其主要設計來為主機監控應用程序如下載 / 上傳以及遠程調試進行有效的大批數據傳輸。RDP 嘗試只提供那些必需的服務,達到操作有效、尺度小的效果。其主要功能如下:

RDP 為每個傳輸層連接埠提供一個全雙工通信信道;
RDP 嘗試可靠發送所有用戶信息,一旦發送失敗,將向用戶報告錯誤。RDP 擴展 IP 數據報服務使之能夠可靠發送;
RDP 嘗試偵測並刪除所有損壞的和重復的數據段,它在數據段頭使用校驗碼及序列號實現這一過程;
RDP 隨意地提供數據段序列發送,必須在連接建立時就指定數據段的序列發送;
RDP 會響應確認序列之外的數據段,這會釋放發送端的資源。
與 TCP 相比,RDP 所支持的功能更為簡單。RDP 的流控制,緩沖以及連接管理模式都是相當簡單的。RDP 的目標就是能夠簡單有效地執行並能適合一系列的應用程序。

RDP 函數集也可能是子集從而進一步減小特殊執行的大小。例如,一台向其它主機請求下載的目標處理器可能執行一個僅支持默認的開放式函數和單連接的 RDP 模塊。這個模塊也可能選擇不執行非順序響應確認。

協議結構

RDP 第二版協議頭結構如下:

1 2 3 4 5 6 8 16bit
SYN ACK EAK RST NUL 0 Ver No Header Length
SourcePort
DestinationPort
Data Length
Sequence Number
Acknowledgement Number
Checksum
Variable header area …

Control flags ― 8個控制位劃分如下:

SYN:SYN 位表示當前為同步段。
ACK:ACK 位表示協議頭有效的承認序號。
EACK:EACK 位表示當前為擴展承認欄位。.
RST:RST 位表示該數據包為復位欄位。
NUL:NUL 位表示該數據包為空欄位。
0:表示該欄位的值必須設置為0。
Ver no:版本號,當前版本號為2。
Header length ― RDP 協議頭長度。

Source Ports ― 源地址,識別通信發生的過程。網路訪問協議頭中,源地址和目標地址的埠標識符的結合完全限定了連接並形成連接標識符。如此 RDP 可用於區分兩台主機間的多連接。

Destination Ports ― 目標地址,識別通信中的目標過程。

Data Length ― 該欄位中的數據長度(八位),該數據長度不包括 RDP 協議頭。

Sequence number ― 該欄位的序列號。

Acknowledgement number ― 如果 ACK 位設置在協議頭部,這就是欄位序列號,即該欄位發送端最後正確按序列接收的順序。一旦連接成功,就應該發送該欄位。

Checksum ― 檢驗和確保完整性。

Variable Header Area ― 用於傳輸 SYN 和 EACK 欄位的參數。

相關協議:UDP、RUDP、IP、TCP、ICMP

組織來源:RDP 由 IETF(http://www.ietf.org)定義在 RFC 908中並重新修訂在 RFC 1151中。

熱點內容
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:727
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:797
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:504
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:366
ef資料庫查詢數據 發布:2025-05-18 03:29:36 瀏覽:668
百度雲下載文件夾 發布:2025-05-18 03:17:33 瀏覽:674
php雲開發 發布:2025-05-18 03:12:41 瀏覽:447
sql語句顯示表 發布:2025-05-18 03:12:30 瀏覽:690
資料庫系統的例子 發布:2025-05-18 03:02:42 瀏覽:191
數字化儲存與編譯是什麼 發布:2025-05-18 02:56:55 瀏覽:217