网络五层模型
TCP/IP五層模型
應(yīng)用層:
HTTP,HTTPS協(xié)議,其中HTTP沒有對數(shù)據(jù)進行加密操作,但是HTTPS對數(shù)據(jù)進行了加密操作
其中HTTP端口號一般是80/8080等等,HTTPS端口號是443,SSH端口號一般是22,ftp是21
HTTP協(xié)議報頭:
傳輸層:
UDP協(xié)議:
UDP報頭格式
16位源端口號 16位目的端口號 16位UDP長度 16位UDP檢驗和(保證基本的數(shù)據(jù)正確性數(shù)據(jù)可以丟失,但不能把錯的 數(shù)據(jù)傳給應(yīng)用層) 數(shù)據(jù)UDP的特點:
無連接:知道對方的的IP和端口號就直接進行發(fā)送數(shù)據(jù),不管對方有沒有連接
面向數(shù)據(jù)報:不管應(yīng)用層給自己交付的報文長度是多少都不會進行組裝和拆分,假如發(fā)送方一次發(fā)送了100個字節(jié),那么接收方也必須對接受的數(shù)據(jù)一次性接受100字節(jié)
不可靠傳輸:UDP沒有實現(xiàn)確認(rèn)機制和重傳機制,因此如果數(shù)據(jù)發(fā)生丟失則不會告訴給上層的應(yīng)用層
UDP的緩沖區(qū)
UDP是調(diào)用sendto將數(shù)據(jù)直接交給內(nèi)核,內(nèi)核將數(shù)據(jù)交給網(wǎng)絡(luò)層協(xié)議進行后續(xù)傳輸動作,UDP有接受緩沖區(qū),當(dāng)數(shù)據(jù)在接收方的緩沖區(qū)已經(jīng)滿的時候,此時如果再給對方進行數(shù)據(jù)發(fā)送,數(shù)據(jù)就會丟失
UDP是基于全雙工的,通信雙方既可以讀,也可以寫
UDP傳輸數(shù)據(jù)
UDP在傳輸數(shù)據(jù)的時候最大長度是16位,也就是在傳輸?shù)倪^程中最大長度就是64K,如果傳輸裹過程中數(shù)據(jù)大于64K,此時就需要應(yīng)用層將數(shù)據(jù)進行分包,在到達對方的時候進行解包
TCP協(xié)議
HTTP協(xié)議報頭:
16位源端口號 16位目的端口號 32位序列號 32位確認(rèn)序列號 4位首部長度 保留6位 標(biāo)識位 16位窗口大小 16位檢驗和 16位緊急指針 選項 數(shù)據(jù)其中16位的源端口號表示的是來自上層協(xié)議中的那個進程,目的端口號表示要交給接受端那個進程.32位序列號和確認(rèn)序列號保證數(shù)據(jù)的請求和應(yīng)答的正確性.同時也可以保證數(shù)據(jù)的按需到達,由于序列號和序列號也保證了數(shù)據(jù)的重傳機制,也不用再擔(dān)心丟包問題
TCP建立連接和釋放連接
連接的建立:
客戶端向服務(wù)器端發(fā)送一個SYN請求報文,此時客戶端進入SYN_SEND狀態(tài),服務(wù)器接收到這個數(shù)據(jù)之后給客戶端發(fā)送一個ACK確認(rèn)應(yīng)答報文,表示自己也已經(jīng)收到客戶端的SYN報文,同時也會發(fā)送一個SYN請求報文,同時服務(wù)器進入SYN_RECV狀態(tài),此時當(dāng)客戶端接收到這個報文之后給服務(wù)器端發(fā)送一個ACK,此時客戶端進入ESTABLISHED,服務(wù)器接收到這個報文之后也會進入ESTABLISHED狀態(tài)
為什么要進行三次握手,為什么要等待2*MSL
假如只有兩次握手,服務(wù)器放給客戶端的確認(rèn)信號丟失,此時客戶端會認(rèn)為服務(wù)器端沒有接受到自己的報文,于是不停給服務(wù)器發(fā)送無效的報文,勢必造成服務(wù)器的負擔(dān)
在進行四次握手的時候,當(dāng)客戶端給服務(wù)器發(fā)送的最后一個報文ACK丟失,此時服務(wù)器端沒有接受到客戶機的ACK,此時他會給服務(wù)器發(fā)送一個FIN,服務(wù)器接收到這個FIN后對客戶端進行確認(rèn)應(yīng)答,發(fā)送一個ACK,此時兩次下來剛好就是2*MSL
TCP保證可靠性的傳輸手段
確認(rèn)應(yīng)答
客戶端每次給服務(wù)器發(fā)送SYN,服務(wù)器給客戶端發(fā)送的ACK,同時將自己的應(yīng)答信號也會帶著給發(fā)送過去,從而保證了客戶端請求,服務(wù)器端應(yīng)答機制,而TCP報頭中剛好有序號和確認(rèn)序號,從而保證了可靠性傳輸
超時重傳
當(dāng)主機A給主機B發(fā)送一個數(shù)據(jù)的時候,此時由于網(wǎng)絡(luò)的原因造成主機B發(fā)送給主機B的確認(rèn)應(yīng)答報文丟失,主機B會受到大量的重復(fù)的報文,此時主機A會等待特定時間,最后直到最大時間內(nèi)還沒有受到主機B發(fā)送給自己的確認(rèn)應(yīng)答的時候,此時就會認(rèn)為對方已經(jīng)斷開連接,于是主機A會強制關(guān)閉連接
流量控制
在TCP報頭中包括了一個窗口大小的字段用來表示自己可以接收的最大報文數(shù)量.當(dāng)主機A向主機B發(fā)送一個報文的時候,每次都會看一下主機B的接受窗口,主機B接收到主機A發(fā)送給自己的數(shù)據(jù)之后,此時會將自己的接受窗口寫入到TCP報頭中窗口字段中,A接受到主機B發(fā)送給自己的報文之后,首先先看一下對方窗口大小,如果這個窗口大小比較小了,此時主機A會加快自己發(fā)送速度,如果發(fā)現(xiàn)接受方的接受窗口比較小的時候,此時就會減慢自己的發(fā)送速度,當(dāng)發(fā)現(xiàn)對方的接受窗口為0的時候,此時就會停止自己發(fā)送報文.當(dāng)過一段時間的時候,此時發(fā)送方A會給接收方B發(fā)送探測數(shù)據(jù),以便知道對方的接受窗口的大小
擁塞控制
網(wǎng)卡羅上連接了許多的數(shù)據(jù),如果一開始的時候各個主機直接給網(wǎng)絡(luò)發(fā)送很多的數(shù)據(jù),此時勢必會造成網(wǎng)絡(luò)擁塞.TCP規(guī)定了一個擁塞窗口,表示當(dāng)前網(wǎng)絡(luò)能夠接受的做大數(shù)據(jù),每次發(fā)送方在發(fā)送的時候都會將對方的窗口大小和擁塞窗口進行比較,將較小的數(shù)據(jù)作為自己的發(fā)送窗口.
同時在發(fā)送的時候規(guī)定擁塞窗口大小為1,每接收到一個應(yīng)答便將擁塞窗口加1,當(dāng)擁塞窗口的大小大于一個閥值的時候,此時將變?yōu)榫€性增長,同時每次超時重傳的時候閥值會降為原來的一半.同時將硬塞窗口變?yōu)?
TCP保證性能傳輸
滑動窗口
滑動窗口左邊表示的是已經(jīng)確認(rèn)過的,滑動窗口內(nèi)表示的是已經(jīng)發(fā)出去,但是沒有進行確認(rèn)的,滑動窗口右邊的表示的是未發(fā)送的數(shù)據(jù)
延遲應(yīng)答
接受方接受到數(shù)據(jù)后先不對發(fā)送方進行確認(rèn),經(jīng)過一段時間后才對對方發(fā)送的數(shù)據(jù)進行一起確認(rèn).
捎帶應(yīng)答
每次接收方在對對方的發(fā)送數(shù)據(jù)進行確認(rèn)的時候,此時也將自己需要發(fā)送給接受方的數(shù)據(jù)也全部發(fā)送給接收方
TCP和UDP的區(qū)別
TCP是面向字節(jié)流的,一次讀取多少由系統(tǒng)去界定
UDP是面向數(shù)據(jù)報的,發(fā)送和接受的時候必須按一定的大小進行發(fā)送和接受,不能對數(shù)據(jù)進行封裝以及拆分
TCP是保證可靠性的,它為了實現(xiàn)可靠性采用了超時重傳,確認(rèn)應(yīng)答,流浪控制,擁塞控制等手段,同時為了實現(xiàn)性能可靠性,TCP采用了滑動窗口,捎帶應(yīng)答,延遲應(yīng)答等等機制
UDP沒有實現(xiàn)可靠性,它在發(fā)送的過程中如果數(shù)據(jù)發(fā)生了丟失,此時就需要上層去確認(rèn)重傳機制
TCP主要使用與一些可靠傳輸場景,比如文件傳輸?shù)鹊?但是它實現(xiàn)復(fù)雜,傳輸速度較為慢,UDP主要適用于對速度要求較高的場景,比如視頻的傳輸?shù)鹊?/p>
網(wǎng)絡(luò)層
為什么要有網(wǎng)絡(luò)?
之所以要有網(wǎng)絡(luò)層,是因為數(shù)據(jù)在發(fā)送方傳輸層的時候只有自己的源端口和目標(biāo)端口,但是不知道對方的IP以及數(shù)據(jù)應(yīng)該如何到達對方的目的端口都是不知道的,有了網(wǎng)絡(luò)層,此時加上路由器就會將數(shù)據(jù)從遠端通過路由轉(zhuǎn)發(fā)算法對其進行轉(zhuǎn)發(fā),一直到達對方所在的局域網(wǎng)
數(shù)據(jù)從上層的傳輸層傳下來的時候,此時山層協(xié)議有很多,為了區(qū)分?jǐn)?shù)據(jù)來自上層的哪個協(xié)議此時就在IP層的報頭中添加了一個8位協(xié)議,表示自己接受的數(shù)據(jù)來自上層協(xié)議的那個協(xié)議,同時在IP層也有對應(yīng)的IPV4和IPV6,為了區(qū)別兩者,也就增加了一個4位版本,同時由于數(shù)據(jù)進行了封裝,那么如和區(qū)別自己是正文還是報頭信息,此時就需要將自己的數(shù)據(jù)進行區(qū)分,于是便有了首部長度這個字段(4位),同時也有一個8位服務(wù)類型,同時16位的總長度表示數(shù)據(jù)段加上首部整體的長度,由于數(shù)據(jù)來自上層,有可能數(shù)據(jù)太大了,于是就需要將數(shù)據(jù)進行分片,來自上層的同一個數(shù)據(jù)在經(jīng)過分片后它的標(biāo)識是一樣的,但是為了防止在IP層對數(shù)據(jù)進行胡亂的分片,此時就有了3位的表示字段表示是否允許分片.同時既然進行了分片,此時接受方接受到數(shù)據(jù)后就要進行組裝,在進行組裝的時候肯定要知道那個數(shù)據(jù)在前,那個數(shù)據(jù)在后,于是就需要一個片偏移表示數(shù)據(jù)的位置,同時在IP層數(shù)據(jù)要進行路由轉(zhuǎn)發(fā),于是每一個數(shù)據(jù)都得有自己的一個生存時間,同時也得對首部信息進行校驗.既然進行路由轉(zhuǎn)發(fā),此時就需要知道源IP,目的IP,同時也有選項字段(最多40)字節(jié)
網(wǎng)段劃分
為什么要有網(wǎng)段劃分:
之所以要有網(wǎng)段劃分是因為網(wǎng)絡(luò)中有很多的主機,而在這么多的主機中要去找一個主機,那可能會耗費大量的人力物力,所以為了方便找到網(wǎng)絡(luò)中的每一個主機
IP包括網(wǎng)絡(luò)號和主機號,其中網(wǎng)絡(luò)號是為了保證兩個網(wǎng)段具有不同的標(biāo)識,端口號是為了保證在同一個網(wǎng)絡(luò)之間的主機有不同的標(biāo)識
其中同一個子網(wǎng)中的主機之間網(wǎng)絡(luò)號相同,主機號不同
ICMP
和IP相同的是ICMP也是工作在網(wǎng)絡(luò)層的,但是ICMP不能保證數(shù)據(jù)是否成功到達對方,而ICMP可以確認(rèn)數(shù)據(jù)是否成功到達對方,同時在進行返回的時候會通知IP報被對其的原因,雖然ICMP只能針對IPV4進行使用
總結(jié)
- 上一篇: 哪些女性容易输卵管积液
- 下一篇: 进程的通信