計(jì)算機(jī)網(wǎng)絡(luò)
前情:由于本人目前的學(xué)習(xí)要求,重點(diǎn)分析了網(wǎng)絡(luò)層、傳輸層、應(yīng)用層,物理層和數(shù)據(jù)鏈路層都是點(diǎn)到為止
參看:
計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下(2015版)
學(xué)堂在線-計(jì)算機(jī)網(wǎng)絡(luò)(華南理工大學(xué)-袁華)
中國(guó)大學(xué)MOOC-王道考研計(jì)算機(jī)網(wǎng)絡(luò)(2020)
TCP/IP是一個(gè)協(xié)議族的統(tǒng)稱,由http協(xié)議、ip協(xié)議、tcp協(xié)議、ftp協(xié)議等等,它的作用是使得計(jì)算機(jī)與計(jì)算機(jī)之間按照統(tǒng)一的規(guī)定進(jìn)行數(shù)據(jù)交互。TCP/IP有五層:應(yīng)用層(ApplicationLayer)、傳輸層(TransportLayer)、網(wǎng)絡(luò)層(NetworkLayer)、數(shù)據(jù)鏈路層(DatalinkLayer)、物理層(PhysicalLayer)。
分層的基本原則:
各層之間互相獨(dú)立,每層只實(shí)現(xiàn)一種相對(duì)獨(dú)立的功能;
每層之間界面自然清晰,易于理解,相互交流盡可能少;
結(jié)構(gòu)上可分隔開(kāi),每層都采用最合適的技術(shù)來(lái)實(shí)現(xiàn);
保持下層對(duì)上層的獨(dú)立性,上層單向使用下層提供的服務(wù);
整個(gè)分層結(jié)構(gòu)能夠促進(jìn)標(biāo)準(zhǔn)化工作。
1.物理層
物理層提供透明的比特流傳輸,封裝好的數(shù)據(jù)以0和1比特流的形式進(jìn)行傳遞;物理層的傳輸,不關(guān)心比特流里面的信息是什么,而是只關(guān)心比特流的正常搬運(yùn)。
物理層處理位流(bits)
2.數(shù)據(jù)鏈路層
為網(wǎng)絡(luò)層提供服務(wù),保證數(shù)據(jù)傳輸?shù)挠行А⒖煽?。?shù)據(jù)鏈路層的三個(gè)基本問(wèn)題:封裝成幀、透明傳輸、差錯(cuò)檢測(cè)。
數(shù)據(jù)鏈路層處理幀(frame),幀是鏈路層的傳輸單元。
以太網(wǎng)協(xié)議:規(guī)定一組電信號(hào)構(gòu)成一個(gè)數(shù)據(jù)包,我們把數(shù)據(jù)包稱為幀,每個(gè)幀由Head和Data兩部分組成。幀的大小一般為64-1518個(gè)字節(jié)。Head存儲(chǔ)一些說(shuō)明數(shù)據(jù)(目的地址、源地址、類型、FCS循環(huán)冗余檢測(cè)),Data則是數(shù)據(jù)包的具體內(nèi)容。注意Head的長(zhǎng)度固定為18個(gè)字節(jié)。
點(diǎn)擊加載圖片
MAC地址:即鏈路層地址,每一臺(tái)計(jì)算機(jī)的網(wǎng)卡接口有一個(gè)唯一的MAC地址,計(jì)算機(jī)之間傳輸信息就是通過(guò)MAC地址來(lái)尋找唯一的計(jì)算機(jī)進(jìn)行數(shù)據(jù)傳輸?shù)?。MAC由6個(gè)字節(jié)(48位,2^48個(gè)可能的MAC地址)組成,在網(wǎng)卡生產(chǎn)的時(shí)候就被唯一標(biāo)識(shí)了。
廣播與ARP協(xié)議:
廣播:同一個(gè)子網(wǎng)中,進(jìn)行數(shù)據(jù)群發(fā),計(jì)算機(jī)接收到數(shù)據(jù)包后取出其中的MAC對(duì)比是不是自己,是就接收,否則丟棄數(shù)據(jù)包。
ARP:AddressResolutionProtocol地址解析協(xié)議,獲取到目標(biāo)計(jì)算機(jī)的MAC地址。會(huì)涉及到IP協(xié)議,下面談到。
3.網(wǎng)絡(luò)層
在茫茫人海中找到另一個(gè)計(jì)算機(jī)在哪。
網(wǎng)絡(luò)由無(wú)數(shù)個(gè)子網(wǎng)構(gòu)成,廣播的時(shí)候,在同一個(gè)子網(wǎng)中的計(jì)算機(jī)能夠收到信息。如果發(fā)送方與接收方在同一個(gè)子網(wǎng)下,就群發(fā)信息;如果不在同一個(gè)子網(wǎng)下,交給網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)信息。
3.1IP協(xié)議
3.1.1介紹
IP協(xié)議所定義的地址,稱為IP地址。分為IPv4和IPv6,這里僅討論前者。這個(gè)IP由32位(32比特)二進(jìn)制數(shù)組成,一般分為4段十進(jìn)制數(shù)表示(0.0.0.0~255.255.255.255)(因?yàn)?比特為一個(gè)字節(jié),所以分為4個(gè)字節(jié)來(lái)表示)。每一臺(tái)計(jì)算機(jī)都會(huì)有一個(gè)IP地址,IP地址分為網(wǎng)絡(luò)部分和主機(jī)部分,并且兩部分所占的二進(jìn)制數(shù)是不固定的。
假如兩臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)部分是一樣的,就表示它們處于同一個(gè)子網(wǎng)中。如192.169.119.1/192.169.119.2(假如兩個(gè)IP的網(wǎng)絡(luò)部分是24位,主機(jī)部分是8位)。但是我們是無(wú)法直接判斷網(wǎng)絡(luò)部分占幾位的,單從兩臺(tái)計(jì)算機(jī)的IP是無(wú)法判斷它們是否處于同一個(gè)子網(wǎng)中的,為了解決這個(gè)問(wèn)題就提出另一個(gè)概念:子網(wǎng)掩碼。
子網(wǎng)掩碼也是32位二進(jìn)制數(shù),它的網(wǎng)絡(luò)部分全部為1,主機(jī)部分全部為0,用上面一個(gè)例子就可得到它們的子網(wǎng)掩碼:11111111.11111111.11111111.00000000,即255.255.255.0。它用來(lái)判斷不同的IP地址是否在同一個(gè)子網(wǎng)中,我們只需要把IP地址與它的子網(wǎng)掩碼做與(&)運(yùn)算,然后把各自的結(jié)果進(jìn)行比較,如果比較的結(jié)果相同,則代表是同一個(gè)子網(wǎng),否則不是同一個(gè)子網(wǎng)。例如192.169.119.1/192.169.119.2的子網(wǎng)掩碼都是255.255.255.0,與運(yùn)算后得到192.169.119.0,處于同一個(gè)子網(wǎng)中。
3.1.2IPv4
在IP協(xié)議中,IP協(xié)議是面向非連接的,所謂的非連接就是在數(shù)據(jù)的傳遞過(guò)程中,不需要檢測(cè)網(wǎng)絡(luò)是否連通,所以IP協(xié)議是不可靠的數(shù)據(jù)報(bào)協(xié)議。IP協(xié)議主要用于在主機(jī)之間的尋址和選擇數(shù)據(jù)包路由。下面是IP數(shù)據(jù)報(bào)的格式:
點(diǎn)擊加載圖片
版本:占4位,規(guī)定了數(shù)據(jù)報(bào)的IP協(xié)議版本,通信雙方的版本號(hào)相同才能通信,IPv4的版本號(hào)是4;
首部長(zhǎng)度:占4位,因?yàn)殚L(zhǎng)度為四比特,所以首部長(zhǎng)度的最大值為1111,15,又因?yàn)槭撞块L(zhǎng)度代表的單位長(zhǎng)度為32個(gè)字(也就是4個(gè)字節(jié)),所以首部長(zhǎng)度的最小值就是0101,當(dāng)然,也確實(shí)如此,大部分的ip頭部中首部字節(jié)都是0101.也就是5*4=20個(gè)字節(jié),如果是最大值15的話,ip首部的最大值就是60個(gè)字節(jié),所以記好了,ipv4首部長(zhǎng)度的最大值就是60,當(dāng)然當(dāng)中我們又能發(fā)現(xiàn),IPv4的首段長(zhǎng)度一定是4字節(jié)的整數(shù)倍,要是不是怎么辦呢?別急,后面的填充字段會(huì)自動(dòng)填充補(bǔ)齊到4字節(jié)的整數(shù)倍的;
區(qū)分服務(wù):占8位,這個(gè)沒(méi)有什么用處,也沒(méi)有什么好講的了,只要自動(dòng)這玩意占八位,一個(gè)字節(jié)就可以了;
總長(zhǎng)度:占16位,IP數(shù)據(jù)報(bào)中首部和數(shù)據(jù)的總和的長(zhǎng)度,因?yàn)檎?6位,所以很好理解,總長(zhǎng)度的最大值就是2的16次方減一,65535,這玩意也對(duì)應(yīng)著還有一個(gè)很簡(jiǎn)單的概念,最大傳輸單元mtu,意味著一個(gè)IP數(shù)據(jù)報(bào)的最大長(zhǎng)度就只能裝下65535個(gè)字節(jié),要是傳輸?shù)拈L(zhǎng)度超過(guò)這個(gè)怎么辦,很簡(jiǎn)單,分片。
標(biāo)識(shí):占16位,標(biāo)識(shí)這玩意很好理解,IP在存儲(chǔ)器中維持一個(gè)計(jì)數(shù)器,每產(chǎn)生一個(gè)數(shù)據(jù)報(bào),計(jì)數(shù)器就加1,并將此值賦給標(biāo)識(shí)字段。但這個(gè)標(biāo)識(shí)并不是平常的序號(hào),因?yàn)镮P是無(wú)連接服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問(wèn)題。當(dāng)數(shù)據(jù)報(bào)由于長(zhǎng)度超過(guò)網(wǎng)絡(luò)的MTU而必須分片時(shí),這個(gè)標(biāo)識(shí)字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)片的標(biāo)識(shí)字段中,等到重組的時(shí)候,相同標(biāo)識(shí)符的值的數(shù)據(jù)報(bào)就會(huì)被重新組裝成一個(gè)數(shù)據(jù)報(bào);
標(biāo)志:占3位,一般有用的是前兩位,最低位叫做MF,MF=1表示后面還有若干個(gè)數(shù)據(jù)報(bào),MF=0表示這已經(jīng)是最后一個(gè)數(shù)據(jù)報(bào)了;中間位叫做DF,DF表示不能進(jìn)行分片,DF=0才可以進(jìn)行分片操作;
片偏移:占13位,片偏移就是,在原來(lái)的數(shù)據(jù)報(bào)分片以后,該片在原分組中的相對(duì)位置,片偏移中的基本單位是8字節(jié),所以,也就是說(shuō),只要是分片,每個(gè)分片的長(zhǎng)度都是8字節(jié)的整數(shù)倍,最后一個(gè)分片不夠八字節(jié)的一樣是填充;
生存時(shí)間ttl:占8位,(timetolive),表明數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命,這個(gè)值被設(shè)定成跳數(shù),顧名思義,就是這個(gè)數(shù)據(jù)報(bào)可以經(jīng)過(guò)多少個(gè)路由器的數(shù)量,每經(jīng)過(guò)一個(gè)路由器,該值就減一,減到為零的時(shí)候就被拋棄,顯而易見(jiàn),這個(gè)跳數(shù)的最大值就是2的8次方減一,255;
協(xié)議:就是用來(lái)指明數(shù)據(jù)報(bào)攜帶了哪種協(xié)議,占8位;
首部效驗(yàn)和:占16位,這個(gè)字段用來(lái)效驗(yàn)數(shù)據(jù)報(bào)首段,下面給出簡(jiǎn)單的計(jì)算方法:
點(diǎn)擊加載圖片
首先在發(fā)送端的時(shí)候,將效驗(yàn)和全部置為0,然后把數(shù)據(jù)報(bào)首段數(shù)據(jù)全部進(jìn)行反碼相加,得到的值為效驗(yàn)和,放入首段效驗(yàn)和里面,然后接收端將數(shù)據(jù)報(bào)首段數(shù)據(jù)和效驗(yàn)和一起全部反碼相加,最后若是得到零,則保留,若是不為零,則說(shuō)明數(shù)據(jù)報(bào)在傳輸?shù)倪^(guò)程中發(fā)生了改變,則丟棄該數(shù)據(jù)報(bào);
IP源地址:占32位,將IP地址看作是32位數(shù)值則需要將網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)化位主機(jī)字節(jié)順序。轉(zhuǎn)化的方法是:將每4個(gè)字節(jié)首尾互換,將2、3字節(jié)互換;
目的地址:也占32位,轉(zhuǎn)換方法和來(lái)源IP地址一樣。
可變選項(xiàng):增加頭部的可變選項(xiàng)實(shí)際上就是增加了數(shù)據(jù)報(bào)的功能,可變選項(xiàng)在實(shí)際上是很少用到的。
3.2ARP協(xié)議
通過(guò)IP協(xié)議找到目標(biāo)計(jì)算機(jī)的MAC地址。ARP協(xié)議會(huì)發(fā)送一個(gè)數(shù)據(jù)包(包含發(fā)送方的IP和接收方的IP)。在同一個(gè)子網(wǎng)中就通過(guò)廣播的形式發(fā)送,不同子網(wǎng)就把數(shù)據(jù)包發(fā)送給網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)。其他計(jì)算機(jī)接收到這個(gè)數(shù)據(jù)包后,取出其中的IP地址與自身IP對(duì)比,一致就返回自身的MAC地址,否則丟棄這個(gè)數(shù)據(jù)包。從而實(shí)現(xiàn)獲取目標(biāo)計(jì)算機(jī)的MAC地址。(這個(gè)群發(fā)在數(shù)據(jù)包會(huì)告知計(jì)算機(jī)我現(xiàn)在是在發(fā)送數(shù)據(jù)還是在索取MAC地址)
點(diǎn)擊加載圖片
3.3DNS服務(wù)器
使用UDP協(xié)議,解析域名,返回域名的IP給到用戶,如果輸入域名www.baidu.com,DNS服務(wù)器會(huì)解析這個(gè)域名,返回這個(gè)域名對(duì)應(yīng)的IP給我們??蓞⒁?jiàn)cmd中pingbaidu.com,可獲得IP。
4.傳輸層
傳輸層功能就是建立端口到端口的通信,相比網(wǎng)絡(luò)層是建立主機(jī)到主機(jī)的通信。物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層都是點(diǎn)到點(diǎn)的傳輸。
通過(guò)物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層的幫助,成功實(shí)現(xiàn)了把數(shù)據(jù)有一個(gè)計(jì)算機(jī)傳輸?shù)搅硪粋€(gè)計(jì)算機(jī),接著由端口(Port)把數(shù)據(jù)發(fā)送到指定應(yīng)用程序。對(duì)于有些傳輸協(xié)議已經(jīng)設(shè)置了默認(rèn)的端口,例如HTTP傳輸默認(rèn)端口80,端口信息存放在數(shù)據(jù)包里。
傳輸層最常見(jiàn)的協(xié)議:TCP和UDP,TCP提供可靠傳輸(三次握手四次揮手),UDP提供的是不可靠傳輸(面向無(wú)連接的協(xié)議)。
4.1UDP協(xié)議
UserDatagramProtocol用戶數(shù)據(jù)包報(bào)協(xié)議。無(wú)擁塞控制。傳輸數(shù)據(jù)段。
4.1.1概述
TCP只在IP數(shù)據(jù)保服務(wù)上增加了很少功能,即多路復(fù)用(多個(gè)端口使用一個(gè)線程)、分用(接收到數(shù)據(jù)以后找到對(duì)應(yīng)的應(yīng)用程序線程)和差錯(cuò)檢測(cè)功能。下面是UDP主要特點(diǎn):
UDP是無(wú)需建立連接,減小開(kāi)銷和發(fā)送數(shù)據(jù)之前的延時(shí);
UPD不提供數(shù)據(jù)傳輸?shù)目煽勘WC;
UDP是面向報(bào)文的,適合一次性傳輸少量數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用;
UDP無(wú)擁塞控制,適合很多實(shí)時(shí)應(yīng)用場(chǎng)景;
UPD的傳輸層上的一個(gè)輕量級(jí)協(xié)議,分組首部開(kāi)銷?。籘CP首部20字節(jié),UDP首部8字節(jié)。
提供高效的端到端(區(qū)別于IP數(shù)據(jù)分組傳輸)的數(shù)據(jù)段傳輸;
點(diǎn)擊加載圖片
注意:
應(yīng)用層給UDP多長(zhǎng)的報(bào)文,UDP會(huì)直接發(fā)生一個(gè)完整的報(bào)文給網(wǎng)絡(luò)層:
如果報(bào)文長(zhǎng)度過(guò)大,網(wǎng)絡(luò)層就很對(duì)其進(jìn)行分片,接下來(lái)傳遞給鏈路層也有限制,降低了網(wǎng)絡(luò)層的效率;
如果報(bào)文長(zhǎng)度過(guò)小,網(wǎng)絡(luò)層的IP數(shù)據(jù)協(xié)議報(bào)中的數(shù)據(jù)部分就很小,相當(dāng)于IP首部小很多,也減低了網(wǎng)絡(luò)層效率。
UDP適用于實(shí)時(shí)應(yīng)用場(chǎng)景的原因是:實(shí)時(shí)應(yīng)用場(chǎng)景要求延遲低,丟一點(diǎn)數(shù)據(jù)不影響。
4.1.2UDP報(bào)文結(jié)構(gòu)
點(diǎn)擊加載圖片
UDP首部只有4個(gè)字段(8字節(jié)),每個(gè)字段由兩個(gè)字節(jié)組成:
源端口號(hào):可有可無(wú),如果發(fā)送的數(shù)據(jù)需要接收回復(fù)就得添上;不需要回復(fù)可以置為全0;
目的端口號(hào):一定要有(端口號(hào)有2字節(jié),16位二進(jìn)制數(shù)表示,0~2^16);
UDP長(zhǎng)度:指整個(gè)UDP數(shù)據(jù)報(bào)長(zhǎng)度=首部字段+數(shù)據(jù)字段;
UDP檢驗(yàn):檢驗(yàn)整個(gè)UDP數(shù)據(jù)報(bào)是否有誤,出錯(cuò)直接丟棄數(shù)據(jù);
有一種情況:分用時(shí),即網(wǎng)絡(luò)層把數(shù)據(jù)給傳輸層后,傳輸層在找端口號(hào)所對(duì)應(yīng)的應(yīng)用進(jìn)程時(shí),如果找不到對(duì)應(yīng)的應(yīng)用進(jìn)程,也會(huì)丟棄數(shù)據(jù),返回給發(fā)送方ICMP“發(fā)送不可達(dá)”報(bào)文。
4.1.3UDP檢驗(yàn)和
學(xué)習(xí)IP協(xié)議配合理解才行。
UDP檢驗(yàn)和提供了差錯(cuò)檢驗(yàn)功能,用于確定當(dāng)UDP報(bào)文段從源到達(dá)目的地移動(dòng)時(shí),其中的比特是否發(fā)送了改變。
偽頭部是就是IP,只在檢驗(yàn)時(shí)出現(xiàn):
點(diǎn)擊加載圖片
其中封裝UDP報(bào)文的IP數(shù)據(jù)報(bào)首部協(xié)議字段的17,封裝TCP報(bào)文的IP數(shù)據(jù)報(bào)首部協(xié)議字段的6,下面是UDP檢驗(yàn)發(fā)發(fā):
點(diǎn)擊加載圖片
UDP檢驗(yàn)使用了IP地址,破壞了分層原則。UDP提供端點(diǎn)標(biāo)識(shí),端到端的數(shù)據(jù)傳輸;不提供差錯(cuò)控制和可靠傳輸,但簡(jiǎn)介高效。
4.2TCP協(xié)議
TransmissionControlProtocol傳輸控制協(xié)議。面向字節(jié)流。兩個(gè)應(yīng)用進(jìn)程在互相發(fā)送數(shù)據(jù)之前,必須先互相握手;接收發(fā)送數(shù)據(jù)之前,也必須先揮手。即它們必須預(yù)先發(fā)送某些預(yù)備報(bào)文段,以建立確保數(shù)據(jù)傳輸?shù)膮?shù)。
4.2.1概述
TCP是面向連接的傳輸層協(xié)議;
每一條TCP只能有兩個(gè)端點(diǎn),每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的;
TCP提供可靠交付的服務(wù),可靠有序,不丟不重;
TCP全雙工通信;(雙方存在發(fā)送緩存和接收緩存)
TCP面向字節(jié)流,TCP把應(yīng)用程序給到的數(shù)據(jù)看成是一連串的無(wú)結(jié)構(gòu)的字節(jié)流。
4.2.2TCP報(bào)文段結(jié)構(gòu)
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
六個(gè)控制位(控制比特)URG(urgency),ACK(ack),PSH(push),RST(reset),SYN(synchronization),FIN(final):
點(diǎn)擊加載圖片
SYN=1ACK=0表示連接請(qǐng)求,SYN=1ACK=1表示連接接收。FIN=1還可以繼續(xù)接收數(shù)據(jù)。
4.2.3TCP的連接管理
TCP連接傳輸分為三個(gè)階段:連接建立、數(shù)據(jù)傳輸、連接釋放。
TCP連接的建立采用客戶服務(wù)器方式客戶服務(wù)器方式,主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶,被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫服務(wù)器。
ACK是確認(rèn)位,占一位(1bit);ack是確認(rèn)號(hào),占32位(32bit)
TCP的三次握手
假設(shè)A是客戶端,B是服務(wù)器端:
第一次握手:A首先向B發(fā)出連接請(qǐng)求報(bào)文段,這個(gè)時(shí)候首部中的同步位SYN=1,同時(shí)選擇一個(gè)初始的序號(hào)x(隨機(jī))。此時(shí)報(bào)文段不能攜帶數(shù)據(jù)。此時(shí)A進(jìn)入到SYN_SENT(同步已發(fā)送)狀態(tài);
第二次握手:B受到連接請(qǐng)求報(bào)文,(服務(wù)器端)為該TCP連接分配緩存和變量,同意建立連接,向A發(fā)出確認(rèn)報(bào)文。確認(rèn)報(bào)文中,SYN=1,ACK=1,ack=x+1,seq=y,不能攜帶數(shù)據(jù)。此時(shí)B進(jìn)入SYN_RCVD(同步收到)狀態(tài);
第三次握手:A收到B的確認(rèn)后,(客戶端)為該TCP連接分配緩存和變量,并給B發(fā)出確認(rèn)。這時(shí)可以攜帶數(shù)據(jù)。SYN=1,ACK=y+1,seq=x+1,A進(jìn)入到ESTABLISHED狀態(tài)。
點(diǎn)擊加載圖片
雙方交換了初始序列號(hào),用于跟蹤后續(xù)交換的每一個(gè)字節(jié),后續(xù)字節(jié)的編號(hào)就是以此初始序列號(hào)作為基礎(chǔ)的,建立TCP連接的兩方?jīng)]有主從之分,可以互相收發(fā)數(shù)據(jù),TCP數(shù)據(jù)段的傳輸是全雙工的。上述第二次握手和第三次握手,服務(wù)器和客戶端都分配了對(duì)應(yīng)的緩存和變量,就可能會(huì)產(chǎn)生SYN洪泛攻擊(偽造源IP)。
TCP的四次揮手
參與一條TCP連接的兩個(gè)進(jìn)程中的任何一個(gè)都能終止連接,連接結(jié)束,對(duì)應(yīng)的資源釋放。
現(xiàn)在A和B都處于ESTABLISHED狀態(tài),A的應(yīng)用進(jìn)程發(fā)出連接釋放報(bào)文段,停止發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉TCP連接。A進(jìn)入FIN_WAIT1(終止等待1)狀態(tài)。FIN=1,seq=u
然后B確認(rèn),B進(jìn)入CLOSE_WAIT(關(guān)閉等待)狀態(tài)。此時(shí)TCP處于半關(guān)閉狀態(tài),A已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,B仍要發(fā)送數(shù)據(jù),B仍然接收。ACK=1,seq=v,ack=u+1。(A不需要回復(fù),A此時(shí)以及沒(méi)有數(shù)據(jù)發(fā)送,只是在等待B發(fā)送數(shù)據(jù))
A收到B的確認(rèn)后,就進(jìn)入FIN_WAIT2(終止等待2)狀態(tài),等待B發(fā)出連接釋放報(bào)文。如果B已經(jīng)沒(méi)有向A發(fā)送的數(shù)據(jù),則B發(fā)送請(qǐng)求釋放報(bào)文,B進(jìn)入LAST_ACK(最后確認(rèn))階段,等待A的確認(rèn)。FIN=1,ACK=1,seq=w,ack=u+1
A在收到B的請(qǐng)求后,要發(fā)出確認(rèn),然后進(jìn)入TIME_WAIT(時(shí)間等待)狀態(tài)。此時(shí),連接還未釋放,必須等待時(shí)間等待計(jì)時(shí)器設(shè)定的時(shí)間的2MSL(最長(zhǎng)報(bào)文段壽命)后,A才進(jìn)入CLOSED狀態(tài)。ACK=1,seq=u+1,ack=w+1
點(diǎn)擊加載圖片
4.2.4TCP可靠傳輸
我們都知道網(wǎng)絡(luò)層的IP協(xié)議是不提供可靠的傳輸,需要實(shí)現(xiàn)數(shù)據(jù)的可靠傳輸?shù)臅r(shí)候,就得在傳輸層進(jìn)行操作。而傳輸層的UDP、TCP協(xié)議中,TCP協(xié)議是可靠的,在傳輸層就可以依靠TCP協(xié)議來(lái)實(shí)現(xiàn)可靠傳輸;如果在傳輸層使用UDP的話,就需要在最上一層應(yīng)用層實(shí)現(xiàn)可靠傳輸操作。
TCP的實(shí)現(xiàn)可靠傳輸?shù)臋C(jī)制有四種:檢驗(yàn)、序號(hào)、確認(rèn)、重傳。
1.檢驗(yàn)
與UDP檢驗(yàn)一樣,在發(fā)送方和接收方增加一個(gè)偽頭部,通過(guò)二進(jìn)制和去反碼,判斷是否出錯(cuò)。
2.序號(hào)
TCP協(xié)議面向字節(jié)流,因此TCP以字節(jié)為單位進(jìn)行傳輸,會(huì)給每個(gè)字節(jié)編上序號(hào);實(shí)際發(fā)送的時(shí)候以報(bào)文段為單位,將一些字節(jié)合在一起組成報(bào)文段。
每一個(gè)字節(jié)都有自己的序號(hào),其中序號(hào)字段指的是對(duì)應(yīng)報(bào)文段第一個(gè)字節(jié)的序號(hào)。
3.確認(rèn)
序號(hào)機(jī)制保證數(shù)能夠有序的傳輸,基于序號(hào)機(jī)制,就衍生處理確認(rèn)和重傳機(jī)制
發(fā)送方給接收方發(fā)送123字節(jié)組成的第一個(gè)報(bào)文段,接收方收到后存儲(chǔ)在TCP緩存中,然后選擇合適的時(shí)間將緩存中的報(bào)文段提交給應(yīng)用層;此時(shí)發(fā)送方TCP緩存中仍會(huì)存在123報(bào)文段,為了保證報(bào)文段丟失能夠重傳
點(diǎn)擊加載圖片
接收方收到報(bào)文段后會(huì)返回一個(gè)確認(rèn)報(bào)文段,可采用累積確認(rèn)/稍帶確認(rèn)(接收方要發(fā)送數(shù)據(jù)給發(fā)送方攜帶確認(rèn)信息)的方式;假如發(fā)送方發(fā)送一個(gè)只有確認(rèn)功能的報(bào)文段,則報(bào)文段首部的確認(rèn)號(hào)為4,表示已經(jīng)收到123字節(jié)報(bào)文段,希望收到4字節(jié)開(kāi)始的報(bào)文端;發(fā)送方收到確認(rèn)報(bào)文段后,就會(huì)將123字節(jié)報(bào)文段從TCP緩存中移除;
此時(shí)假設(shè)發(fā)送方繼續(xù)發(fā)送456報(bào)文段以及78報(bào)文段,如果456報(bào)文段中途丟失;這是接收方就會(huì)采用累計(jì)確認(rèn)的方法:返回的確認(rèn)報(bào)文段首部確認(rèn)號(hào)仍為4,但78報(bào)文段還會(huì)正常接收
點(diǎn)擊加載圖片
4.重傳
確認(rèn)機(jī)制和重傳機(jī)制密切相關(guān):如果報(bào)文段按序完整到達(dá),接收方就會(huì)返回確認(rèn)告訴發(fā)送方接下來(lái)要發(fā)送哪一個(gè)報(bào)文段;如果沒(méi)有按序到達(dá),接收方就會(huì)返回確認(rèn)報(bào)文指示發(fā)送方應(yīng)該重傳哪一個(gè)報(bào)文段
TCP采用自適應(yīng)算法,動(dòng)態(tài)改變重傳時(shí)間RTTs
發(fā)送一個(gè)報(bào)文段時(shí),RTTs=第一個(gè)報(bào)文段的RTT,也就是第一個(gè)報(bào)文段從發(fā)送到收到確認(rèn)的時(shí)間
發(fā)送第二個(gè)報(bào)文段時(shí),RTTs根據(jù)第一個(gè)報(bào)文段的RTT和第二個(gè)報(bào)文段的RTT算出,作為現(xiàn)在的重傳時(shí)間
發(fā)送第三個(gè)報(bào)文段時(shí),RTTs根據(jù)第一、二、三報(bào)文段的RTT算出,作為新的的重傳時(shí)間
由此可見(jiàn),RTTs取決于發(fā)送的每個(gè)報(bào)文端的RTT,這樣的自適應(yīng)算法能夠很好的照顧到每個(gè)報(bào)文段,使超時(shí)重傳時(shí)間不過(guò)長(zhǎng)也不過(guò)短。
超時(shí)重傳要一直在超時(shí)重傳時(shí)間內(nèi)等,直到超過(guò)時(shí)間還未確認(rèn)才會(huì)重傳,這個(gè)等待的時(shí)間可能會(huì)很久,那么如何能夠在超時(shí)事件發(fā)生前知道發(fā)送方有沒(méi)有丟掉報(bào)文段?盡快重傳呢?于是有了冗余ACK的方式
4.2.5TCP流量控制
TCP使用滑動(dòng)窗口機(jī)制實(shí)現(xiàn)流量控制
接收窗口rwnd
擁塞窗口cwnd
發(fā)送窗口取決于rwnd和cwnd的最小值。
4.2.6TCP擁塞控制
兩種因素引發(fā)擁塞:
接收方處理不過(guò)來(lái),用窗口尺寸來(lái)量度(容易獲得);
通信子網(wǎng)中出現(xiàn)擁塞,用擁塞窗口來(lái)量度(很難獲?。?。
擁塞控制就是防止過(guò)多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,這樣使得網(wǎng)絡(luò)中的路由器或者鏈路不至于過(guò)載。TCP擁塞控制方法主要包括:慢啟動(dòng),擁塞避免,快重傳和快恢復(fù)。
1.慢開(kāi)始和擁塞避免
慢開(kāi)始是指發(fā)送方先設(shè)置cwnd=1,一次發(fā)送一個(gè)報(bào)文段,隨后每經(jīng)過(guò)一個(gè)傳輸輪次,擁塞串口cwnd就加倍,其實(shí)增長(zhǎng)并不慢,以指數(shù)形式增長(zhǎng)。還要設(shè)定一個(gè)慢開(kāi)始門限,當(dāng)cwnd>門限值,改用擁塞避免算法。擁塞避免算法使cwnd按線性規(guī)律緩慢增長(zhǎng)。當(dāng)網(wǎng)絡(luò)發(fā)生延時(shí),門限值減半,擁塞窗口執(zhí)行慢開(kāi)始算法。
點(diǎn)擊加載圖片
2.快重傳和快恢復(fù)
之后又提出了快重傳和快恢復(fù)。當(dāng)接收方收到失序的報(bào)文段,按照快重傳,需要盡快發(fā)送對(duì)未收到的報(bào)文段的重復(fù)確認(rèn)??旎謴?fù)是指當(dāng)擁塞串口達(dá)到門限值,不直接開(kāi)啟慢啟動(dòng)算法,而是快恢復(fù),快恢復(fù)就是收到三個(gè)重復(fù)的確認(rèn)(可看作是網(wǎng)絡(luò)已經(jīng)擁塞了),此時(shí)并不執(zhí)行慢開(kāi)始算法,而是執(zhí)行快恢復(fù),就是新的門限值是原來(lái)的一半,直接進(jìn)入擁塞避免階段。
點(diǎn)擊加載圖片
4.3TCP和UDP區(qū)別
TCP是傳輸控制協(xié)議,提供的是面向連接的,可靠地字節(jié)流服務(wù)。實(shí)際數(shù)據(jù)傳輸之前服務(wù)器和客戶端要進(jìn)行三次握手,會(huì)話結(jié)束后結(jié)束連接,結(jié)束進(jìn)行四次揮手。
UDP是用戶數(shù)據(jù)報(bào)協(xié)議,是無(wú)連接的。因?yàn)闊o(wú)連接,而且沒(méi)有超時(shí)重發(fā)機(jī)制,所以UDP傳輸速度很快。主要用于視頻傳輸(但其實(shí)現(xiàn)在各大視頻商都是用HTTP協(xié)議,而HTTP是基于TCP),實(shí)時(shí)視頻。
TCP保證數(shù)據(jù)按序到達(dá),提供流量控制和擁塞控制,在網(wǎng)絡(luò)擁堵的時(shí)候會(huì)減慢發(fā)送字節(jié)數(shù),而UDP不管網(wǎng)絡(luò)是否擁堵。
TCP是連接的,所以服務(wù)是一對(duì)一服務(wù),而UDP可以1對(duì)1,也可以1對(duì)多(多播),也可以多對(duì)多。
性能 | TCP | UDP |
---|---|---|
可靠性 | √ | × |
傳輸延遲 | 不確定 | 網(wǎng)絡(luò)延遲(適用于實(shí)時(shí)場(chǎng)景) |
擁塞延遲 | √ | × |
一對(duì)一 | 一對(duì)一/一對(duì)多 | |
重量級(jí)協(xié)議 | 輕量級(jí)協(xié)議 | |
全雙工通信,可互發(fā)數(shù)據(jù) | 單工通信 |
4.4UDP、TCP數(shù)據(jù)段中數(shù)據(jù)區(qū)的最大傳輸長(zhǎng)度
4.4.1UDP
UDP允許傳輸?shù)淖畲箝L(zhǎng)度理論上2^16-udphead-iphead(65507字節(jié)=65535-20-8)但是實(shí)際上UDP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)最大長(zhǎng)度為1472字節(jié)。分析如下:
首先,我們知道,TCP/IP通常被認(rèn)為是一個(gè)五層協(xié)議系統(tǒng),包括物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。
UDP屬于運(yùn)輸層,下面我們由下至上一步一步來(lái)看:以太網(wǎng)(Ethernet)數(shù)據(jù)幀的長(zhǎng)度必須在46-1500字節(jié)之間,這是由以太網(wǎng)的物理特性決定的。這個(gè)1500字節(jié)被稱為鏈路層的MTU(最大傳輸單元)。但這并不是指鏈路層的長(zhǎng)度被限制在1500字節(jié),其實(shí)這這個(gè)MTU指的是鏈路層的數(shù)據(jù)區(qū)。并不包括鏈路層的首部和尾部的18個(gè)字節(jié)。所以,事實(shí)上,這個(gè)1500字節(jié)就是網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)的長(zhǎng)度限制。因?yàn)镮P數(shù)據(jù)報(bào)的首部為20字節(jié),所以IP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)長(zhǎng)度最大為1480字節(jié)。而這個(gè)1480字節(jié)就是用來(lái)放TCP傳來(lái)的TCP報(bào)文段或UDP傳來(lái)的UDP數(shù)據(jù)報(bào)的。又因?yàn)閁DP數(shù)據(jù)報(bào)的首部8字節(jié),所以UDP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)最大長(zhǎng)度為1472字節(jié)。這個(gè)1472字節(jié)就是我們可以使用的字節(jié)數(shù)。
超過(guò)1500字節(jié)怎么辦?
這也就是說(shuō)IP數(shù)據(jù)報(bào)大于1500字節(jié),大于MTU.這個(gè)時(shí)候發(fā)送方IP層就需要分片(fragmentation)。把數(shù)據(jù)報(bào)分成若干片,使每一片都小于MTU.而接收方IP層則需要進(jìn)行數(shù)據(jù)報(bào)的重組。這樣就會(huì)多做許多事情,而更嚴(yán)重的是,由于UDP的特性,當(dāng)某一片數(shù)據(jù)傳送中丟失時(shí),接收方便無(wú)法重組數(shù)據(jù)報(bào).將導(dǎo)致丟棄整個(gè)UDP數(shù)據(jù)報(bào)。因此,在普通的局域網(wǎng)環(huán)境下,我建議將UDP的數(shù)據(jù)控制在1472字節(jié)以下為好。
進(jìn)行Internet編程時(shí)則不同,因?yàn)镮nternet上的路由器可能會(huì)將MTU設(shè)為不同的值。如果我們假定MTU為1500來(lái)發(fā)送數(shù)據(jù)的,而途經(jīng)的某個(gè)網(wǎng)絡(luò)的MTU值小于1500字節(jié),那么系統(tǒng)將會(huì)使用一系列的機(jī)制來(lái)調(diào)整MTU值,使數(shù)據(jù)報(bào)能夠順利到達(dá)目的地,這樣就會(huì)做許多不必要的操作。鑒于Internet上的標(biāo)準(zhǔn)MTU值為576字節(jié),所以我建議在進(jìn)行Internet的UDP編程時(shí).最好將UDP的數(shù)據(jù)長(zhǎng)度控件在548字節(jié)(576-8-20)以內(nèi).
4.4.2TCP
TCP包的大小就應(yīng)該是1500-IP頭(20)-TCP頭(20)=1460(Bytes).
我們?cè)谟肧ocket編程時(shí),UDP協(xié)議要求包小于64K。TCP沒(méi)有限定,TCP包頭中就沒(méi)有“包長(zhǎng)度”字段,而完全依靠IP層去處理分幀。這就是為什么TCP常常被稱作一種“流協(xié)議”的原因,開(kāi)發(fā)者在使用TCP服務(wù)的時(shí)候,不必去關(guān)心數(shù)據(jù)包的大小,只需講SOCKET看作一條數(shù)據(jù)流的入口,往里面放數(shù)據(jù)就是了,TCP協(xié)議本身會(huì)進(jìn)行擁塞/流量控制。
5.應(yīng)用層
5.1概述
應(yīng)用是沒(méi)有上層用戶,它直接服務(wù)于用戶,從TCPIP協(xié)議棧出發(fā),從IP向上或向下都具有無(wú)限擴(kuò)展的可能。
TCP/IP協(xié)議棧
點(diǎn)擊加載圖片
應(yīng)用層為模型外的用戶服務(wù),提供豐富的應(yīng)用;應(yīng)用層分為兩大類:
直接的網(wǎng)絡(luò)應(yīng)用。電子郵件、Web應(yīng)用、文件傳輸?shù)取?/p>
間接的網(wǎng)絡(luò)應(yīng)用。間接網(wǎng)絡(luò)應(yīng)用依靠重定向器(redirector)實(shí)現(xiàn)網(wǎng)絡(luò)功能。Word等。
應(yīng)用層用于指定數(shù)據(jù)格式規(guī)則,收到數(shù)據(jù)后進(jìn)行渲染,為用戶服務(wù)。常見(jiàn)協(xié)議:FTP協(xié)議、HTTP協(xié)議、DNS等
5.2域名系統(tǒng)DNS
DomainNameSystem,域名系統(tǒng)。基于域的命名方案,且采用了分布式數(shù)據(jù)庫(kù)系統(tǒng)來(lái)實(shí)現(xiàn)。
5.2.1域名
每一次的通信總是以為發(fā)放的封裝開(kāi)始,收方的解封裝結(jié)束,封裝的主要工作就是在每層加上尋址所需要的地址,比如在網(wǎng)絡(luò)層加上IP地址,在數(shù)據(jù)鏈路層加上MAC地址。DNS系統(tǒng)用于把域名解析為IP地址(也稱映射),訪問(wèn)對(duì)應(yīng)的計(jì)算機(jī)資源。域名又分為根域名、頂級(jí)域名、二級(jí)域名、三級(jí)域名、四級(jí)域名
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
5.2.2域名服務(wù)器DNS
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dNHCBL9p-1622643564191)(images/計(jì)算機(jī)網(wǎng)絡(luò)/域名服務(wù)器.png)]
5.2.3域名解析過(guò)程
域名解析過(guò)程分為迭代和遞歸:
遞歸:
用戶主機(jī)向本地域名服務(wù)器發(fā)送一次查詢請(qǐng)求,本地域名服務(wù)器如果查不到,本地域名服務(wù)器就請(qǐng)求根域名服務(wù)器,如果仍查不到,根域名域名服務(wù)器就請(qǐng)求頂級(jí)域名服務(wù)器,還是查不到的話,頂級(jí)域名服務(wù)器就請(qǐng)求權(quán)限域名服務(wù)器;返回的過(guò)程相反。
迭代:
用戶主機(jī)向本地域名服務(wù)器發(fā)送一次查詢請(qǐng)求,首先查詢本地域名服務(wù)器,如果查不到,本地域名服務(wù)器就請(qǐng)求根域名服務(wù)器,如果仍查不到(根域名服務(wù)器會(huì)返回它應(yīng)該去哪找個(gè)頂級(jí)域名服務(wù)器),本地域名服務(wù)器就請(qǐng)求頂級(jí)域名服務(wù)器,還是查不到的話,本地域名服務(wù)器就請(qǐng)求權(quán)限域名服務(wù)器(頂級(jí)域名服務(wù)器告訴);返回的過(guò)程相反。
一般使用的是遞歸加迭代的方式,即主機(jī)向本地域名服務(wù)器發(fā)起的請(qǐng)求的采用遞歸查詢,本地域名服務(wù)器向根域名服務(wù)器發(fā)起的請(qǐng)求采用迭代查詢:
點(diǎn)擊加載圖片
如果每一次都經(jīng)歷一次查詢,就會(huì)造成大量的資源消耗,所以域名服務(wù)器采用了高速緩存技術(shù)(所有域名服務(wù)器都有的技術(shù)),下一次有對(duì)應(yīng)的請(qǐng)求直接返回對(duì)應(yīng)的數(shù)據(jù)即可。當(dāng)然主機(jī)當(dāng)中也存在高速緩存。高速緩存技術(shù)的缺點(diǎn):有可能是錯(cuò)誤的延時(shí)的。
5.2.4DNS消息承載
DNS消息一般采用UDP數(shù)據(jù)段來(lái)承載,但也有兩種情況例外:
UDP報(bào)文超過(guò)512byte時(shí),會(huì)采用TCP連接分段發(fā)送數(shù)據(jù)應(yīng)答;
主從域名服務(wù)器之間的數(shù)據(jù)同步更新使用TCP。(數(shù)據(jù)安全,masterandslaver)
5.3電子郵件系統(tǒng)
5.3.1組成結(jié)構(gòu)
用戶代理(UA):本地程序,為用戶通過(guò)圖形界面。
郵件傳輸代理(MTA):又稱為郵件傳輸服務(wù)器,把消息從源端送到目的端,系統(tǒng)守護(hù)進(jìn)程。
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
5.3.2體系結(jié)構(gòu)
每個(gè)頭字段由一行ascii碼組成,包括字段名,冒號(hào),數(shù)據(jù)。
點(diǎn)擊加載圖片
針對(duì)ASCII碼中無(wú)法表示的數(shù)據(jù),如視頻、音頻等數(shù)據(jù),采用MMIE(theMultipurposeInternetMailExtendsions),多用途互聯(lián)網(wǎng)郵件擴(kuò)展解決。
5.3.3SMTP
SimpleMailTransferProtocol,簡(jiǎn)單郵件傳輸協(xié)議。源機(jī)和目的機(jī)的25端口建立TCP連接,郵件不能投遞就返回發(fā)送方錯(cuò)誤報(bào)告。
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
5.3.4POP3和IMAP
如果收方和發(fā)方連個(gè)MTA一直在線,那么傳輸是非常的安全,但用戶不能一直在線,現(xiàn)在有一個(gè)代理MTA一直在后臺(tái)接收郵件,那么用戶什么時(shí)候從代理MTA中獲取自己的郵件?這就使用早期的POP3協(xié)議了:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-HkADO4Ay-1622643564201)(images/計(jì)算機(jī)網(wǎng)絡(luò)/POP3協(xié)議.png)]當(dāng)用戶啟動(dòng)郵件閱讀器的時(shí)候,POP3(110端口)就開(kāi)始工作,用戶呼叫ISP,之后經(jīng)歷授權(quán)(登陸)、事物(收郵件+刪除標(biāo)記)、更新(真正刪除)。用戶使用POP3協(xié)議時(shí),在某地收郵件后該郵件就會(huì)被標(biāo)記為刪除,那么此郵件在其他設(shè)備接收是不可行的。
之后又推出了POP3的優(yōu)化版IMAP協(xié)議,彌補(bǔ)了POP3的這一個(gè)缺陷,IMAP(143端口)把郵件永久保存在服務(wù)器上:
點(diǎn)擊加載圖片
5.3.5WebMail
點(diǎn)擊加載圖片
5.4萬(wàn)維網(wǎng)WWW
Web由資源、統(tǒng)一資源定位器、通信協(xié)議HTTP構(gòu)成(協(xié)議不僅僅是HTTP)。其中統(tǒng)一資源定位符包括:協(xié)議、服務(wù)器域名或IP地址、資源文件三部分。
點(diǎn)擊加載圖片
WWW的傳輸層使用TCP,瀏覽器解釋資源的不同方式:插件或助手程序。TCP移交緩解了前端服務(wù)器的壓力。
5.4.1FTP協(xié)議
FTP,F(xiàn)ileTransferProtocol,文件傳輸協(xié)議。是一種可靠的面向連接的服務(wù)。采用TCP在支持FTP的系統(tǒng)間傳輸文件,如傳輸二進(jìn)制文件或ascii碼文件。提到FTP就不得不提到TFTP協(xié)議。
TFTP,TrivialFileTransferProtocol,面向無(wú)連接的,不可靠的服務(wù),采用UDP在支持TFTP的系統(tǒng)間傳輸文件,如路由器備份配置文件。
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
FTP采用兩根TCP連接:
一條控制TCP的連接,工作在21端口;
一條是數(shù)據(jù)連接,工作在20端口,傳輸數(shù)據(jù),
使用雙tcp好處:簡(jiǎn)單,提供終止傳輸,端點(diǎn)續(xù)傳等:
點(diǎn)擊加載圖片
點(diǎn)擊加載圖片
5.4.3HTTP協(xié)議
HyperTextTransferProtocol,超文本傳輸協(xié)議。HTTP是一個(gè)基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù),客戶端、web服務(wù)器都遵循HTTP協(xié)議。
1.HTTP協(xié)議簡(jiǎn)介
點(diǎn)擊加載圖片
2.HTTP協(xié)議特點(diǎn)
點(diǎn)擊加載圖片
3.HTTP報(bào)文結(jié)構(gòu)
HTTP有兩類報(bào)文:請(qǐng)求報(bào)文和響應(yīng)報(bào)文:
點(diǎn)擊加載圖片
HTTP的請(qǐng)求報(bào)文和響應(yīng)報(bào)文由三個(gè)部分組成:
請(qǐng)求行/狀態(tài)行:用于區(qū)分是請(qǐng)求報(bào)文還是響應(yīng)報(bào)文。在請(qǐng)求報(bào)文中的開(kāi)始行叫做請(qǐng)求行,在響應(yīng)報(bào)文中的開(kāi)始行叫做狀態(tài)行;
首部行:用于說(shuō)明瀏覽器,服務(wù)器或報(bào)文主體的一些信息。
實(shí)體主體
點(diǎn)擊加載圖片
HTTP請(qǐng)求的幾種類型:
GET請(qǐng)求讀取由URL所標(biāo)志的信息
HEAD請(qǐng)求讀取由URL所標(biāo)志的信息的首部
POST給服務(wù)器添加信息
PUT在指明的URL下存儲(chǔ)一個(gè)文檔
CONNECT用于代理服務(wù)器
4.HTTP連接方式
瀏覽器與Web服務(wù)器之間的協(xié)議是應(yīng)用層協(xié)議,當(dāng)前,我們主要遵循的協(xié)議為HTTP/1.1。HTTP協(xié)議是Web開(kāi)發(fā)的基礎(chǔ),這是一個(gè)無(wú)狀態(tài)的協(xié)議,客戶機(jī)與服務(wù)器之間通過(guò)請(qǐng)求和相應(yīng)完成一次會(huì)話(Session)。
點(diǎn)擊加載圖片
5.HTTP1.1和HTTP1.0的區(qū)別
HTTP1.0每請(qǐng)求一個(gè)文檔就要建立TCP連接,有幾次握手的時(shí)間花銷,如果一個(gè)主頁(yè)上有很多鏈接的對(duì)象需要依次進(jìn)行連接,每次連接下載都要消耗這些開(kāi)銷。
HTTP1.1采用持續(xù)連接。所謂持續(xù)連接就是服務(wù)器在發(fā)送響應(yīng)后仍然在一段時(shí)間內(nèi)保持這條連接。使得后序的請(qǐng)求和響應(yīng)報(bào)文都在這條連接上進(jìn)行。
聯(lián)系客服