socket
網路通訊的要素
tcp和udp
socket的通訊流程圖
什麼是socket
socket:又稱作是套接字,網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為socket。
socket是對tcp/ip的協議的封裝,socket本身並不是協議,而是乙個呼叫的介面,只有通過socket我們才能使用tcp/ip。
socket是和網路緊密相關的,網路上的兩個程式一般就是指web伺服器和我們的客戶端,資料交換的過程就是我們客戶端發乙個請求到http伺服器、伺服器返回資料,這個過程就是資料交換的過程。客戶端和伺服器之間的資料交換是需要乙個雙向的通訊連線,兩者之間是需要乙個通道去實現連線的。
通訊管道就是通訊連線,有了這個管道,我們就可以進行資料傳輸。客戶端到伺服器端必須要有乙個通道才能實現資料的互動。如果有座大山擋著了道路我們就會在山中開闢乙個隧道,這樣我們才能走到山的另一端。socket就可以理解為這個隧道的兩個埠,乙個入口乙個出口。
乙個網路請求並不是我們所認為的請求-相應的過程,它的底層是開闢了乙個通訊管道的。所以應用程式通常是通過socket(套接字)向網路發出請求或者應答網路請求。
流式socket(sock_stream)和資料報式socket(sock_dgram)。流式是一種面向連線的socket,針對於面向連線的tcp服務應用;資料報式socket是一種無連線的socket,對應於無連線的udp服務應用。
發乙個http請求到網路上,我們會有乙個url,url會有乙個tcp協議、ip位址和埠號http預設的埠號是80,沒有ip位址我們就沒辦法找到伺服器,沒有埠號我們就找不到應用程式。
網路上的請求其實就是通過socket建立乙個通訊管道實現資料互動的。ip位址就是網路上主機裝置的唯一標識。 埠號就是程序的標識,乙個應用程式就是乙個程序。
總結如下:
用於標示程序的邏輯位址,不同程序的標示
有效埠:0~65535,其中0~1024由系統使用或者保留埠,開發中建議使用1024以上的埠
通訊的規則
常見協議:tcp、udp
建立連線,形成傳輸資料的通道
在連線中進行大資料傳輸(資料不受限制)
通過三次握手完成連線,是可靠協議,安全送達
必須建立連線,效率會稍低
建立連線的傳輸協議就是tcp協議,傳送http網路請求的時候需要通過乙個通訊管道建立連線,http就是乙個tcp連線。
通道建立連線前為什麼要進行三次握手呢?三次握手是為了保證資料的安全性和可靠性。舉乙個打**的例子來說,用手機撥號這個過程就是第一次握手,對方接到**」喂」,這就是第二次握手,我們也會回應」喂」,這就是第三次握手,這三個過程沒有問題的話,就說明連線建立是沒問題的。如果任一方在撥號後沒有回應,那就不能保證這個鏈結是有效的,就能保證資料的乙個安全性和可靠性。
tcp每次傳輸資料的時候都要建立連線,所以導致其效率是較低的。我們在網路中會多次請求資料,也就意味著每次都要三次握手。就比如,你給對方打**,保證通話連線後開始說一句話,之後就把**掛掉了;說第二句話的時候又要再打一次**,重複之前的操作。效率會低點但是對於我們的網路請求http請求影響不大,因為我們的下次請求時間是不固定的。由於這個請求時間不固定,如果這條資料互動還一直保持著,那我們打**來說,我們不交流了,但還是保持著通話,那我們的花費就多了。
將資料及源和目的封裝成資料報中,不需要建立連線
每個資料報的大小限制在64k之內
因為無需連線,因此是不可靠協議
不需要建立連線,速度快
第一點不需要建立連線怎麼理解呢?例如我們看直播的時候,主播在他電腦上的操作會及時傳遞到我們的螢幕上,如果我們是通過tcp的形式傳遞的話,黨有很多使用者的話,那是比較卡的,會引起堵塞的。廣播的話是不會用tcp的,需要採用udp,只需要把資料和目的地封裝成包進行傳送。中間的過程是怎麼樣的,可能網路不好卡在那裡了,等網路恢復的時候,我們看到的就是最新的,而不會是之前的畫面了。這就是採用udp的情況,所以udp是不安全不可靠的,這就是udp不需要建立連線,不能保證資料能安全的送給我們。
第二點為什麼資料報這麼小?因為不能保證資料安全,如果過大的話,傳輸中間出問題的可能性就比較大,一旦有問題,資料就都沒有了。還是拿直播舉例,如果一次性發20分鐘的資料,出問題的話那就是20分鐘的直播畫面都沒有,所以資料報小是為了保證資料如果丟失,資料丟失不會那麼多。
udp無需建立連線,不用三次握手,那就速度比較快的。
總結:tcp、udp是資料傳輸的方式。舉例說明就是發快遞的話,可以選擇多個快遞公司去發這個快遞。
Socket小白篇 TCP UDP簡介
socket 網路通訊的要素 tcp和udp socket的通訊流程圖 1.socket 什麼是socket socket 又稱為套接字,網路上的兩個程式通過乙個雙向的通訊連線實現資料交換,這個連線的一端稱為socket.socket是對tcp ip的協議封裝,socket本身並不是協議,而是乙個呼...
為Socket寫的附加方法
自己封裝了乙個.net的非同步socket 在server端寫了乙個物件池來提供服務.然後為在網路中傳遞的資料寫了乙個pack和unpack方法.打算放到socket類中 基本的思路是 在send以前呼叫packmessage 在message 以byte陣列的方式存在 前面加上一些附加資訊.例如傳...
ctf 小白學習篇
robots協議 robots.txt檔案是乙個文字檔案,使用任何乙個常見的文字編輯器,比如windows系統自帶的notepad,就可以建立和編輯它 robots.txt是乙個協議,而不是乙個命令。robots.txt是搜尋引擎中訪問 的時候要檢視的第乙個檔案。robots.txt檔案告訴蜘蛛程式...