網絡基礎四 傳輸層

server(指的服務器端) ,client(指的是客戶端)算法

1、 傳輸層做用緩存

傳輸層的做用其實就是實現,兩臺在主機中應用程序之間的通訊。(被稱之爲邏輯通訊)服務器

 

 

 

傳輸層協議網絡

TCP(傳輸控制協議)數據結構

MSL :一個傳輸報文,在網絡上最大的生存時間 ,和咱們的ttl概念有點相似。不過msl是指的時間,而後ttl是指一個數據包,在整個網絡中轉發,最多能夠通過多少臺路由器。tcp

1、tcp報文數據結構優化

首先tcp報文,和ip數據包是同樣的,也分爲首部和數據部分,下圖就是tcp報文的首部spa

 

根據上述圖中,tcp報文的首部長度也是有20個字節,一共有5層,每一層4個字節,源端口和目的端口就是兩個須要通訊進程對應的端口號,很少說3d

序號(seq):若是是在創建鏈接的過程,這個初始序列號是發送端隨機產生的一個數字。指針

確認號(ack):指定的是下一個指望接收的字節

數據偏移:整個tcp報文,從哪一位開始是數據部分,而不是tcp首部。

保留:用於之後的擴展

接下來每一個8個1bit的標誌位:這8個標誌位是成對使用的

cwr和ece 用來處理擁塞控制 。

syn 和ack ,syn用來創建鏈接的 ,ACK標識,確認位(ack)是有效的。用來標識這是一個確認報

urg 和psh 是用來表示數據包傳輸和接收優先的,urg是發送端優先 ,psh是接收端優先接收。

rst 和 fin ,rst是用來處理重置一個鏈接,fin表示釋放一個鏈接。

窗口 :用來處理流量控制的,應用了滑動窗口技術,這個會在tcp特性中講解。

檢驗和 :就是用來檢測整個數據包的

緊急指針:和urg標誌位共用,一旦urg是1,緊急指針是用來標識整個tcp報文從哪一個字節開始是優先處理部分。

 

2、特性:面向鏈接 、 可靠傳輸 、 流量控制,擁塞控制 、 面向字節流

 

首先解釋一下什麼是可靠傳輸:

RTT(Round Trip Time):一個鏈接的往返時間,即數據發送時刻到接收到確認的時刻的差值; 

tcp協議的可靠傳輸是指,中止等待協議,簡單來理解就是send一個tcp報文,必需要等待一個receive返回一個確認信息。若是沒有收到,就中止等待,

中止等待的時間就是rtt,若是過了這個時間尚未收到確認信息,就再發送一次以前的報文。可是因爲這種協議效率過低了,基於這種原理,就是出現了

流水線發送累計確認

流水線發送:

累積確認:就是發送方一次發送多個數據包,接收方,根據已經接收到的,統一給一個確認

 

 

 面向鏈接:注意我說的是鏈接(不是三次握手,四次斷開),首先咱們應該思考一下爲何要創建鏈接,由於tcp通常是交付應用層較大的文件,因此,是多要多個

tcp數據報文(或者稱之爲分組或者段),這個時候,咱們都用這一個鏈接,將一個大的文件,實現一個完整的交付。假如說沒有這個鏈接,咱們發送端要給接收端一個大的文件

,這個中間的傳輸過程,可能就會走不少不一樣的鏈路,可能,是這個文件最後的尾部先到了,首部丟失了,這樣就會致使傳輸很混亂,因此創建了一個鏈接保證一個穩定的傳輸。下降丟包的機率

接下來,咱們爲了創建這個鏈接就須要到了三次握手,四次揮手了,重點來了!!!

 第一個爲何要三次握手才能創建一個鏈接,是由於防止出現殭屍鏈接。若是隻須要一次請求,一次確認,就能夠創建一個鏈接。會出現這樣一個狀況,第一次發送的狀況,走的鏈路發了阻塞,超過了rtt時間,

這個時候,發送端在發送一個請求,接收端接收,發送一個確認。鏈接創建,穿了一些數據,最後鏈接釋放了。這個時候第一次發送的請求到了接收端,接收端是沒法判斷這個是第一次請求的,就會直接給一個確認,就創建了

