傳輸層
傳輸層的功能:
傳輸層是向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層,同時也是用戶功能中的最低層。
傳輸層位于網(wǎng)絡(luò)層之上,為運行在不同主機(jī)上的應(yīng)用程序提供邏輯通信,而網(wǎng)絡(luò)層提供了主機(jī)之間的邏輯通信。即使網(wǎng)絡(luò)層的協(xié)議是不可靠的,但傳輸層還是能為應(yīng)用程序提供可靠的服務(wù)。
只有主機(jī)的協(xié)議棧才會有傳輸層和網(wǎng)絡(luò)層,而路由器再轉(zhuǎn)發(fā)分組的時候都只用到了下三層的功能。(即在通信子網(wǎng)中沒有傳輸層,傳輸層只存在于通信子網(wǎng)以外的主機(jī)中)

<font face="微軟雅黑" color=#DC143C size=4 >** 傳輸層的功能:**</font>
1、傳輸層提供應(yīng)用進(jìn)程之間的邏輯通信(即端到端的通信)。與網(wǎng)絡(luò)層的區(qū)別是,網(wǎng)絡(luò)層提供的是機(jī)之間的邏輯通信。
2、復(fù)用和分用。復(fù)用是指發(fā)送方不同的應(yīng)用進(jìn)程都可以使用同一個傳輸層協(xié)議傳送數(shù)據(jù);分用是指接收方的傳輸層在剝?nèi)笪牡氖撞亢竽軌虬堰@些數(shù)據(jù)正確交付到目的應(yīng)用進(jìn)程。
注意:傳輸層的復(fù)用分用功能與網(wǎng)絡(luò)層的復(fù)用分用功能不同。
網(wǎng)絡(luò)層的復(fù)用是指發(fā)送方不同協(xié)議的數(shù)據(jù)都可以封裝成IP數(shù)據(jù)報發(fā)送出去,分用是指接收方的網(wǎng)絡(luò)層在剝?nèi)ナ撞亢蟀褦?shù)據(jù)交付給相應(yīng)的協(xié)議。
3、傳輸層還要對收到的報文進(jìn)行差錯檢測(首部和數(shù)據(jù)部分)。而網(wǎng)絡(luò)層只檢查IP數(shù)據(jù)報的首部,不檢驗數(shù)據(jù)部分是否出錯。
4、提供兩種不同的傳輸協(xié)議,即面向連接的TCP和無連接的UDP。而網(wǎng)絡(luò)層無法同時實現(xiàn)兩種協(xié)議(即在網(wǎng)絡(luò)層要么只提供面向連接的服務(wù),如虛電路,要么只提供無連接服務(wù),如數(shù)據(jù)報,而不可能在網(wǎng)絡(luò)層同時存在這兩種方式)。
?
端口和端口號:
一、端口的作用:
端口能夠讓應(yīng)用層的各種應(yīng)用進(jìn)程將其數(shù)據(jù)通過端口號向下交付給傳輸層,以及讓傳輸層知道應(yīng)當(dāng)將其報文段中的數(shù)據(jù)向上通過通端口交付給應(yīng)用層相應(yīng)的進(jìn)程。
端口就是傳輸層服務(wù)訪問點TSAP,它在傳輸層的作用類似于IP地址在網(wǎng)絡(luò)層的作用或MAC地址在數(shù)據(jù)鏈路層的作用,只不過IP地址和MAC地址標(biāo)識的是主機(jī),而端口標(biāo)識的是主機(jī)中的應(yīng)用進(jìn)程。
端口號只具有本地意義,即端口號只是為了標(biāo)志本計算機(jī)應(yīng)用層中的各進(jìn)程。在因特網(wǎng)中不同計算機(jī)的相同端口號是沒有聯(lián)系的。
?
二、端口號:
應(yīng)用進(jìn)程通過端口號進(jìn)行標(biāo)識,端口號長度為16bit,能夠表示6536(2^6)個不同的端口號。
端口號只具有本地意義,即端口號只是為了標(biāo)志本計算機(jī)應(yīng)用層中的各進(jìn)程,不同計算機(jī)的相同的端口號是沒有聯(lián)系的。根據(jù)端口號范圍可將端口分為兩類:
<font face="微軟雅黑" color=#DC143C size=4 >1、服務(wù)端使用的端口號。</font>
這里又分為兩類,最重要的一類是熟知端口號,數(shù)值為0~1023,IANA(互聯(lián)網(wǎng)地址指派機(jī)構(gòu))把這些端口號指派給了TCP/IP最重要的一些應(yīng)用程序,讓所有的用戶都知道。
另一類叫做登記端口號,數(shù)值為1024~49151。它是為沒有熟知端口號的應(yīng)用程序使用的,使用這類端口號必須在IANA登記,以防止重復(fù)。
一些常用的熟知端口號如下:

