c 實時通訊系統 基礎知識TCP IP篇

2022-08-16 00:18:17 字數 4213 閱讀 6730

編寫前的基礎知識

c/s結構:

c/s是client/server,即客戶端/伺服器端架構,一種典型的兩層架構。客戶端包含乙個或多個在使用者的電腦上執行的程式伺服器端有兩種,一種是資料庫伺服器端,客戶端通過資料庫連線訪問伺服器端的資料;另一種是socket伺服器端,伺服器端的程式通過socket與客戶端的程式通訊。我們在本次的搭建就是利用的是socket伺服器端,其架構如下圖所示:

ps:如果想對其進行進一步的了解可以看看這篇文章:技術分為阻塞和非阻塞兩種,兩種的區別是是否立刻的返回,非阻塞的方式資源的利用率會更高。

協議)伺服器端:

socket()建立監聽socket,建立tcp套接字

bind()繫結伺服器端口,將套接字繫結到本地的位址和埠上

listen()監聽客戶端連線accept()接受連線

recv/send接收及傳送資料

close()關閉socket

客戶端:

socket()建立監聽socket

connect()連線伺服器

recv/send接收及傳送資料

close()關閉socket

有關於eproll:  ,這裡我們不詳細介紹,我們主要來介紹一下socket通訊,socket是乙個程式設計介面(api),tcp/ip協議需要向開發者提供做網路開發用的介面,這就是socket介面,它是對tcp/ip協議網路通訊的封裝,首先我們來介紹一下tcp/ip協議族:

但是呢在此之前我們先介紹乙個基礎的知識,就是ip位址和mac位址的區別,首先麼乙個上網的裝置都會有乙個網絡卡的東西(又叫做網路介面卡),每台上網的電腦的都有乙個不同的mac位址就像是乙個身份證一樣的東西,而ip位址是裝置位址一樣的存在,ip位址分為內網ip位址和外網ip位址,再外網中每個路由都有不同的ip位址,而連線路由的裝置都有相同的外網ip,但是在這個區域網中每個裝置的內網ip都各不相同,其實就像每乙個人都有屬於自己的身份證件,如果我們根據身份證向某人發快遞那麼將非常的困難,而外網的ip位址就像省市小區一樣具有唯一性,可能幾號樓幾單元(內網)在不同的區域網中可能相同,但是加上外網的ip後基本就不會搞錯了,而且我們傳送快遞的效率將大大的提公升。

兩個主機通訊三個條件:mac,ip,埠(pid)

好了接下來我們來介紹tcp/ip

整個資料幀由首部資料尾部三部分組成,首部固定為14個位元組,包含了目標mac位址、源mac位址和型別;資料最短為46個位元組,最長為1500個位元組,如果需要傳輸的資料很長,就必須分割成多個幀進行傳送;尾部固定為4個位元組,表示資料幀校驗序列,用於確定資料報在傳輸過程中是否損壞。因此,乙太網協議通過對電訊號進行分組並形成資料幀,然後通過物理介質把資料幀傳送給接收方。所以鏈路層的主要工作就是對電訊號進行分組並形成具有特定意義的資料幀,然後以廣播的形式通過物理介質傳送給接收方。

對於上面的過程,有幾個細節問題值得我們思考:

傳送者如何知道接收者的mac位址?

傳送者如何知道接收者和自己同屬乙個子網?

如果接收者和自己不在同乙個子網,資料報如何發給對方?

為了解決這些問題,網路層引入了三個協議,分別是ip協議arp協議路由協議。ip協議

通過前面的介紹我們知道,mac位址只與廠商有關,與所處的網路無關,所以無法通過mac位址來判斷兩台主機是否屬於同乙個子網。

因此,網路層引入了ip協議,制定了一套新位址,使得我們能夠區分兩台主機是否同屬乙個網路,這套位址就是網路位址,也就是所謂的ip位址。

ip位址目前有兩個版本,分別是ipv4ipv6,ipv4是乙個32位的位址,常採用4個十進位制數字表示。ip協議將這個32位的位址分為兩部分,前面部分代表網路位址,後面部分表示該主機在區域網中的位址。由於各類位址的分法不盡相同,以c類位址192.168.24.1為例其中前24位就是網路位址,後8位就是主機位址。因此,如果兩個ip位址在同乙個子網內,則網路位址一定相同。為了判斷ip位址中的網路位址,ip協議還引入了子網掩碼,ip位址和子網掩碼通過按位與運算後就可以得到網路位址。

由於傳送者和接收者的ip位址是已知的(應用層的協議會傳入), 因此我們只要通過子網掩碼對兩個ip位址進行and運算後就能夠判斷雙方是否在同乙個子網了。

