關於遊戲開發網路協議方面的一些雜談

2021-09-25 02:25:19 字數 2824 閱讀 7607

子網掩碼的主要作用有兩個:

一、用於遮蔽ip位址的一部分以區別網路標識和主機標識,並說明該ip位址是在區域網上,還是在遠端網上。在設定電腦ip時,會碰到兩個重要的引數,乙個是ip位址,乙個是子網掩碼。ip位址是網際網路上每個子網或每個主機在網路上的唯一身份標籤。

使用子網是為了減少ip的浪費。因為隨著網際網路的發展,越來越多的網路產生,有的網路多則幾百台,有的只有區區幾台,這樣就浪費了很多ip位址,所以要劃分子網。使用子網可以提高網路應用的效率。

二、用於將乙個大的ip網路劃分為若干小的子網路。通過ip 位址的二進位制與子網掩碼的二進位制進行與運算,確定某個裝置的網路位址和主機號,網掩碼是一種用來指明乙個ip位址所標示的主機處於哪個子網中。子網掩碼不能單獨存在,它必須結合ip位址一起使用。

子網掩碼的作用,就是將某個ip位址劃分成網路位址和主機位址兩部分。也就是說通過子網掩碼分辨乙個網路的網路部分和主機部分。子網掩碼一旦設定,網路位址和主機位址就固定了。

子網乙個最顯著的特徵就是具有子網掩碼。與ip位址相同,子網掩碼的長度也是32位,也可以使用十進位制的形式。

因為如果你不主動請求會話的話,server端根本不知道你在**,所有的網路連線都是客戶端向伺服器端傳送請求。

tcp四次揮手,由於tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。

由於tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個 fin只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

(1)客戶端a傳送乙個fin,用來關閉客戶a到伺服器b的資料傳送(報文段4)。

(2)伺服器b收到這個fin,它發回乙個ack,確認序號為收到的序號加1(報文段5)。和syn一樣,乙個fin將占用乙個序號。

(3)伺服器b關閉與客戶端a的連線,傳送乙個fin給客戶端a(報文段6)。

(4)客戶端a發回ack報文確認,並將確認序號設定為收到序號加1(報文段7)

tcp採用四次揮手關閉連線如圖所示為什麼建立連線協議是三次揮手,而關閉連線卻是四次握手呢?

這是因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn(ack起應答作用,而syn起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉socket,也即你可能還需要傳送一些資料給對方之後,再傳送fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack報文和fin報文多數情況下都是分開傳送的。

以前只知道tcp穩定,面向連線。udp不穩定,面向資料報。

tcp最根本的區別在於傳輸資料的方式

tcp基於流的方式,需要建立連線,建立連線簡單地來說就是server端知道了你的ip位址和埠號。

優點:面向流,可以保證傳輸的可靠性和有序性,但是如果中間一段丟失的話,可能就會一直卡住,等待server端傳送接收訊號。由於滑動視窗有限制(所以傳送的包體大小不定,會出現黏包和拆包,這需要在定製自己的資料報協議時解決,比如在包體的最前面設定乙個固定位元組大小的資料用來表示本次包體的長度。

udp基於資料報的方式,udp不會像tcp那樣一段一段的傳送,然後等待上一次傳送成功後傳送下一段,udp是將幾個需要傳送的包直接全部發布到網路上,然後每個包走自己的傳輸路徑,可能相同可能不同,所以到達server端時,順序可能會被打斷。但是最重要的問題是使用udp時,包體會丟失,因為沒有tcp那樣可靠,還有防火牆等等的原因,udp的坑很多。

關於專案的資料報怎麼去設計也是乙個比較重要的問題。

這三個都是用來序列化檔案和進行儲存或資訊傳輸的。

三者大部分都一樣,json和xml是文字的形式,較大,更側重於結構化,資訊表示的更直觀。

protobuf是二進位制的形式,較小,更側重於傳輸,資訊表示沒那麼直觀。

確定資料中各種資料型別也是很重要的,如果你用乙個2位元組就可以表示的資訊,用了4位元組。

假如一天的流量是100w次,那麼你就多傳輸了2 * 100w的位元組,即浪費速度,也浪費空間。 

win32下:

sizeof(char):1

sizeof(short):2

sizeof(int):4

sizeof(long):4

sizeof(long long):8

sizeof(unsigned int):4

sizeof(float):4

sizeof(double):8

sizeof(pointer):4

x64下:

sizeof(char):1

sizeof(short):2

sizeof(int):4

sizeof(long):4

sizeof(long long):8

sizeof(unsigned int):4

sizeof(float):4

sizeof(double):8

sizeof(pointer):8

int16, 等於short

int32, 等於int

int64, 等於long,

這些都與作業系統的位數有關

32位和64位系統在windows下基本資料型別的大小都是一樣的。只有指標的大小不一樣!32位指標大小為4byte,而64位的指標大小為8byte。

linux下,long型是64位的,這一點是和windows不同的地方。64位系統下是可以執行32位程式的。但是反過來的話是執行不了的。

重連這一塊是乙個很大的坑,以後再談。

Vue關於元件方面的一些總結

新舊虛擬dom經過diff比對,形成乙個補丁 patch s 區域性更新真實dom 按dom樹的層級分解比較 嚴格的資料結構劃分 同key值對比 v for寫key,其他的元素會預設分配key 注意 在v for對乙個陣列迴圈渲染的時候千萬別用索引值當做key值。因為在是涉及陣列的增刪時候,索引值每...

AIX方面的一些資源

常用aix論壇位址介紹 aix論壇 http loveunix.style images 1 logo4.gif img url 愛u家園 是大家的快樂空間 aix使用者論壇 chinaunix的aix論壇 aix中國論壇 思達奇公司的aix 技術區 itpub的unix論壇 銀信公司 aix練習 ...

一些語言方面的技巧

1.數字轉string int x string id stringstream ss ss id 2.字串轉數字 int num string s stringstream ss s ss num char str sscanf str,d num 將字串轉換成整數 sscanf str,f fl...