<font face="微軟雅黑" color=#DC143C size=4 >2、客戶端使用的端口號:</font>
數(shù)值為:49152 ~ 65535,由于這類端口號僅在客戶進(jìn)程運行時才動態(tài)選擇,因此又叫短暫端口號。通信結(jié)束后,剛才使用過的客戶端口號就不復(fù)存在,這個端口號就可以供其他客戶進(jìn)程使用。
?
三、套接字
網(wǎng)絡(luò)中通過 IP 地址來表示一臺主機(jī),通過端口號來區(qū)分一臺主機(jī)中的不同應(yīng)用程序。在網(wǎng)絡(luò)中采用發(fā)送方和接收方的套接字組合來識別端點,所謂的套接字實際上就是一個通信端點,即:
套接字=(主機(jī) IP 地址 , 端口號)
它唯一的標(biāo)識了網(wǎng)絡(luò)中的一個主機(jī)和其上的一個應(yīng)用(進(jìn)程)
?
無連接服務(wù)和面向連接服務(wù):
面向連接的服務(wù)就是在通信雙方進(jìn)行通信之前,必須先建立連接,在通信過程中,整個連接的情況一直被實時地監(jiān)控和管理。當(dāng)通信結(jié)束后,則應(yīng)該釋放這個連接。
而無連接的服務(wù),兩個實體之間的通信不需要先建立好連接,需要通信的時候,直接將信息發(fā)送到“網(wǎng)絡(luò)”中,讓該信息的傳遞在網(wǎng)上盡力而為地往且的地傳送。
TCP 是一種面向連接的服務(wù),提供可靠的傳輸服務(wù)。從而不可避免增加了許多開銷,如:確認(rèn)、流量控制、計時器以及連接管理。這不僅使協(xié)議數(shù)據(jù)單元的頭部增大很多還要占用許多的處理機(jī)資源。
因此TCP主要適用于可靠性更重要的場合,如文件傳輸協(xié)議FTP、超文本傳輸協(xié)議HTTP、遠(yuǎn)程登錄TELNET等。
UDP 是一種無連接的非可靠傳輸層協(xié)議,它在IP之上僅提供兩個附加服務(wù):多路復(fù)用和對數(shù)據(jù)的錯誤檢查。
UDP在傳送數(shù)據(jù)之前不需要先建立連接,遠(yuǎn)程主機(jī)的傳輸層收到UDP報文后,不需要給出任何確認(rèn)。
由于UDP比較簡單,其執(zhí)行速度就比較快、實時性好。使用UDP的應(yīng)用主要包括小文件傳送協(xié)議(TFTP)、DNS、SNMP和實時協(xié)議(RTP)。
?
<font face="微軟雅黑" color=#DC143C size=4>注意:</font>
1、IP數(shù)據(jù)報和UDP數(shù)據(jù)報的區(qū)別:
IP數(shù)據(jù)報在網(wǎng)絡(luò)層要經(jīng)過路由的存儲轉(zhuǎn)發(fā);
而UDP數(shù)據(jù)報是在傳輸層的端到端的邏輯信道中傳輸,而封裝成IP數(shù)據(jù)報在網(wǎng)絡(luò)層傳輸時,UDP數(shù)據(jù)報的信息對路由是不可見的。
2、TCP 和網(wǎng)絡(luò)層虛電路的區(qū)別:
TCP報文段是在傳輸層抽象的邏輯信道中傳輸,對路由器不可見。
虛電路所經(jīng)過的交換結(jié)點都必須保存虛電路狀態(tài)信息。
在網(wǎng)絡(luò)層若采用虛電路方式,則無法提供無連接服務(wù);而傳輸層采用TCP協(xié)議不影響網(wǎng)絡(luò)層提供無連接服務(wù)。
?
UDP
UDP只是做了傳輸協(xié)議能夠做的最少工作,只在IP的數(shù)據(jù)報服務(wù)之上增加了兩個最基本的服務(wù): <font face="微軟雅黑" color=#DC143C size=4>復(fù)用和分用</font> 以及 <font face="微軟雅黑" color=#DC143C size=4>差錯控制</font> 。
一、UDP 的優(yōu)點:
1、UDP無需建立連接。因此UDP不會引入建立連接的時延。
2、無連接狀態(tài)。
TCP需要在端系統(tǒng)中維護(hù)連接狀態(tài)。此連接狀態(tài)包括接收和發(fā)送緩存、擁塞控制參數(shù)和序號與確認(rèn)號的參數(shù)。
而UDP不維護(hù)連接狀態(tài),也不跟蹤這些參數(shù)。因此,某些專用應(yīng)用服務(wù)器使用UDP時,一般都能支持更多的活動客戶機(jī)。
3、分組首部開銷小。TCP 20字節(jié)的首部開銷,而UDP僅有8字的開銷。
4、應(yīng)用層能更好地控制要發(fā)送的數(shù)據(jù)和發(fā)送時間。
UDP沒有擁塞控制,因此網(wǎng)絡(luò)中的擁塞也不會影響主機(jī)的發(fā)送效率。某些實時應(yīng)用要求以穩(wěn)定的速度發(fā)送,能容忍一些數(shù)據(jù)的丟失,但不允許有較大的時延,而UDP正好滿足這些應(yīng)用的需求。
UDP 常用于一次性傳輸比較少量數(shù)掘的網(wǎng)絡(luò)應(yīng)用,如DNS、SNMP等, UDP也常用于多媒體應(yīng)用(如IP電話、實時視頻會議、流媒體等)
UDP 提供盡最大努力的交付,即不保證可靠交付,但這并不意味著應(yīng)用對數(shù)據(jù)的要求是不可靠的,因此所有維護(hù)傳輸可靠性的工作需要用戶在應(yīng)用層來完成。應(yīng)用實體可以根據(jù)應(yīng)用的需求來靈活設(shè)計自己的可靠性機(jī)制。
UDP是面向報文的。發(fā)送方UDP對應(yīng)用層交下來的報文,在添加首部后就向下交付給IP層,既不合并,也不拆分,而是保留這些報文的邊界;
接收方UDP對IP層交上來UDP用戶數(shù)據(jù)報,去除首部后就原封不動地交付給上層應(yīng)用進(jìn)程,一次交付一個完整的報文。
因此報文不可分割,是UDP數(shù)據(jù)報處理的最小單位。
?
二、UDP的首部格式
UDP數(shù)據(jù)報包含兩個部分: UDP首部和用戶數(shù)據(jù),整個UDP數(shù)據(jù)報作為IP數(shù)據(jù)報的數(shù)據(jù)部分封裝在IP數(shù)據(jù)報中,如圖所示。