arp協議

arp首先會發起乙個請求資料報,資料報的首部包含了目標主機的ip位址,然後這個資料報會在鏈路層進行再次包裝,生成乙太網資料報,最終由乙太網廣播給子網內的所有主機,每一台主機都會接收到這個資料報,並取出標頭里的ip位址,然後和自己的ip位址進行比較,如果相同就返回自己的mac位址,如果不同就丟棄該資料報。arp接收返回訊息,以此確定目標機的mac位址;與此同時,arp還會將返回的mac位址與對應的ip位址存入本機arp快取中並保留一定時間,下次請求時直接查詢arp快取以節約資源。cmd輸入 arp -a 就可以查詢本機快取的arp資料。

路由協議

通過arp協議的工作原理可以發現,arp的mac定址還是侷限在同乙個子網中,因此網路層引入了路由協議,首先通過ip協議來判斷兩台主機是否在同乙個子網中,如果在同乙個子網,就通過arp協議查詢對應的mac位址,然後以廣播的形式向該子網內的主機傳送資料報;如果不在同乙個子網,乙太網會將該資料報**給本子網的閘道器進行路由。閘道器是網際網路上子網與子網之間的橋梁,所以閘道器會進行多次**,最終將該資料報**到目標ip所在的子網中,然後再通過arp獲取目標機mac,最終也是通過廣播形式將資料報傳送給接收方。

而完成這個路由協議的物理裝置就是路由器,在錯綜複雜的網路世界裡,路由器扮演者交通樞紐的角色,它會根據通道情況,選擇並設定路由,以最佳路徑來**資料報。

ip資料報

在網路層被包裝的資料報就叫ip資料報,ipv4資料報的結構如下圖所示:

ip資料報由首部和資料兩部分組成,首部長度為20個位元組,主要包含了目標ip位址和源ip位址,目標ip位址是閘道器路由的線索和依據;資料部分的最大長度為65515位元組,理論上乙個ip資料報的總長度可以達到65535個位元組,而乙太網資料報的最大長度是1500個字元,如果超過這個大小,就需要對ip資料報進行分割,分成多幀傳送。

所以,網路層的主要工作是定義網路位址,區分網段,子網內mac定址,對於不同子網的資料報進行路由。

傳輸層其實就是tcp(又稱確認版udp,主要傳送控制指令)或是udp層(傳送資料指令),將每個應用程式分配埠,將資料傳送到具體的應用程式。

應用層就不多講了,其實總結起來就是當你輸入乙個**並按下回車鍵的時候,首先,應用層協議對該請求包做了格式定義;緊接著傳輸層協議加上了雙方的埠號,確認了雙方通訊的應用程式;然後網路協議加上了雙方的ip位址,確認了雙方的網路位置;最後鏈路層協議加上了雙方的mac位址,確認了雙方的物理位置,同時將資料進行分組,形成資料幀,採用廣播方式,通過傳輸介質傳送給對方主機。而對於不同網段,該資料報首先會**給閘道器路由器,經過多次**後,最終被傳送到目標主機。目標機接收到資料報後,採用對應的協議,對幀資料進行組裝,然後再通過一層一層的協議進行解析,最終被應用層的協議解析並交給伺服器處理。

而socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。

紅外通訊基礎知識

q什麼是irda紅外通訊?紅外通訊,顧名思義,就是通過紅外線傳輸資料。在電腦技術發展早期,資料都是通過線纜傳輸的,線纜傳輸連線麻煩,需要特製介面,頗為不便。於是後來就有了紅外 藍芽 802.11等無線資料傳輸技術。在紅外通訊技術發展早期,存在好幾個紅外通訊標準,不同標準之間的紅外裝置不能進行紅外通訊...

通訊基礎知識(一)

1.常見2g無線通訊協議 gsm分頻多重進接 txt gprs edge和cdma1x分碼多重進接兩種,傳輸速度很慢 2.3g一般的資料通訊頻寬在500kb s以上,常見的有三種標準 jpg wcdma cdma2000 td scdma 3.目前4g標準 wimax,hspa lte 3.9g a...

通訊基礎知識回顧

連續訊號離散化的基本依據。取樣頻率大於訊號中最高頻率的2倍時,取樣之後的數碼訊號完整地保留了原始訊號中的資訊,一般2.56 4倍。用基帶訊號控制載波訊號的某個或幾個參量的變化 舉個例子 電台收音機。整個過程就是根據主持人的聲音 基帶訊號 改變高頻波 載波訊號 的幅度 調幅am 或頻率 調頻fm 這一...