socket基本概念

 1.socket 是什麼?

  在計算機通訊領域,socket 被翻譯爲「套接字」,它是計算機之間進行通訊的一種約定或一種方式。經過 socket 這種約定,一臺計算機能夠接收其餘計算機的數據,也能夠向其餘計算機發  送數據。html

  2.Linux 中的 socket 是什麼?

  在 UNIX/Linux 系統中,爲了統一對各類硬件的操做,簡化接口,不一樣的硬件設備也都被當作一個文件。對這些文件的操做,等同於對磁盤上普通文件的操做。
  UNIX/Linux 中的一切都是文件!
爲了表示和區分已經打開的文件,UNIX/Linux 會給每一個文件分配一個 ID,這個 ID 就是一個整數,被稱爲文件描述符(File Descriptor)。例如:
linux

  • 一般用 0 來表示標準輸入文件(stdin),它對應的硬件設備就是鍵盤;
  • 一般用 1 來表示標準輸出文件(stdout),它對應的硬件設備就是顯示器。


  UNIX/Linux 程序在執行任何形式的 I/O 操做時,都是在讀取或者寫入一個文件描述符。一個文件描述符只是一個和打開的文件相關聯的整數,它的背後多是一個硬盤上的普通文件、FIFO、管道、終端、鍵盤、顯示器,甚至是一個網絡鏈接。
  請注意,網絡鏈接也是一個文件,它也有文件描述符!你必須理解這句話。
咱們能夠經過 socket() 函數來建立一個網絡鏈接,或者說打開一個網絡文件,socket() 的返回值就是文件描述符。有了文件描述符,咱們就能夠使用普通的文件操做函數來傳輸數據了,例如:
編程

  • 用 read() 讀取從遠程計算機傳來的數據;
  • 用 write() 向遠程計算機寫入數據。

  你看,只要用 socket() 建立了鏈接,剩下的就是文件操做了,網絡編程原來就是如此簡單!緩存

 

  3.套接字的類型

  <1>流格式套接字(基於TCP)網絡

   SOCK_STREAM 是一種面向鏈接的、可靠的、雙向的通訊數據流,數據能夠準確無誤地到達另外一臺計算機,若是損壞或丟失,能夠從新發送。socket

   SOCK_STREAM 有如下幾個特徵:函數

    •   數據在傳輸過程當中不會消失;
    •   數據是按照順序傳輸的;
    •   數據的發送和接收不是同步的(有的教程也稱「不存在數據邊界」)--有緩存區

    <2>數據報格式套接字(基於UDP)spa

     SOCK_DGRAM 是無鏈接的不可靠的,不會進行數據的檢查  .net

    它有如下特徵:翻譯

    •   強調快速傳輸而非傳輸順序;
    •   傳輸的數據可能丟失也可能損毀;
    •   限制每次傳輸的數據大小;
    •   數據的發送和接收是同步的(有的教程也稱「存在數據邊界」)。

   4.面向鏈接套接字與無鏈接套接字的區別

  《1》無鏈接的套接字

    • 數據包的路徑隨意
    • 受到:路徑長短開銷、路徑擁堵、路由排隊時延(可能丟包)的影響
    • 盡力而爲
    • 傳輸效率高,可是不可靠,有丟失數據包、搗亂數據的風險

    《2》面向鏈接的套接字

    • 在發送方和接收方之間創建鏈路(虛電路)
    • 數據按順序的可靠傳輸
    • 很是可靠,萬無一失,傳輸效率低,耗費資源多

 

  5.OSI七層網絡模型和TCP/IP的四層模型

應用層  應用層
表示層
會話層
傳輸層 傳輸層
網絡層 網絡層
數據鏈路層 網絡接口
物理層

  兩臺計算機進行通訊時,必須遵照如下原則:

  • 必須是同一層次進行通訊,好比,A 計算機的應用層和 B 計算機的傳輸層就不能通訊,由於它們不在一個層次,數據的拆包會遇到問題。
  • 每一層的功能都必須相同,也就是擁有徹底相同的網絡模型。若是網絡模型都不一樣,那不就亂套了,誰都不認識誰。
  • 數據只能逐層傳輸,不能躍層。
  • 每一層能夠使用下層提供的服務,並向上層提供服務。

  咱們所說的 socket 編程,是站在傳輸層的基礎上,因此能夠使用 TCP/UDP 協議,可是不能幹「訪問網頁」這樣的事情,由於訪問網頁所須要的 http 協議位於應用層。

 

  6.TCP/IP 協議簇

  TCP/IP 模型包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百個互爲關聯的協議,其中 TCP 和 IP 是最經常使用的兩種底層協議,因此把它們統稱爲「TCP/IP 協議族」。

  也就是說,「TCP/IP模型」中所涉及到的協議稱爲「TCP/IP協議族」,你能夠區分這兩個概念,也能夠認爲它們是等價的

  socket 編程是基於 TCP 和 UDP 協議的,它們的層級關係以下圖所示:

       TCP/IP協議的層次圖

 

  7.IP、MAC和端口號——網絡通訊中確認身份信息的三要素

  <1>IP地址:通常一個局域網用一個IP地址(公網地址:買的),由於IPV4地址若是一臺計算機一個確定不夠用 

  <2>MAC地址:固定的寫在網卡上

  <3>端口號:應用層程序的接口

 

 

 

  本文參考:C語言中文網   http://c.biancheng.net/view/2128.html

相關文章
相關標籤/搜索