我們都知道TCP/IP協議共分四層:
① 鏈路層,有時也稱作資料連結層或網路介面層,通常包括作業系統中的裝置驅動程式和電腦中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節。
② 網路層,有時也稱作互連網層,處理分組在網路中的活動,例如分組的選路。在TCP/IP協議族中,網路層協議包括IP協議(網際協議),ICMP協議(internet互連網控制報文協議),以及IGMP協議(internet組管理協議)。
③ 傳輸層,主要為兩台主機上的應用程式提供端到端的通訊。在TCP/IP協議族中,有兩個互不相同的傳輸協議: TCP(傳輸控制通訊協定)和UDP(使用者資料包通訊協定)。 TCP為兩台主機提供高可靠性的資料通訊。它所做的工作包括把應用程式交給它的資料分成合適的小塊交給下面的網路層,確認接收到的分組,設定發送最後確認分組的逾時時鐘等。由於運輸層提供了高可靠性的端到端的通訊,因此應用程式層可以忽略所有這些細節。而另一方面, U D P則為應用程式層提供一種非常簡單的服務。它只是把稱作資料報的分組從一台主機發送到另一台主機,但並不保證該資料報能到達另一端。任何必需的可靠性必須由應用程式層來提供。
這兩種運輸層協議分別在不同的應用程式中有不同的用途,這一點將在後面看到。
④ 應用程式層,負責處理特定的應用程式細節。幾乎各種不同的TCP/IP實現都會提供下面這些通用的應用程式:Telnet 遠程登入。FTP 檔案傳輸通訊協定。SMTP 簡單郵件傳送協議。SNMP 簡易網路管理通訊協定。
我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用程式層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用程式層協議,應用程式層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用程式層協議。WEB使用HTTP協議作應用程式層協議,以封裝HTTP文本資訊,然後使用TCP/IP做傳輸層協議將它發到網路上。
<1>Socket是一個針對TCP和UDP編程的介面,你可以藉助它建立TCP串連等等。而TCP和UDP協議屬於傳輸層 。
而http是個應用程式層的協議,它實際上也建立在TCP協議之上(HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力)。
<2>Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。Socket的出現只是使得程式員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函數介面。
下面是一些的重要的概念,特在此做摘抄和總結。
一。什麼是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串連的請求,斷開過程需要經過“四次握手”(過程就不細寫了,就是伺服器和用戶端互動,最終確定斷開)
二。利用Socket建立網路連接的步驟
建立Socket串連至少需要一對通訊端,其中一個運行於用戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
通訊端之間的串連過程分為三個步驟:伺服器監聽,用戶端請求,串連確認。
1。伺服器監聽:伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態,等待用戶端的串連請求。
2。用戶端請求:指用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端通訊端的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求。
3。串連確認:當伺服器端通訊端監聽到或者說接收到用戶端通訊端的串連請求時,就響應用戶端通訊端的請求,建立一個新的線程,把伺服器端通訊端的描述發給用戶端,一旦用戶端確認了此描述,雙方就正式建立串連。而伺服器端通訊端繼續處於監聽狀態,繼續接收其他用戶端通訊端的串連請求。
三。HTTP連結的特點
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web連網的基礎,也是手機連網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP串連最顯著的特點是用戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放串連。從建立串連到關閉串連的過程稱為“一次串連”。
四。TCP和UDP的區別
1。TCP是面向連結的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證串連的可靠性,但TCP的三向交握在最低限度上(實際上也很大程度上保證了)保證了串連的可靠性;而UDP不是連線導向的,UDP傳送資料前並不與對方建立串連,對接收到的資料也不發送確認訊號,發送端不知道資料是否會正確接收,當然也不用重發,所以說UDP是不需連線的、不可靠的一種資料轉送協議。
2。也正由於1所說的特點,使得UDP的開銷更小資料轉送速率更高,因為不必進行收發資料的確認,所以UDP的即時性更好。
知道了TCP和UDP的區別,就不難理解為何採用TCP傳輸協議的MSN比採用UDP的QQ傳輸檔案慢了,但並不能說QQ的通訊是不安全的,因為程式員可以手動對UDP的資料收發進行驗證,比如發送方對每個資料包進行編號然後由接收方進行驗證啊什麼的,即使是這樣,UDP因為在底層協議的封裝上沒有採用類似TCP的“三向交握”而實現了TCP所無法達到的傳輸效率。