一個新的鏈接。而這個鏈接,就消耗了資源。一旦這樣的鏈接多了,會致使主機崩潰。

三次握手的詳細過程

a: 發送端發送一個請求,tcp報文中標誌位,SYN=1,ack=0 ,seq是一個隨機數字.,假如是x

b:接收端收到一個請求返回一個確認 ,tcp報文中, SYN=1 ,ack=x+1 ,ACK=1 ,seq=y

c:發送端接收到這個確認,在發送一個確認給接收端 ,tcp報文中是ACK=1 , ack=y+1 ,seq=x+1

 

 上述一個鏈接創建的過程

數據傳輸完成以後,就涉及到鏈接的釋放,也就是傳說中的四次揮手 ,首先解釋一下爲何會有四次揮手。 由於tcp是全雙工通訊,這就至關於一對

單工通訊。因此當client主動發起釋放鏈接,告訴server,我這邊沒有數據發送了,關閉client向server端發送數據的通道。這個時候,頗有可能,server端

正在給client發送數據,若是這個時候,client直接斷開了,client就接收不到這段數據了,就好像,打電話,A給B打電話,A把想說的話說完了,直接掛斷了,B

還有想要回應的話,這個時候,B沒有說完,A直接掛斷了。而正常的通訊方式是,A說完了,A說我講完了須要掛斷 , B說先別掛斷,等一下,我還優化要說。等B

說完 , 告訴A,我講完了,我也要掛斷了。A說能夠。而後B掛斷。隨後A等到通道忙音後,就掛斷了。

四次揮手詳細過程

A:發起用釋放鏈接的請求,FIN=1 ,SEQ =U .

B:給一個確認,ack=u+1 ,ACK=1 ,seq =v

B:發送一個請求釋放個人鏈接,fin=1 ack =u+1 ,seq =w ,ack=1

A:給一個確認 ,ACK=1 ,ack=w+1 ,seq = u+1

 

 

咱們看到在鏈接創建和釋放的過程當中,這個鏈接都是有狀態的,下面詳細解讀一下這個狀態。

 CLOSED: 鏈接處於關閉狀態

LISTEN:服務器端處理處於監聽狀態,監聽tcp鏈接請求

SYN RECD : 服務器端接到一個鏈接請求 ,並返回給client一個確認,等待client發來一個確認鏈接

SYN SEND : 客戶端主動發起一個鏈接,等待服務器端匹配鏈接,返回確認

EStablished :鏈接已經創建 ,處理傳輸數據的狀態

FIN WAIT1 : 主動釋放鏈接一端,已經沒有數據要發了,請求釋放鏈接

FIN WAIT2 :另外一端贊成釋放鏈接

TIME WAIT :等待2msl時間等待 ,發送一個鏈接斷開的確認信息

Close WAIT :接收一個關閉鏈接的請求,並請求本地應用,等待本地發起的關閉鏈接請求

LAST ACK :等待關閉鏈接的確認

 

滑動窗口技術:用來處理流量控制:

窗口的大小是可變的

 

 

 

緩存中有存在窗口,來處理,發送的數據或者接收的數據,是以字節爲單位的。窗口控制能夠發送數據的大小,窗口經過移動,控制發送數據的範圍。

擁塞控制:

這個擁塞控制就是tcp有一個擁塞窗口,用來分析鏈路上,信信道是否阻塞,若是不是阻塞的就多發點包,

若是是阻塞的就根據算法,少發包。

面向字節流的:

就是tcp通常是交付大文件的,一個文件將會有不少個字節,一個tcp報文是傳輸不完的,因此每個tcp傳輸報文其實是文件中一部分字節,

因此說是面向字節流的。

 

UDP :無鏈接 、 不可靠傳輸、udp面向是文件

簡答來理解 ,無鏈接就是udp報文能夠在任何一個鏈路上傳輸tcp報文

不可靠傳輸是指,udp包發送沒有確認,若是丟失,,客戶端會從新發請求。服務器端在來發送udp包。

一個udp報就能處理頂層整個文件,不處理大型的文件。

相關文章
相關標籤/搜索