“我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用程式層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用程式層協議,應用程式層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用程式層協議。WEB使用HTTP協議作應用程式層協議,以封裝HTTP
文本資訊,然後使用TCP/IP做傳輸層協議將它發到網路上。”
而我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯絡。Socket編程介面在設計的時候,就希望也能適應其他的網路通訊協定。所以說,Socket的出現只是使得程式員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函數介面,比如create、 listen、connect、accept、send、read和write等等。網路有一段關於socket和TCP/IP協議關係的說法比較容易理解:
“TCP/IP只是一個協議棧,就像作業系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作介面。這個就像作業系統會提供標準的編程介面,比如win32編程介面一樣,TCP/IP也要提供可供程式員做網路開發所用的介面,這就是Socket編程介面。”
關於TCP/IP協議的相關只是,用博大精深來講我想也不為過,單單查一下網上關於此類只是的資料和書籍文獻的數量就知道,這個我打算會買一些經典的書籍(比如《TCP/IP詳解:卷一、卷二、卷三》)進行學習,今天就先總結一些基於基於TCP/IP協議的應用和編程介面的知識,也就是剛才說了很多的 HTTP和Socket。
CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。
實際上,傳輸層的TCP是基於網路層的IP協議的,而應用程式層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的介面。
下面是一些經常在筆試或者面試中碰到的重要的概念,特在此做摘抄和總結。
TCP/IP、Http、Socket的區別 - 粉紅色的夏天 - 追尋陽光一。什麼是TCP串連的三向交握
第一次握手:用戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三向交握。
握手過程中傳送的包裡不包含資料,三向交握完畢後,用戶端與伺服器才正式開始傳送資料。理想狀態下,TCP串連一旦建立,在通訊雙方中的任何一方主動關閉串連之前,TCP 串連都將被一直保持下去。中斷連線時伺服器和用戶端均可以主動發起斷開TCP串連的請求,斷開過程需要經過“四次握手”(過程就不細寫了,就是伺服器和用戶端互動,最終確定斷開)
TCP/IP、Http、Socket的區別 - 粉紅色的夏天 - 追尋陽光二。利用Socket建立網路連接的步驟
建立Socket串連至少需要一對通訊端,其中一個運行於用戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
通訊端之間的串連過程分為三個步驟:伺服器監聽,用戶端請求,串連確認。
集裝箱運費
1。伺服器監聽:伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態,等待用戶端的串連請求。
2。用戶端請求:指用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端通訊端的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求。
3。串連確認:當伺服器端通訊端監聽到或者說接收到用戶端通訊端的串連請求時,就響應用戶端通訊端的請求,建立一個新的線程,把伺服器端通訊端的描述發給用戶端,一旦用戶端確認了此描述,雙方就正式建立串連。而伺服器端通訊端繼續處於監聽狀態,繼續接收其他用戶端通訊端的串連請求。
TCP/IP、Http、Socket的區別 - 粉紅色的夏天 - 追尋陽光三。HTTP連結的特點
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web連網的基礎,也是手機連網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP串連最顯著的特點是用戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放串連。從建立串連到關閉串連的過程稱為“一次串連”。
TCP/IP、Http、Socket的區別 - 粉紅色的夏天 - 追尋陽光四。TCP和UDP的區別(考得最多。。快被考爛了我覺得- -\\)
1。 TCP是面向連結的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證串連的可靠性,但TCP的三向交握在最低限度上(實際上也很大程度上保證了)保證了串連的可靠性;而UDP不是連線導向的,UDP傳送資料前並不與對方建立串連,對接收到的資料也不發送確認訊號,發送端不知道資料是否會正確接收,當然也不用重發,所以說UDP是不需連線的、不可靠的一種資料轉送協議。
2。也正由於1所說的特點,使得UDP的開銷更小資料轉送速率更高,因為不必進行收發資料的確認,所以UDP的即時性更好。
知道了TCP和UDP的區別,就不難理解為何採用TCP傳輸協議的MSN比採用UDP的QQ傳輸檔案慢了,但並不能說QQ的通訊是不安全的,因為程式員可以手動對UDP的資料收發進行驗證,比如發送方對每個資料包進行編號然後由接收方進行驗證啊什麼的,即使是這樣,UDP因為在底層協議的封裝上沒有採用類似 TCP的“三向交握”而實現了TCP所無法達到的傳輸效率。
有問題歡迎進群交流:173711587