『壹』 客戶端如何與伺服器進行通信
客戶端與伺服器進行通信的主要方式是通過網路協議來傳輸數據。這些協議定義了一系列的規則和標准,確保信息能夠在不同的計算機系統之間准確、高效地交換。
在網路通信中,客戶端通常是用戶所使用的設備或軟體,它發起與伺服器的連接請求以獲取或發送數據。伺服器則是專門用於處理這些請求並提供相應服務的計算機系統。客戶端與伺服器之間的通信可以基於多種協議,其中最常見的是傳輸控制協議/互聯網協議(TCP/IP),它提供了可靠的、面向連接的通信服務。
當客戶端需要與伺服器通信時,它會首先通過特定的埠向伺服器發送連接請求。一旦連接建立,客戶端就可以通過該連接發送和接收數據。這些數據可以是文本、圖像、視頻或任何其他類型的信息,具體取決於客戶端和伺服器所支持的應用層協議。例如,當我們在瀏覽器中訪問一個網頁時,客戶端(瀏覽器)會向伺服器發送HTTP請求,伺服器則會返回相應的HTML文檔,瀏覽器再將其解析並展示給用戶。
此外,還有一些其他的通信協議和方式可用於客戶端與伺服器之間的交互。例如,WebSocket協議允許在客戶端和伺服器之間建立持久的連接,以便實時地交換數據。這對於需要實時更新的應用程序(如在線聊天或實時數據監控)非常有用。另外,隨著物聯網和移動互聯網的發展,移動客戶端與伺服器之間的通信也變得越來越重要,這通常涉及到輕量級的通信協議和優化的數據傳輸方式以適應移動設備的特性和限制。
總之,客戶端與伺服器之間的通信是通過網路協議來實現的,這些協議確保了數據能夠在不同的計算機系統之間准確、高效地傳輸。具體的通信方式和協議選擇取決於應用程序的需求和網路環境的特點。
『貳』 網路游戲客戶端和伺服器之間數據怎麼交互的
最簡單的模式就是,
客戶端接收鍵盤,滑鼠等的消息,然後發送個伺服器。
伺服器收到這些消息後,發送給其他(指定或者所有的)客戶端
就像你在WEB聊天室聊天一樣。首先鍵盤輸入了一大堆文字。然後按下「遞交」按鈕,於是客戶端收集你填寫的那些文字內容,然後發送給伺服器。(也許裡面有些色情暴力的字眼)
伺服器在接收的這些消息後,發送給其他用戶。(伺服器可能和諧掉那些色情暴力的字眼,變成了XXOO)
網路游戲的客戶端和伺服器也是一樣的道理
客戶端紀錄所有的消息指令,一般來說,如果該消息指令可能影響到其他人的,或者需要被其他人看到,這個消息就會需要被發送到伺服器。
伺服器處理這些消息進行處理,發送給其他相關的客戶端。
直白點來說,伺服器端與客戶端分別處理哪些事情?你是老闆,你說了算。
『叄』 https交互過程
在這里整理一下最近這兩天整理的https的相關知識。
大家都知道要使用https,需要在網站的伺服器上配置https證書(一般是nginx,或者tomcat),證書可以使用自己生成,也可以向專門的https證書提供商進行購買。這兩種的區別是自己生成的證書是不被瀏覽器信任的,所以當訪問的時候回提示不安全的網站,需要點擊信任之後才能繼續訪問
自己生成的
而購買的https證書會提示安全
DV,OV
EV
這是因為瀏覽器中預置了一些https證書提供商的證書,在瀏覽器獲取到伺服器的https證書進行驗證的時候就知道這個https證書是可信的;而自己生成的證書,瀏覽器獲取到之後無法進行驗證是否可信,所以就給出不安全的提示。
下面對具體的一些知識點進行介紹
1. 什麼是https
https簡單的說就是安全版的http,因為http協議的數據都是明文進行傳輸的,所以對於一些敏感信息的傳輸就很不安全,為了安全傳輸敏感數據,網景公司設計了SSL(Secure Socket Layer),在http的基礎上添加了一個安全傳輸層,對所有的數據都加密後再進行傳輸,客戶端和伺服器端收到加密數據後按照之前約定好的秘鑰解密。
2. 加密和解密
Https的發展和密碼學的發展是分不開的。大家應該知道加密方式可以大體分為對稱加密和非對稱加密(反正我就知道這兩種)
對稱加密,就是加密和解密都是用同一個秘鑰,這種方式優點就是速度快,缺點就是在管理和分配秘鑰的時候不安全。
非對稱加密演算法,非對稱加密有一個秘鑰對,叫做公鑰和私鑰,私鑰自己持有,公鑰可以公開的發送給使用的人。使用公鑰進行加密的信息,只有和其配對的私鑰可以解開。目前常見的非對稱加密演算法是RSA,非對稱的加密演算法的優點是安全,因為他不需要把私鑰暴露出去。
在正式的使用場景中一般都是對稱加密和非對稱加密結合使用,使用非對稱加密完成秘鑰的傳遞,然後使用對稱秘鑰進行數據加密和解密
3. https證書的申請流程
1 在伺服器上生成CSR文件(證書申請文件,內容包括證書公鑰、使用的Hash演算法、申請的域名、公司名稱、職位等信息)
可以使用命令在伺服器上生成;也可以使用線上的工具進行生成,線上的工具會把公鑰加入到CSR文件中,並同時生成私鑰。
CSR文件內容
2 把CSR文件和其他可能的證件上傳到CA認證機構,CA機構收到證書申請之後,使用申請中的Hash演算法,對部分內容進行摘要,然後使用CA機構自己的私鑰對這段摘要信息進行簽名,
CA機構進行簽名
3 然後CA機構把簽名過的證書通過郵件形式發送到申請者手中。
4 申請者收到證書之後部署到自己的web伺服器中。下面會在寫一篇關於部署的文章
當然這是不通過CA代理機構進行申請的流程,現在網上有好多CA的代理機構,像騰訊雲,阿里雲都可以申請https證書,流程都差不多。
阿里雲申請證書流程
4. 客戶端(瀏覽器)和伺服器端交互流程
客戶端服務端交互
client Hello,客戶端(通常是瀏覽器)先向伺服器發出加密通信的請求
(1) 支持的協議版本,比如TLS 1.0版。
(2) 一個客戶端生成的隨機數 random1,稍後用於生成"對話密鑰"。
(3) 支持的加密方法,比如RSA公鑰加密。
(4) 支持的壓縮方法。
伺服器收到請求,然後響應 (server Hello)
(1) 確認使用的加密通信協議版本,比如TLS 1.0版本。如果瀏覽器與伺服器支持的版本不一致,伺服器關閉加密通信。
(2) 一個伺服器生成的隨機數random2,稍後用於生成"對話密鑰"。
(3) 確認使用的加密方法,比如RSA公鑰加密。
(4) 伺服器證書。
證書內容
證書內容
客戶端收到證書之後會首先會進行驗證
驗證流程
我們知道CA機構在簽發證書的時候,都會使用自己的私鑰對證書進行簽名
證書里的簽名演算法欄位 sha256RSA 表示,CA機構使用sha256對證書進行摘要,然後使用RSA演算法對摘要進行私鑰簽名,而我們也知道RSA演算法中,使用私鑰簽名之後,只有公鑰才能進行驗簽。
如果我們使用的是購買的證書,那麼很有可能,頒發這個證書的CA機構的公鑰已經預置在操作系統中。這樣瀏覽器就可以使用CA機構的公鑰對伺服器的證書進行驗簽。確定這個證書是不是由正規的CA機構頒發的。驗簽之後得到CA機構使用sha256得到的證書摘要,然後客戶端再使用sha256對證書內容進行一次摘要,如果得到的值和驗簽之後得到的摘要值相同,則表示證書沒有被修改過。
如果驗證通過,就會顯示上面的安全字樣,如果伺服器購買的證書是更高級的EV類型,就會顯示出購買證書的時候提供的企業名稱。如果沒有驗證通過,就會顯示不安全的提示。
生成隨機數
驗證通過之後,客戶端會生成一個隨機數pre-master secret,然後使用證書中的公鑰進行加密,然後傳遞給伺服器端
PreMaster secret
PreMaster Secret是在客戶端使用RSA或者Diffie-Hellman等加密演算法生成的。它將用來跟服務端和客戶端在Hello階段產生的隨機數結合在一起生成 Master Secret。在客戶端使用服務端的公鑰對PreMaster Secret進行加密之後傳送給服務端,服務端將使用私鑰進行解密得到PreMaster secret。也就是說服務端和客戶端都有一份相同的PreMaster secret和隨機數。
PreMaster secret前兩個位元組是TLS的版本號,這是一個比較重要的用來核對握手數據的版本號,因為在Client Hello階段,客戶端會發送一份加密套件列表和當前支持的SSL/TLS的版本號給服務端,而且是使用明文傳送的,如果握手的數據包被破解之後,攻擊者很有可能串改數據包,選擇一個安全性較低的加密套件和版本給服務端,從而對數據進行破解。所以,服務端需要對密文中解密出來對的PreMaster版本號跟之前Client Hello階段的版本號進行對比,如果版本號變低,則說明被串改,則立即停止發送任何消息。
pre-master secret
伺服器收到使用公鑰加密的內容,在伺服器端使用私鑰解密之後獲得隨機數pre-master secret,然後根據radom1、radom2、pre-master secret通過一定的演算法得出session Key和MAC演算法秘鑰,作為後面交互過程中使用對稱秘鑰。同時客戶端也會使用radom1、radom2、pre-master secret,和同樣的演算法生成session Key和MAC演算法的秘鑰。
生成session Key的過程中會用到PRF(Pseudorandom Function偽隨機方法)來生成一個key_block,然後再使用key_block,生成後面使用的秘鑰。
key_block = PRF(SecurityParameters.master_secret,"key expansion",SecurityParameters.server_random +SecurityParameters.client_random);
PRF是在規范中約定的偽隨機函數
在信息交互過程中用到的秘鑰有6個分別是。客戶端和伺服器端分別使用相同的演算法生成。
秘鑰名稱秘鑰作用
client_write_MAC_key[SecurityParameters.mac_key_length]客戶端發送數據使用的摘要MAC演算法
server_write_MAC_key[SecurityParameters.mac_key_length]服務端發送數據使用摘要MAC演算法
client_write_key[SecurityParameters.enc_key_length]客戶端數據加密,服務端解密
server_write_key[SecurityParameters.enc_key_length]服務端加密,客戶端解密
client_write_IV[SecurityParameters.fixed_iv_length]初始化向量,運用於分組對稱加密
server_write_IV[SecurityParameters.fixed_iv_length]初始化向量,運用於分組對稱加密
然後再後續的交互中就使用session Key和MAC演算法的秘鑰對傳輸的內容進行加密和解密。
具體的步驟是先使用MAC秘鑰對內容進行摘要,然後把摘要放在內容的後面使用sessionKey再進行加密。對於客戶端發送的數據,伺服器端收到之後,需要先使用client_write_key進行解密,然後使用client_write_MAC_key對數據完整性進行驗證。伺服器端發送的數據,客戶端會使用server_write_key和server_write_MAC_key進行相同的操作。
鏈接:https://www.jianshu.com/p/b0b6b88fe9fe
『肆』 如何實現客戶端與伺服器的交互
C/S模式和B/S各有其有點也各有其缺點,B/S模式在開發中需要考慮數據如何從客戶端提交到伺服器端,數據又如何返回到客戶端,這些是B/S模式所特有的,在去年之前,開發B/S模式的程序,我都是利用form來交互數據,當我看到XML之後,發現XML是個好冬冬,有很多優點,有好的東西當然不能獨享啦,想當年為了實現XML交互數據,幾乎把網路翻了個遍。咚,一塊磚頭上來了。呵呵,廢話少說,下面我們就進入正題。
B/S模式分為伺服器端和客戶端,客戶端接受用戶的請求,客戶端向應用服務提出請求,應用服務從資料庫服務中獲得數據,應用服務將數據進行計算並將結果提交給客戶端,客戶端將結果呈現給用戶。這樣,我們就看到了數據從客戶到伺服器,經過伺服器的處理再返回到客戶端,由客戶端軟體(如IE)顯示結果。
(以ASP教本語言為例,其它的語言一樣哈。)
1.Form方式
Form方式是最基本的向伺服器提交數據的方式。
test.asp文件代碼:
<%@ Language=VBScript %>
<%
Response.Expires=-1
Response.CharSet="UTF-8"
Session.CodePage="65001"
%>
<form name="frmTest" id="frmTest" action="test.asp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if
『伍』 android客戶端和伺服器端怎麼交互
android客戶端和伺服器端是基於IntentService的,具體如下:
後台使用簡單的servlet,支持GET或POST。這個servlet最終返回給前台一個字元串flag,值是true或false,表示登錄是否成功。
然後在安卓的ADT上創建一個安卓項目,建立兩個Activity,分別作為登錄界面和登錄成功界面。
HTTP的訪問公共類,用於處理GET和POST請求。
IntentService服務,用於在後台以隊列方式處理耗時操作。
在AndroidManifest.xml中注冊IntentService。注意uses-permission節點,為程序開啟訪問網路的許可權。
登陸界面處理,注意按鈕監聽事件中,使用Intent將要傳遞的值傳給service。接收廣播類中,同樣使用Intent將要傳遞的值傳給下一個Activity。在onCreate()中,動態注冊接收廣播類的實例receiver。在接收廣播類中,不要使用完畢後忘記注銷接收器,否則會報一個Are you missing a call to unregisterReceiver()? 的異常。
『陸』 客戶端與伺服器交互方式有幾種
客戶端與伺服器交互方式一般 有socket和http兩種方式
socket通常也稱作"套接字",實現伺服器和客戶端之間的物理連接,並進行數據傳輸,主要有UDP和TCP兩個協議。Socket處於網路協議的傳輸層。
http協議傳輸的主要有http協議和基於http協議的Soap協議(web service),常見的方式是 http 的post 和get 請求,web 服務。