網路通訊

小白求帶528發表於2020-10-20

HTTP

  • HTTP(超文字傳輸協議)是利用TCP在兩臺電腦(通常是Web伺服器和客戶端)之間傳輸資訊的協議。客戶端使用Web瀏覽器發起HTTP請求給Web伺服器,Web伺服器傳送被請求的資訊給客戶端
  • HTTP協議是建立在請求/響應模型上的。首先由客戶建立一條與伺服器的TCP連結,併傳送一個請求到伺服器,請求中包含請求方法、URL、協議版本以及相關的MIME樣式的訊息。伺服器響應一個狀態行,包含訊息的協議版本、一個成功和失敗碼以及相關的MIME式樣的訊息
  • HTTP本身是一個協議,但其最終還是基於TCP的

TCP四次揮手
在這裡插入圖片描述
某個應用程式首先呼叫close主動關閉連線,這時TCP傳送一個FIN M;

另一端接收到FIN M之後,執行被動關閉,對這個FIN進行確認。它的接收也作為檔案結束符傳遞給應用程式,因為FIN的接收意味著應用程式在相應的連線上再也接收不到額外資料;

一段時間之後,接收到檔案結束符的應用程式呼叫close關閉它的socket。這導致它的TCP也傳送一個FIN N;

接收到這個FIN的源傳送端TCP對它進行確認。

這樣每個方向上都有一個FIN和ACK。

TCP三次握手(基於sockert)
在這裡插入圖片描述
當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了SYN J包,這時connect進入阻塞狀態;伺服器監聽到連線請求,即收到SYN J包,呼叫accept函式接收請求向客戶端傳送SYN K ,ACK J+1,這時accept進入阻塞狀態;客戶端收到伺服器的SYN K ,ACK J+1之後,這時connect返回,並對SYN K進行確認;伺服器收到ACK K+1時,accept返回,至此三次握手完畢,連線建立。

socket通訊

  • socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆檔案”,都可以用“開啟open –> 讀寫write/read –> 關閉close”模式來操作

  • socket- **bind()**函式
    bind()函式把一個地址族中的特定地址賦給socket。例如對應AF_INET、AF_INET6就是把一個ipv4或ipv6地址和埠號組合賦給socket。伺服器在啟動的時候都會繫結一個眾所周知的地址(如ip地址+埠號),用於提供服務,客戶就可以通過它來接連伺服器;而客戶端就不用指定,有系統自動分配一個埠號和自身的ip地址組合。這就是為什麼通常伺服器端在listen之前會呼叫bind(),而客戶端就不會呼叫,而是在connect()時由系統隨機生成一個。

  • List item

  • Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面,TCP/IP協議族隱藏在Socket介面後面

  • 在這裡插入圖片描述

  • 伺服器端先初始化Socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線

  • 在這時如果有個客戶端初始化一個Socket,然後連線伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。

  • 客戶端傳送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束。

程式之間如何通訊?(區別於網路)

訊息傳遞(管道、FIFO、訊息佇列)

同步(互斥量、條件變數、讀寫鎖、檔案和寫記錄鎖、訊號量)

共享記憶體(匿名的和具名的)

遠端過程呼叫(Solaris門和Sun RPC)
  • 本地可以通過程式PID來唯一標識一個程式,但是在網路中這是行不通的
  • 網路層的“ip地址”可以唯一標識網路中的主機,而傳輸層的“協議+埠”可以唯一標識主機中的應用程式(程式)。這樣利用三元組(ip地址,協議,埠)就可以標識網路的程式了

什麼是TCP/IP、UDP

  • TCP/IP,即傳輸控制協議/網間協議,是一個工業標準的協議集,它是為廣域網(WANs)設計的。
  • UDP是與TCP相對應的協議。它是屬於TCP/IP協議族中的一種。
  • TCP/IP協議族包括運輸層、網路層、鏈路層在這裡插入圖片描述

相關文章