套接字有哪些型別?socket有哪些型別?

2021-09-24 18:28:12 字數 1919 閱讀 9474

這個世界上有很多種套接字(socket),比如 darpa internet 位址(internet 套接字)、本地節點的路徑名(unix套接字)、ccitt x.25位址(x.25 套接字)等。但本教程只講第一種套接字——internet 套接字,它是最具代表性的,也是最經典最常用的。以後我們提及套接字,指的都是 internet 套接字。

根據資料的傳輸方式,可以將 internet 套接字分成兩種型別。通過 socket() 函式建立連線時,必須告訴它使用哪種資料傳輸方式。

internet 套接字其實還有很多其它資料傳輸方式,但是我可不想嚇到你,本教程只講常用的兩種。
流格式套接字(stream sockets)也叫「面向連線的套接字」,在**中使用 sock_stream 表示。

sock_stream 是一種可靠的、雙向的通訊資料流,資料可以準確無誤地到達另一台計算機,如果損壞或丟失,可以重新傳送。

流格式套接字有自己的糾錯機制,在此我們就不討論了。
sock_stream 有以下幾個特徵:

可以將 sock_stream 比喻成一條傳送帶,只要傳送帶本身沒有問題(不會斷網),就能保證資料不丟失;同時,較晚傳送的資料不會先到達,較早傳送的資料不會晚到達,這就保證了資料是按照順序傳遞的。

為什麼流格式套接字可以達到高質量的資料傳輸呢?這是因為它使用了 tcp 協議(the transmission control protocol,傳輸控制協議),tcp 協議會控制你的資料按照順序到達並且沒有錯誤。

你也許見過 tcp,是因為你經常聽說「tcp/ip」。tcp 用來確保資料的正確性,ip(internet protocol,網路協議)用來控制資料如何從源頭到達目的地,也就是常說的「路由」。

那麼,「資料的傳送和接收不同步」該如何理解呢?

假設傳送帶傳送的是水果,接收者需要湊齊 100 個後才能裝袋,但是傳送帶可能把這 100 個水果分批傳送,比如第一批傳送 20 個,第二批傳送 50 個,第三批傳送 30 個。接收者不需要和傳送帶保持同步,只要根據自己的節奏來裝袋即可,不用管傳送帶傳送了幾批,也不用每到一批就裝袋一次,可以等到湊夠了 100 個水果再裝袋。

流格式套接字的內部有乙個緩衝區(也就是字元陣列),通過 socket 傳輸的資料將儲存到這個緩衝區。接收端在收到資料後並不一定立即讀取,只要資料不超過緩衝區的容量,接收端有可能在緩衝區被填滿以後一次性地讀取,也可能分成好幾次讀取。

也就是說,不管資料分幾次傳送過來,接收端只需要根據自己的要求讀取,不用非得在資料到達時立即讀取。傳送端有自己的節奏,接收端也有自己的節奏,它們是不一致的。

流格式套接字有什麼實際的應用場景嗎?瀏覽器所使用的 http 協議就基於面向連線的套接字,因為必須要確保資料準確無誤,否則載入的 html 將無法解析。

資料報格式套接字(datagram sockets)也叫「無連線的套接字」,在**中使用 sock_dgram 表示。

計算機只管傳輸資料,不作資料校驗,如果資料在傳輸中損壞,或者沒有到達另一台計算機,是沒有辦法補救的。也就是說,資料錯了就錯了,無法重傳。

因為資料報套接字所做的校驗工作少,所以在傳輸效率方面比流格式套接字要高。

可以將 sock_dgram 比喻成高速移動的電單車快遞,它有以下特徵:

眾所周知,速度是快遞行業的生命。用電單車發往同一地點的兩件包裹無需保證順序,只要以最快的速度交給客戶就行。這種方式存在損壞或丟失的風險,而且包裹大小有一定限制。因此,想要傳遞大量包裹,就得分配傳送。

注意:sock_dgram 沒有想象中的糟糕,不會頻繁的丟失資料,資料錯誤只是小概率事件。

mysql索引型別有哪些 MySQL有哪些索引型別

從資料結構角度 2 hash索引 a 僅僅能滿足 in 和 查詢,不能使用範圍查詢 b 其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b tree 索引 c 只有memory儲存引...

PHP型別有哪些?

資料型別有三種 1 標量資料型別 標量資料型別包括以下幾種。1 boolean 布林型 布林變數是php變數中最簡單的。它儲存乙個true或者false值。其中true或者false是php的內部關鍵字。設定乙個布林型的變數,只需將true或者false賦值給該變數 2 string 字串 字串是連...

網路型別有哪些型別?

計算機網路按不同的分類方式來劃分,可以分為不同的型別 1,按照網路的規模和範圍 區域網 local area network lan,都會網路 或者都市網 metropolitan area network man和廣域網 wide area network wan。2,按照網路拓撲結構分 星型網路...