1. 程式人生 > >TCP/IP、Http、Socket 的理解

TCP/IP、Http、Socket 的理解

1、TCP/IP

TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。“IP”代表網際協議,TCP和UDP使用該協議從一個網路傳送資料包到另一個網路。

TCP提供有保證的資料傳輸,而UDP不提供。這意味著TCP有一個特殊的機制來確保資料安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

OSI模型制定的七層標準模型,分別是:應用層,表示層,會話層,傳輸層,網路層,資料鏈路層,物理層。

雖然國際標準化組織制定了這樣一個網路協議的模型,但是實際上網際網路通訊使用的網路協議是TCP/IP網路協議。

TCP/IP 是一個協議族,也是按照層次劃分。共四層:應用層,傳輸層,互連網路層,網路介面層。

傳輸層有多個協議,但最主要的是TCP和UDP協議。

應用層的協議有很多,每一個協議代表一種型別的服務。HTTP協議—全球資訊網服務。FTP協議—檔案傳送服務。POP3—郵件服務,SOAP協議—webService服務。

  • 什麼是socket?

socket就是一個連線中的一個端點,一次通訊(連線)a,b端都會有一個socket。一個socket對應一個連線。

  • http協議屬於應用層還是傳輸層?

HTTP 在中國大陸被翻譯為“超文字傳輸協議”,因為“transfer”在中文裡有“傳輸”的含意。但依據 HTTP 定製者之一的 Roy Fielding博士的論文[1](6.5.3節),作者專門強調“transfer”表示的是“(表述狀態的)轉移”(Representational State Transfer),而不是“傳輸”(transport)。更符合原義的譯名應該為“超文字轉移協議”。這段話解除了我的疑惑。那麼http協議當然是應用層的協議。

2、 http

HTTP(超文字傳輸協議)是利用TCP在兩臺電腦(通常是Web伺服器和客戶端)之間傳輸資訊的協議。客戶端使用Web瀏覽器發起HTTP請求給Web伺服器,Web伺服器傳送被請求的資訊給客戶端。

HTTP協議即超文字傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連線最顯著的特點是客戶端傳送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連線。從建立連線到關閉連線的過程稱為“一次連線”。
1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連線,在處理完本次請求後,就自動釋放連線。
2)在HTTP 1.1中則可以在一次連線中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。
由於HTTP在每次請求結束後都會主動釋放連線,因此HTTP連線是一種“短連線”,要保持客戶端程式的線上狀態,需要不斷地向伺服器發起連線請求。通常的做法是即時不需要獲得任何資料,客戶端也保持每隔一段固定的時間向伺服器傳送一次“保持連線”的請求,伺服器在收到該請求後對客戶端進行回覆,表明知道客戶端“線上”。若伺服器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到伺服器的回覆,則認為網路已經斷開。

3、socket

套接字(socket)是通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊:連線使用的協議,本地主機的IP地址,本地程序的協議埠,遠地主機的IP地址,遠地程序的協議埠。

應用層通過傳輸層進行資料通訊時,TCP會遇到同時為多個應用程式程序提供併發服務的問題。多個TCP連線或多個應用程式程序可能需要通過同一個 TCP協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與TCP/IP協議互動提供了套接字(Socket)介面。應用層可以和傳輸層通過Socket介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的併發服務。

建立Socket連線至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。
伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態,等待客戶端的連線請求。
客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。
連線確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求時,就響應客戶端套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連線。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

在這裡插入圖片描述