校驗和:檢測UDP數(shù)據(jù)報在傳輸中是否有錯。有錯就丟。當(dāng)源主機(jī)不想計算校驗和,則直接令該字段為全0。
如果接收方UDP發(fā)現(xiàn)收到的報文中的目的端口號不正確(即不存在對應(yīng)于端口號的應(yīng)用進(jìn)程),就丟棄該報文,并由ICMP發(fā)送“端口不可達(dá)”差錯報文給發(fā)送方。
?
三、UDP 校驗:
在計算校驗和之前要在 UDP 數(shù)據(jù)報之前增加 12 個字節(jié)的偽首部。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算校驗和。
有了偽首部不僅校驗了 UDP 數(shù)據(jù)報,同時也校驗了 IP 數(shù)據(jù)報的源 IP 地址和目的 IP 地址。

<font face="微軟雅黑" color=#DC143C size=5 >校驗的過程:</font>

首先發(fā)送方把是全零放入校驗和字段并且添加偽首部。
然后,把UDP數(shù)據(jù)報看成是由許多16位的字串連接起來。
若UDP數(shù)據(jù)報的數(shù)據(jù)部分不是偶數(shù)個字節(jié),則要在數(shù)據(jù)部分增加一個全零字節(jié)(此字節(jié)不發(fā)送)。
接下來就按二進(jìn)制反碼計算出這些16位空的和。將此和的二進(jìn)制反碼寫入校驗和中。
在接收方,把收到的UDP數(shù)據(jù)報加上偽首部(如果不為偶數(shù)個字節(jié),則需要補(bǔ)上全零字節(jié))后,按二進(jìn)制反碼計算出這些16位字的和。
當(dāng)無差錯時其結(jié)果應(yīng)全為1。否則就表明有差錯出現(xiàn),并丟棄這個 UDP 數(shù)據(jù)報。
?
<font face="微軟雅黑" color=#DC143C size=4 >注意:</font>
1、校驗時,若UDP數(shù)據(jù)報部分的長度不是偶數(shù)個字節(jié),則需要填入一個全0字節(jié),但是此字節(jié)和偽首部一樣,是不發(fā)送的。
2、如果UDP校驗和校驗出UDP數(shù)據(jù)報是錯誤的,可以丟棄,也可以交付給上層,但是需要附上錯誤報告,即告訴上層這是錯誤的數(shù)據(jù)報。
3、相比于 IP 數(shù)據(jù)報的校驗只校驗 IP 數(shù)據(jù)報的首部而言,UDP 的校驗是把首部和數(shù)據(jù)部分一起進(jìn)行校驗。
這種簡單的差錯檢驗方法的檢錯能力并不強(qiáng),但它的好處是簡單,處理速度快。
public static void main(String args[]){
System.out.println(" Hello Word ");
}