引用socket原理
對tcp/ip、udp、socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問:
1.什麼是tcp/ip、udp?
2. socket在**呢?
3. socket是什麼呢?
4.你會使用它們嗎?
什麼是tcp/ip、udp?
tcp/ip(transmission control protocol/internet protocol)即傳輸控制協議/網間協議,是乙個工業標準的協議集,它是為廣域網(wans)設計的。
udp(user data protocol,使用者資料報協議)是與tcp相對應的協議。它是屬於tcp/ip協議族中的一種。
這裡有一張圖,表明了這些協議的關係。
圖1tcp/ip協議族包括運輸層、網路層、鏈路層。現在你知道tcp/ip與udp的關係了吧。
socket在**呢?
在圖1中,我們沒有看到socket的影子,那麼它到底在**呢?還是用圖來說話,一目了然。
圖2原來socket在這裡。
socket是什麼呢?
socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。
你會使用它們嗎?
前人已經給我們做了好多的事了,網路間的通訊也就簡單了許多,但畢竟還是有挺多工作要做的。以前聽到socket程式設計,覺得它是比較高深的程式設計知識,但是只要弄清socket程式設計的工作原理,神秘的面紗也就揭開了。
乙個生活中的場景。你要打**給乙個朋友,先撥號,朋友聽到**鈴聲後提起**,這時你和你的朋友就建立起了連線,就可以講話了。等交流結束,結束通話**結束此次交談。 生活中的場景就解釋了這工作原理,也許tcp/ip協議族就是誕生於生活中,這也不一定。
圖3先從伺服器端說起。伺服器端先初始化socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線。在這時如果有個客戶端初始化乙個socket,然後連線伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。客戶端傳送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束。
我們深諳資訊交流的價值,那網路中程序之間如何通訊,如我們每天開啟瀏覽器瀏覽網頁 時,瀏覽器的程序怎麼與web伺服器通訊的?當你用qq聊天時,qq程序怎麼與伺服器或你好友所在的qq程序通訊?這些都得靠socket?那什麼是 socket?socket的型別有哪些?還有socket的基本函式,這些都是本文想介紹的。本文的主要內容如下:
1、網路中程序之間如何通訊?
2、socket是什麼?
3、socket的基本操作
3.1、socket()函式
3.2、bind()函式
3.3、listen()、connect()函式
3.4、accept()函式
3.5、read()、write()函式等
3.6、close()函式
4、socket中tcp的三次握手建立連線詳解
5、socket中tcp的四次握手釋放連線詳解
6、乙個例子加粗樣式
Nginx原理講解
location uri 規則模式含義a 開頭 表示精確匹配 b 開頭 表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為 static 20 aa,可以被規則 static aa匹配到 c 開頭 表示區分大小寫的正則匹配 d 開頭 表示不區分大小寫的正...
SpringMVC原理講解
dispatcherservlet 根據獲得的handler,選擇乙個合適的handleradapter。提取request中的模型資料,填充handler入參,開始執行handler controller 在填充handler的入參過程中,根據你的配置,spring將幫你做一些額外的工作 http...
LVS原理講解
lvs的英文全名為 linux virtual server 即linux虛擬伺服器,是乙個虛擬的四層交換器集群系統,根據目標位址和目標埠實現使用者請求 本身不產生流量,只做使用者請求 目前是負載均衡效能最好的集群系統。lvs nat 修改請求報文的目標ip,多目標ip的dnat lvs dr 操縱...