簡述電子商務(wù)的概念seo公司推薦推廣平臺
文章目錄
- 1.什么是傳輸層
- 2.傳輸層提供了什么服務(wù)
- 3.傳輸層協(xié)議TCP
1.什么是傳輸層
傳輸層是OSI七層體系架構(gòu)中的第四層, TCP/IP四層體系架構(gòu)中的第二層, 從通信和信息處理兩方面來看,“傳輸層”既是面向通信部分的最高層,與下面的三層一起共同構(gòu)建進(jìn)行網(wǎng)絡(luò)通信所需的線路和數(shù)據(jù)傳輸通道,同時又是面向用戶的最低層,因為無論何種網(wǎng)絡(luò)應(yīng)用,最終都需要把各種數(shù)據(jù)報傳送到對方。應(yīng)用層的用戶數(shù)據(jù)通過傳輸層協(xié)議在不同網(wǎng)絡(luò)中的主機(jī)間進(jìn)行傳輸,因為僅靠網(wǎng)絡(luò)層把數(shù)據(jù)傳送到目的主機(jī)上還是不夠的,還必須把它交給目的主機(jī)的應(yīng)用進(jìn)程。
當(dāng)網(wǎng)絡(luò)層把源主機(jī)上發(fā)出的數(shù)據(jù)包傳送給目的主機(jī)后,還需要將數(shù)據(jù)交到對應(yīng)的應(yīng)用程序進(jìn)程. 位于兩臺網(wǎng)絡(luò)主機(jī)間的真正數(shù)據(jù)通信主體不是這兩臺主機(jī),而是兩臺主機(jī)中的各種網(wǎng)絡(luò)應(yīng)用進(jìn)程。因為在同一時刻,兩主機(jī)間可以進(jìn)行多個應(yīng)用通信. 而這里的應(yīng)用進(jìn)程識別就要依靠“傳輸層”了,它通過“端口”將不同應(yīng)用進(jìn)程進(jìn)行對應(yīng)的。
2.傳輸層提供了什么服務(wù)
傳輸層的主要作用就是為它的上層提供端到端的數(shù)據(jù)傳輸服務(wù), 即保證應(yīng)用層的數(shù)據(jù)能夠從源主機(jī)安全的到達(dá)目的主機(jī)上對應(yīng)的應(yīng)用進(jìn)程.
1.什么是端到端的服務(wù)?
端到端通信是傳輸層為主機(jī)之間上的應(yīng)用進(jìn)程提供的通信服務(wù). 傳輸層的數(shù)據(jù)段通過網(wǎng)絡(luò)層將數(shù)據(jù)段交付到對端主機(jī)的目的進(jìn)程,不管目的主機(jī)有多遠(yuǎn),中間有多少機(jī)器,只要在兩頭間的應(yīng)用進(jìn)程間建立連接,就說已經(jīng)是端到端連接了(兩個進(jìn)程間的連接),即端到端是邏輯鏈路,這條路可能經(jīng)過了很復(fù)雜的物理路線,但兩端程序不管,就好像它們是直接相連的一樣,只認(rèn)為是兩端的直連.
你比如你要將數(shù)據(jù)從A傳送到E,中間可能經(jīng)過A→B→C→D→E,對于傳輸層來說他并不知道b,c,d的存在,他只認(rèn)為我的報文數(shù)據(jù)是從a直接到e的,這就叫做端到端。
2.如何實現(xiàn)端到端的服務(wù)?
傳輸層實現(xiàn)端到端的服務(wù)有兩種方式,一種是面向連接的,一種是面向無連接的.
面向連接
:在提供傳輸服務(wù)前需要先建立專門的傳輸連接(類似一條專門用于兩個進(jìn)程之間進(jìn)行通信的虛擬信道),而且這條連接是可管理的,在需要或通信結(jié)束時進(jìn)行拆除。面向連接的傳輸服務(wù)是可靠的傳輸服務(wù),而且可提供擁塞控制和差錯控制功能,如TCP提供的傳輸服務(wù)。
無連接
:在提供服務(wù)前不需要建立專門的傳輸連接,直接向目的節(jié)點發(fā)送數(shù)據(jù),不管是否有可傳輸?shù)耐ǖ?#xff0c;只提供不可靠(僅做盡力傳輸)的傳輸服務(wù),如UDP提供的傳輸服務(wù)。
上述服務(wù)與網(wǎng)絡(luò)層提供的面向連接和無連接服務(wù)很像,但網(wǎng)絡(luò)層是通信子網(wǎng)的一個組成部分,網(wǎng)絡(luò)服務(wù)質(zhì)量并不可靠,如頻繁地丟失分組,網(wǎng)絡(luò)層系統(tǒng)可能崩潰或不斷地進(jìn)行網(wǎng)絡(luò)復(fù)位。對于這些情況,用戶將束手無策,因為用戶不能對通信子網(wǎng)加以控制。而傳輸層能對通信子網(wǎng)進(jìn)行管理和控制(什么進(jìn)行管理和控制,網(wǎng)絡(luò)層信息該丟還是丟,只不過丟了之后能夠知道并重新對數(shù)據(jù)進(jìn)行發(fā)送或其它操作管理)。
3.傳輸層服務(wù)
傳輸層要完成端到端的透明數(shù)據(jù)傳輸,至少要分為兩個步驟:一是應(yīng)用進(jìn)程之間虛擬傳輸連接的建立(此處仍僅針對面向連接的傳輸層協(xié)議),二是源端用戶數(shù)據(jù)沿著傳輸連接傳送到目的端。
在整個數(shù)據(jù)傳輸過程中,傳輸層服務(wù)需要完成以下8個方面的基本功能:傳輸層尋址、傳輸連接建立、數(shù)據(jù)傳輸、傳輸連接釋放、流量控制、擁塞控制、多路復(fù)用和解復(fù)用、崩潰恢復(fù).
4.連接與釋放連接服務(wù)
|4.1傳輸層尋址
雖然網(wǎng)絡(luò)層把數(shù)據(jù)分組從源主機(jī)傳送到了目的主機(jī),但是這并不代表數(shù)據(jù)的傳輸過程就全部完成了,因為數(shù)據(jù)分組還沒有真正地交付給相應(yīng)的應(yīng)用進(jìn)程,此時應(yīng)用進(jìn)程才是數(shù)據(jù)通信主體。而我們又知道,同一時間的通信雙方可能存在許多并發(fā)應(yīng)用進(jìn)程,那么源端來的數(shù)據(jù)分組該交給哪個應(yīng)用進(jìn)程呢?這就涉及傳輸層的尋址問題了。
傳輸層(二)傳輸層尋址方案
|4.2連接建立
傳輸層有兩個重要術(shù)語TSAP與TPDU,它們貫穿整個傳輸層數(shù)據(jù)連接以及傳輸服務(wù)的始末.
TSAP
(Transport Layer Service Access Point):傳輸層服務(wù)訪問點是上層(應(yīng)用層)調(diào)用下層(傳輸層)的一個邏輯接口,其實就是我們所說的端口,端口用來標(biāo)識應(yīng)用層的進(jìn)程.
TPDU
(Transport Layer Data Unit):傳輸層與對等層之間傳輸?shù)膱笪?也就是"數(shù)據(jù)段",其實每一層都有每一層的SAP和PDU.
傳輸層TCP數(shù)據(jù)段格式:
源端口號
:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是標(biāo)識報文的返回地址。
目的端口號
:16位的目的端口域定義傳輸?shù)哪康?。這個端口指明報文接收計算機(jī)上的應(yīng)用程序地址接口。
序列號
:對數(shù)據(jù)包進(jìn)行標(biāo)記,以便在到達(dá)目的地后重新重裝,假設(shè)當(dāng)前的序列號為 s,發(fā)送數(shù)據(jù)長度為 l,則下次發(fā)送數(shù)據(jù)時的序列號為 s + l,每發(fā)送一次數(shù)據(jù),就累加一次該數(shù)據(jù)字節(jié)數(shù)的大小。在建立連接時由計算機(jī)生成一個隨機(jī)數(shù)作為序列號的初始值,用來解決網(wǎng)絡(luò)包亂序問題??蛻舳说男蛄刑枮樯弦粋€服務(wù)器端的確認(rèn)號.
確認(rèn)序號
:收到對方報文后都要發(fā)送一個確認(rèn)報文(包含確認(rèn)號)表示確認(rèn)收到該報文,并表明期望收到的下一個報文段的序號值。 TCP 的可靠性,是建立在「每一個數(shù)據(jù)報文都需要被確認(rèn)收到」的基礎(chǔ)之上的,用來解決不丟包的問題??蛻舳说拇_認(rèn)號,是上一個服務(wù)器端的序列號+負(fù)載數(shù)據(jù).
數(shù)據(jù)偏移
:TCP 報文段的頭部長度 ,它指出了 TCP報文段的數(shù)據(jù)起始處距離TCP報文的起始處有多遠(yuǎn)。
由于 4 位二進(jìn)制數(shù)能表示的最大十進(jìn)制數(shù)字是 15,這也側(cè)面限制了 TCP 首部的最大長度
保留: 保留為今后使用,但目前應(yīng)置為 0
標(biāo)志位
: 6位標(biāo)志位,每一位的值只有 0 和 1
- ACK:當(dāng) ACK = 1 的時候,確認(rèn)號(Acknowledgemt Number)有效,稱攜帶 ACK 標(biāo)志的 TCP 報文段為確認(rèn)報文段,為0表示數(shù)據(jù)段不包含確認(rèn)信息,確認(rèn)號被忽略。TCP 規(guī)定,在連接建立后所有傳送的報文段都必須把 ACK 設(shè)置為 1
- SYN:當(dāng) SYN = 1 的時候,表明這是一個請求連接報文段。 一般稱攜帶 SYN 標(biāo)志的 TCP 報文段為同步報文段。 在 TCP 三次握手中的第一個報文就是同步報文段,在連接建立時用來同步序號。對方若同意建立連接,則應(yīng)在響應(yīng)的報文段中使 SYN = 1 和 ACK = 1。
- FIN:當(dāng) FIN = 1 時,表示此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并要求釋放 TCP 連接。一般稱攜帶 FIN 的報文段為結(jié)束報文段。在 TCP 四次揮手釋放連接的時候,就會用到該標(biāo)志。
- RST:當(dāng) RST = 1時,表示 TCP 連接中出現(xiàn)嚴(yán)重錯誤,需要釋放并重新建立連接。 一般稱攜帶 RST 標(biāo)志的 TCP 報文段為復(fù)位報文段。
- PSH:當(dāng)PSH=1時,表明該數(shù)據(jù)段高優(yōu)先級,接收方TCP應(yīng)盡快將數(shù)據(jù)推給接收程序,不要等到整個TCP序列緩存都填滿了后再交付。
- URG:當(dāng)URG=1時,表明此數(shù)據(jù)段應(yīng)盡快傳送,而不要按本來的隊列次序來傳送。與緊急指針字段共同使用,緊急指針指出在本數(shù)據(jù)段中緊急數(shù)據(jù)所在的最后一個字節(jié)的位置,使接管方知道緊急數(shù)據(jù)有多長。
窗口大小
:該字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量,它告訴對方本端的 TCP 接收緩沖區(qū)還能容納多少字節(jié)的數(shù)據(jù),這樣對方就可以控制發(fā)送數(shù)據(jù)的速度。 窗口大小的值是指,從本報文段首部中的確認(rèn)號算起,接收方目前允許對方發(fā)送的數(shù)據(jù)量。假如確認(rèn)號是 701 ,窗口字段是 1000。這就表明,從 701 號算起,發(fā)送此報文段的一方還有接收 1000 (字節(jié)序號是 701 ~ 1700) 個字節(jié)的數(shù)據(jù)的接收緩存空間。
校驗和
:由發(fā)送端填充,接收端對 TCP 報文段執(zhí)行 CRC 算法,以檢驗 TCP 報文段(頭部+有效載荷)在傳輸過程中是否損壞,如果損壞這丟棄。
緊急指針
:僅在 URG = 1 時才有意義,指出本數(shù)據(jù)段中的緊急數(shù)據(jù)字節(jié)數(shù),同時指出了緊急數(shù)據(jù)的末尾在數(shù)據(jù)段中的位置,發(fā)送方 TCP 把緊急數(shù)據(jù)插入到本數(shù)據(jù)段有效載荷的最前面,而在緊急數(shù)據(jù)后面的數(shù)據(jù)仍是普通數(shù)據(jù)。
選項和填充
:可擴(kuò)展部分。
傳輸層建立/拒絕連接需要用到三種類型的TPDU一一CR,CC,RJ
CR:連接請求數(shù)據(jù)段
CC:連接確認(rèn)數(shù)據(jù)段
RJ:拒絕數(shù)據(jù)段
傳輸層建立/拒絕連接的大致流程:
TCP建立連接/斷開連接
的流程:
TCP規(guī)定,建立連接時發(fā)送的同步數(shù)據(jù)段(即SYN = 1的報文段)不能攜帶數(shù)據(jù),但要消耗掉一個序號.
- Ⅰ:建立連接時,主機(jī)A發(fā)送同步報文,并將同步位SYN置為1,確認(rèn)位ACK置為0(代表當(dāng)前報文的確認(rèn)序號無效),隨機(jī)產(chǎn)生一個序列號seq=k,然后將該數(shù)據(jù)包發(fā)送給主機(jī)B,主機(jī)A進(jìn)入SYN_SENT狀態(tài),等待主機(jī)B確認(rèn)。
- Ⅱ:主機(jī)B收到報文后由同步位SYN=1知道主機(jī)A請求建立連接,主機(jī)B將同步位SYN和確認(rèn)位ACK都置為1,確認(rèn)序號ack=J+1,隨機(jī)產(chǎn)生一個序號seq=y,并將該報文發(fā)送給主機(jī)A以確認(rèn)收到該連接請求,主機(jī)B進(jìn)入SYN_RCVD狀態(tài)。
- Ⅲ:主機(jī)A收到確認(rèn)報文后,檢查ACK是否為1,再檢查確認(rèn)序號ack是否為k+1,如果正確則將確認(rèn)位ACK置為1,ack=y+1(表示我收到你序號位y的報文了),并將該報文發(fā)送給主機(jī)B,主機(jī)B檢查ACK是否為1,再檢查ack是否為y+1,如果正確則成功建立連接,主機(jī)A和主機(jī)B進(jìn)入ESTABLISHED狀態(tài),完成三次握手,隨后主機(jī)A與主機(jī)B之間可以開始傳輸數(shù)據(jù)了。
斷開連接:
- Ⅰ:斷開連接時,主機(jī)A發(fā)送一個終止報文,并將終止位FIN置為1,確認(rèn)位ACK置為0,隨機(jī)產(chǎn)生一個序列號seq=u,然后將該報文發(fā)送給主機(jī)B,用來關(guān)閉主機(jī)A到主機(jī)B的數(shù)據(jù)傳送,主機(jī)A進(jìn)入FIN_WAIT_1狀態(tài)。
- Ⅱ:主機(jī)B收到終止報文后,發(fā)送一個確認(rèn)報文給主機(jī)A,并將確認(rèn)位ACK置為1,確認(rèn)序號ack=u+1,隨機(jī)生成一個序號seq=v,主機(jī)B進(jìn)入CLOSE_WAIT狀態(tài)。
- Ⅲ:主機(jī)B發(fā)送一個終止報文,并將終止位FIN置為1,確認(rèn)位ACK置為1,隨機(jī)序號seq=w,確認(rèn)號=u+1,用來關(guān)閉主機(jī)B到主機(jī)A的數(shù)據(jù)傳送,主機(jī)B進(jìn)入LAST_ACK狀態(tài)。
- Ⅳ:主機(jī)A收到終止報文FIN后,主機(jī)A進(jìn)入TIME_WAIT狀態(tài),接著發(fā)送一個確認(rèn)報文ACK給主機(jī)B,確認(rèn)序號為ack=w+1,序號seq=u+1,主機(jī)B進(jìn)入CLOSED狀態(tài),完成四次揮手。
為什么建立連接是三次握手,而關(guān)閉連接卻是四次揮手呢?
這是因為主機(jī)B在LISTEN狀態(tài)下,收到建立連接請求的SYN報文后,把ACK和SYN放在一個報文里發(fā)送給主機(jī)A。而關(guān)閉連接時,當(dāng)收到對方的FIN報文時,僅僅表示對方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù),己方也未必全部數(shù)據(jù)都發(fā)送給對方了,所以己方可以立即close,也可以發(fā)送一些數(shù)據(jù)給對方后,再發(fā)送FIN報文給對方來表示同意現(xiàn)在關(guān)閉連接,因此,己方ACK和FIN一般都會分開發(fā)送。
5.數(shù)據(jù)傳輸服務(wù)
傳輸層在數(shù)據(jù)傳輸時提供了流量控制、擁塞控制、多路復(fù)用和解復(fù)用、崩潰恢復(fù)等服務(wù).
傳輸層TCP的流量控制和擁塞控制(圖文詳解)
如何理解傳輸層的多路復(fù)用與多路分解
3.傳輸層協(xié)議TCP
補充:
通信子網(wǎng)
(communication subnet,或簡稱子網(wǎng)): 是指網(wǎng)絡(luò)中實現(xiàn)網(wǎng)絡(luò)傳輸功能的設(shè)備及其軟硬件的集合,傳輸設(shè)備、網(wǎng)絡(luò)傳輸協(xié)議、傳輸控制軟件等屬于通信子網(wǎng),是網(wǎng)絡(luò)的內(nèi)層,負(fù)責(zé)信息的傳輸. 簡而言之就是由各種網(wǎng)絡(luò)傳輸設(shè)備(中繼器、集線器、網(wǎng)橋、路由器、網(wǎng)關(guān)等硬件設(shè)備)和傳輸線路組成,主要負(fù)責(zé)數(shù)據(jù)的傳輸. 通信子網(wǎng)對應(yīng)OSI體系架構(gòu)中的下三層(物理/數(shù)據(jù)鏈路/網(wǎng)絡(luò)層).
資源子網(wǎng)
:資源子網(wǎng)由計算機(jī)系統(tǒng)、終端、終端控制器、連網(wǎng)外設(shè)、各種軟件資源與信息資源組成, 主要負(fù)責(zé)數(shù)據(jù)的處理和數(shù)據(jù)存儲,資源子網(wǎng)對應(yīng)OSI體系結(jié)構(gòu)的上三層(應(yīng)用/表示/會話層).
點到點傳輸
:兩個設(shè)備直接相連(中間不經(jīng)過任何其它設(shè)備)的通信叫點到點通信。它只提供一臺機(jī)器到另一臺機(jī)器之間的通信,不會涉及到程序或進(jìn)程的概念。
點到點通信是針對數(shù)據(jù)鏈路層或網(wǎng)絡(luò)層來說的,因為數(shù)據(jù)鏈路層只負(fù)責(zé)直接相連的兩個節(jié)點之間的通信,一個節(jié)點的數(shù)據(jù)鏈路層接受ip層數(shù)據(jù)并封裝之后,就把數(shù)據(jù)幀從鏈路上發(fā)送到與其相鄰的下一個節(jié)點。 點對點是基于MAC地址和或者IP地址,是指一個設(shè)備發(fā)數(shù)據(jù)給與該這邊直接連接的其他設(shè)備,這臺設(shè)備又在合適的時候?qū)?shù)據(jù)傳遞給與它相連的下一個設(shè)備,通過一臺一臺直接相連的設(shè)備把數(shù)據(jù)傳遞到接收端。由物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層組成的通信子網(wǎng)為網(wǎng)絡(luò)環(huán)境中的主機(jī)提供點到點的服務(wù).
序列號
:TCP協(xié)議工作在OSI的傳輸層,是一種可靠的面向連接的數(shù)據(jù)流協(xié)議,TCP之所以可靠,是因為它保證了傳送數(shù)據(jù)包的順序。順序是用一個序列號來保證的。響應(yīng)包內(nèi)也包括一個序列號,表示接收方準(zhǔn)備好這個序列號的包。在TCP傳送一個數(shù)據(jù)包時,它會把這個數(shù)據(jù)包放入重發(fā)隊列中,同時啟動計時器,如果收到了關(guān)于這個包的確認(rèn)信息,便將此數(shù)據(jù)包從隊列中刪除,如果在計時器超時的時候仍然沒有收到確認(rèn)信息,則需要重新發(fā)送該數(shù)據(jù)包。另外,TCP通過數(shù)據(jù)分段中的序列號來保證所有傳輸?shù)臄?shù)據(jù)可以按照正常的順序進(jìn)行重組,從而保障數(shù)據(jù)傳輸?shù)耐暾?br /> TCP序列號是兩個方向的,每個方向有自己的序列號,這個序列號是隨機(jī)產(chǎn)生的.
客戶端的序列號為上一個服務(wù)器端的確認(rèn)號,客戶端的確認(rèn)號,是上一個服務(wù)器端的序列號+負(fù)載數(shù)據(jù).
參考:
端到端通信
TCP協(xié)議詳解
TCP/IP協(xié)議詳解
《深入理解計算機(jī)網(wǎng)絡(luò)》之傳輸層總結(jié)