簡單理解TCP/IP傳輸層協議TCP和UDP

TCP/IP模型中的傳輸層主要負責端到端通信,和數據鏈路層類似,數據鏈路層負責點到點的通信。TCP/IP模型的傳輸層主要協議有TCP (Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol,用戶數據報協議)。

比如:應用程序A和 B 利用TCP通信:

TCP 把A的數據分成多個段,把段傳送給網絡層,網絡層把數據封裝爲IP數據包,發給B。

B的網絡層將IP數據包分段交給B的傳輸層,傳輸層將分段重組還原成原始數據,傳送給B的應用層。

如果沒有傳輸層,IP 協議把分組送給B後還停留在B的網絡層而不能交付給應用進程。而要實現這個功能,就需要使用傳輸層的功能,需要在傳輸層間提供一條邏輯信道完成通信。傳輸層的“複用”和“分用”功能,通過不同的端口將報文交付給對應得應用進程。上面的這條邏輯信道因不同的協議TCP 或UDP 表現差異很大,TCP邏輯信道相當於一條全雙工的可靠信道,UDP是一條不可靠的信道。

UDP: 是面向無連接的協議,通信前不需要建立連接,直接發數據過去,通信效果高,可靠性不強。例如:ping 命令就是使用發送UDP數據包來判斷網絡是否連通。

TCP:是面向連接的、可靠的基於字節流的傳輸層協議。通信前需要建立連接,通信後需要拆除連接。顯然,TCP 需要更多的協議數據單元頭部,佔用許多主機資源。

上圖爲TCP包的結構:

例如1:確認序號:期望收到的下一個報文的首部序號字段的值。簡單理解爲:序號+數據長度,比如正確收到了一個報文段,其序號字段值是501,數據長度200,表明序號在501~700之間的數據均已正確收到。因此,確認序號值爲701.

2:首部長度(TCP偏移量指定了段頭的長度。段頭的長度取決與段頭選項字段中設置的選項;

佔4位,1111 二進制的10進製爲15,首部 長度的單位是4字節。15*4=60字節,所以數據偏移的最大值(TCP首部的最大長度)是60字節;

3:窗口:指定關於發送端能傳輸的下一段的大小的指令,根據接收端的接收能力來定;

端口:傳送層收到網絡層交上來的TCP數據段或UDP數據報時,根據協議裏的端口號決定應當通過哪個端口上交給應用進程。

套接字(Socket):TCP 或UDP 可能被要求同時爲多個應用程序進程提供併發服務。爲了區別不同的應用程序進程和連接。操作系統爲應用程序與TCP/IP交互提供了稱爲Socket的接口。

程序中的Socket 是什麼:引用百度百科的一段來學習下:在網絡應用程序設計時,由於TCP/IP的核心內容被封裝在操作系統中,如果應用程序要使用TCP/IP,可以通過系統提供的TCP/IP的編程接口來實現。在Windows環境下,網絡應用程序編程接口稱作Windows Socket。爲了支持用戶開發面向應用的通信程序,大部分系統都提供了一組基於TCP或者UDP的應用程序編程接口(API),該接口通常以一組函數的形式出現,也稱爲套接字(Socket)

在C#.NET中 Socket類就是提供這個功能的API。

個人感悟:做網絡編程,數據通訊久了自然會想到一些底層原理上的問題。看理論若干遍還不如實際動手操作一番,加深理解和記憶。比如路由器和交換機的區別,看了不少百度百科,百度知道,也能回答出他們的區別:如交換機工作在數據鏈路層、路由器工作在網絡層。交換機基於MAC地址轉發數據,而路由器基於IP地址轉發數據。不帶路由功能的交換機只能分割衝突域,無法分割廣播域,而路由器可以分割廣播域。如果只是學習下計算機網絡基礎知識死記硬背,絕對沒有什麼深刻的體會,但如果利用Cisco的PT模擬器實際動手操作一番,理論和實踐結合,相信會有另外一番領悟。

軟件工程師必須要懂計算機網絡基礎知識,有企業對招聘也提到懂TCP/IP協議,懂路由和交換技術優先的原因。不關心底層發生了什麼,熟練應用編程也沒有關係,知道點底層對自己也是有一種幫助的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章