網絡層是為主機之間提供邏輯通信,而運輸層為應用進程之間(socket:ip+端口)提供端到端的邏輯通信。
端口 服務器使用的端口
系統端口號/熟知端口號 (0-1023)FTP: 21
TELNET: 23
SMPT: 25
DNS: 53
TFTP: 69
HTTP: 80
SNMP: 161
SNMP(trap): 162
登記端口號 (1024-49151)
客戶端使用的端口號 (49152-65535)
由于這類端口號僅在客戶進程運行時才動態選擇,因此也叫做短暫端口號
TCP (面向連接,可靠)
socket
socket = (IP地址: 端口號)
每一條TCP連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。
同一個名詞socket卻可以表示多種不同的意思
允許應用程序訪問連網協議的應用編程接口API,即運輸層和應用層之間的一種接口,稱為socket API,并簡稱為socket。
socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。
更多
在socket API中使用的一個函數名也叫做socket。
調用socket函數的端點成為socket,如“創建一個數據報socket”。
調用socket函數時,其返回值稱為socket描述符,可簡稱為socket。
在操作系統內核中連網協議的Berkeley實現,稱為socket實現。
上面的這些socket的意思都和(IP地址: 端口號)不同。
特點TCP時面向連接的運輸層協議
每一條TCP連接只能有兩個端點,每一條TCP連接只能時點對點的。
TCP提供可靠交付的服務。
TCP提供全雙工通信。
面向字節流。TCP中的“流”(stream)指的是流入到進程或從進程流出的字節序列。
更多
面向字節流的含義是:
雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序交下來的數據看成僅僅是一連串的無結構的字節流。TCP不保證接收方應用程序所收到的數據塊和發送方應用程序所發出的數據塊具有對應大小的關系(例如,發送方應用程序交給發送方的TCP共10個數據塊,但接收方的TCP可能只用了4個數據塊就把收到的字節流交付上層的應用程序)。TCP并不關心應用進程一次把多長的報文發送到TCP的緩存中,而是根據對方給出的窗口值和當前網絡擁塞的程度來決定一個報文段應包含多少個字節(UDP發送的報文長度是應用進程給出的)。如果應用進程傳送到TCP緩存的數據塊太長,TCP就可以把它劃分短一些再傳送。如果應用進程一次只發來一個字節,TCP也可以等待積累有足夠多的字節后再構成報文段發送出去??煽總鬏數墓ぷ髟?/p>
TCP報文段的首部格式
TCP可靠傳輸的實現
TCP的流量控制
TCP的擁塞控制
TCP的運輸連接管理(三次握手四次揮手)
UDP (無連接,不可靠)
用戶數據報協議UDP只在IP的數據報服務之上增加了很少的一點功能,這就是復用和分用的功能以及差錯檢測的功能。
特點
UDP是無連接的
UDP使用盡最大努力交付
UDP是面向報文的,發送方的UDP對應用程序交下來的報文,在添加首部后就向下交付IP層。
UDP對應用層交下來的報文,既不合并,也不拆分。因此,應用程序必須選擇合適大小的報文。
若報文太長,UPD把它交給IP層后,IP層在傳送時可能要進行分片,這會降低IP層的效率。
若報文太短,UDP把它交給IP層后,會使IP數據報的首部的相對長度太大,這也降低了IP層的效率。
UDP沒有擁塞控制
UDP支持一對一/一對多/多對一和多對多的交互通信
UDP的首部開銷小,只有8個字節,比TCP的20個字節的首部要短
首部
偽首部(12字節)是用來計算校驗和的。
檢驗和
UDP計算檢驗和的方法和計算IP數據報首部檢驗和的方法類似。但不同的是:
IP數據報的檢驗和只檢驗IP數據報的首部,但UDP的檢驗和是把首部和數據部分一起都檢驗。
UDP的檢驗和即檢查了UDP用戶數據報的源端口和目的端口以及UDP用戶數據報的數據部分,又檢查了IP數據報的源IP地址和目的地址。
其他
如果接收方UDP發現收到的報文中的目的端口不存在對應的應用進程,就丟棄該報文,并由網際控制報文協議ICMP發送“端口不可達”差錯報文給發送方。
traceroute就是讓發送的UDP用戶數據報故意使用一個非法的UDP端口,結果ICMP就返回“端口不可達”差錯報文,因而達到了測試的目的。