1. 程式人生 > >http中的socket是怎麽一回事

http中的socket是怎麽一回事

認識 文章 控制 net 網絡通 第一次 lol 語義 發的

  首先我們先看一下socket的定義:是在傳輸層和應用層中間的一個抽象層,是實現網絡通信的接口。

  那麽什麽是傳輸層,什麽是應用層呢?網絡又是怎樣通信的呢?為了弄清這兩個問題,我們需要弄清一個概念TCP/IP四層模型和OSI七層模型。

  

技術分享圖片

  OSI: Open System Interconnection的縮寫,意為開放式系統互聯。

  TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協議/網間協議,定義了主機如何連入因特網及數據如何在它們之間傳輸的標準。

  OSI七層模型是TCP四層模型的延申拓展,我們就簡單了解一下這七層究竟是什麽定義,每層負責什麽。如果對這方面有興趣的極客,可以google一下具體的詳細資料。

  1.物理層:機械,電子,一些定時接口的比特流傳輸。

  2.數據鏈路層:實現物理尋址,將比特流實現按邏輯電路傳輸。

  3.網絡層:控制子網的運行,路由的選擇,將信號發送到哪裏。

  4.傳輸層:接受下一層會話層的數據,有必要時對數據進行分割,傳給網絡層傳輸。

  5.會話層:不同機器上的客戶建立會話通信。

  6.表示層:信息語法語義以及他們的關聯,比如壓縮,加密。

  7.應用層:各種應用程序協議,比如HTTP FTP SMTP。

  那麽通過以上簡單介紹,大家應該對數據傳輸的有了個簡單初步認識。我們都知道每臺接入互聯網的計算機都只有唯一的IP域名,我們使用的所有網絡程序,比如QQ,LOL等,要進行數據的交流,必須要與相同的域名進行連接,那麽這麽多進程怎麽才能區分這個網絡信息是給我自己的進程的呢?所以每個進程都要綁定端口號,通過IP+端口可以唯一確定信息交流的準確性。socket完成的就是這個任務,每個網絡程序調用自身的socket來監聽端口,完成信息交流傳輸,而且信息的交流還要依賴於TCP/IP協議。那麽我們再深入了解一下TCP/IP協議,有助於我們深入了解數據間的傳輸。

  1.客戶端和服務端的交流,首先依賴於套接字(也是socket,英文翻譯是插座,比較形象,類似於電器和電站之間的連接形式),可以理解為一條管道,所以我們的計算機可能有很多管道同時在工作,管道的終點就是服務端創建的套接字,首先客戶端先創建一個套接字,會返回一個描述符,描述符的作用是客戶端判斷進行交流的網絡信息應該走哪條管道,但是這個描述符只有計算機自己知道,服務端並不知道,所以它不能代替端口,作用可以理解為建立好這個端口。

  2.管道建立好之後,就是數據的傳輸,網絡中的數據,並不是源源不斷連續的,而是以一個個包的形式來傳遞,正式因為傳遞和處理速度之快,你感覺不到他的斷斷續續。遵循TCP形式的包的統一格式是這樣的

技術分享圖片

簡述一下作用:

  報頭:一串0101……規則序列。服務端讀取時,知道是一個穩定的數據包,他的信息馬上要來了。

  起始幀分界符:尾數為11。服務端以此作為數據包的起點。

  FCS:它是一串 32 比特的序列,是通過一個公式對包中從頭到尾的所有內容進行計算而得出來的,受到幹擾時值會改變,一旦接收方計算的和發送方不一樣時就說明此包失真。

  MAC頭部 :包含了發送方和接收方的MAC地址,MAC地址位於計算機網卡的ROM中,全世界獨一無二,跟指紋一樣。

  IP頭部:包含了發送方和接收方的IP信息。

  TCP頭部:除了發送方端口號,接收方端口號之外,還有如下重要字段:

    序號,ACK號:這兩者作用是確保包沒有遺漏,如有,會自動補發。

    控制位:1.ACK:(與上方ACK不同)告知數據已接收。

        2.SYN:發送方和接收方互相確認的信號,表示已連接。

        3.FYN:表示斷開連接。

有了以上概念,我們來看一下TCP三次握手:(seq表示序號)

第一次握手:客戶端SYN=1請求連接,序號=J(標記值,無實際意義,用來確定發送了多少信息),

第二次握手:服務端SYN=1請求連接,ACK=1(已經接收到客戶端的連接請求),ack=J+1(已收到你發的J單位信息,請確認你沒有漏發),seq=K(標記值無意義,用來確定收到了多少單位信息)

第三次握手:客戶端ACK=1(已經接收到服務端的連接請求),ACK=K+1(收到了你發的K大小單位信息,請確認你沒有漏發)

技術分享圖片

TCP四次揮手:

第一次揮手:客戶端FIN = M請求斷開

第二次揮手:服務端ack=M+1(已收到M單位大小信息,請確認你沒有漏發)

第二次揮手:服務端FIN = N請求斷開

第四次揮手:客戶端ACK=1(確認斷開) ack=N+1(已經收到你的N單位信息,請確認你沒有漏發)

技術分享圖片

總結:socket是網絡傳輸必要的標識符,它的作用是建立一個發送方接收方之間的管道,通過socket庫中的一些命令recv ,send等來完成收發信息的操作。是TCP傳輸協議的必要條件之一。相信你已經對文章開頭:socket是在傳輸層和應用層中間的一個抽象層,是實現網絡通信的接口。有了更加充分的認識吧。

http中的socket是怎麽一回事