1、開(kāi)放系統(tǒng)互連參考模型
2旺罢、通信協(xié)議詳解
TCP/IP協(xié)議
TCP/IP 是一個(gè)協(xié)議族旷余,也是按照層次劃分绢记。共四層:應(yīng)用層,傳輸層正卧,互連網(wǎng)絡(luò)層蠢熄,網(wǎng)絡(luò)接口層。 OSI網(wǎng)絡(luò)協(xié)議模型七層穗酥,是一個(gè)參考模型护赊,而TCP/IP協(xié)議是事實(shí)上的標(biāo)準(zhǔn)。TCP/IP協(xié)議和OSI模型并不沖突砾跃,TCP/IP協(xié)議中的應(yīng)用層協(xié)議,就對(duì)應(yīng)于OSI中的應(yīng)用層节吮,表示層抽高,會(huì)話(huà)層。TCP/IP中有兩個(gè)重要的協(xié) 議透绩,傳輸層的TCP協(xié)議和互連網(wǎng)絡(luò)層的IP協(xié)議翘骂,因此就拿這兩個(gè)協(xié)議做代表,來(lái)命名整個(gè)協(xié)議族了帚豪,在說(shuō)TCP/IP協(xié)議時(shí)碳竟,是指整個(gè)協(xié)議族。
TCP傳輸控制協(xié)議
1狸臣、建立連接莹桅,形成傳輸數(shù)據(jù)的通道
2、在連接中進(jìn)行大數(shù)據(jù)傳輸(數(shù)據(jù)大小不做限制)
3烛亦、通過(guò)三次握手完成連接铐达,是可靠協(xié)議,安全送到
4檬果、必須連接选脊,效率會(huì)稍低
- TCP的三次握手
三次握手(Three-way Handshake)祈争,是指建立一個(gè)TCP連接時(shí)忿墅,需要客戶(hù)端和服務(wù)器總共發(fā)送3個(gè)包。三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào)并交換TCP窗口大小信息呼畸。在Socket編程中另绩,客戶(hù)端執(zhí)行connect()時(shí)蹦漠,將觸發(fā)三次握手容劳。
注:
SYN(synchronous)是同步標(biāo)志
ACK (Acknowledgement)是確認(rèn)標(biāo)志
Seq是序列號(hào)
第一次握手:客戶(hù)端發(fā)送一個(gè)TCP的SYN標(biāo)志位置1的包留量,指明客戶(hù)打算連接的服務(wù)器的端口忆绰,以及初始序號(hào)X,保存在包頭的序列號(hào)字段里。
第二次握手:服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即SYN標(biāo)志位和ACK標(biāo)志位均為1同時(shí)咽块,將確認(rèn)序號(hào)設(shè)置為客戶(hù)的序列號(hào)加1以亭罪,即X+1。
第三次握手:客戶(hù)端再次發(fā)送確認(rèn)包(ACK) SYN標(biāo)志位為0荆责,ACK標(biāo)志位為1濒持。并且把服務(wù)器發(fā)來(lái)ACK的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方.并且在數(shù)據(jù)段放寫(xiě)序列號(hào)的+1。
- TCP的四次揮手
當(dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后惋嚎,可以直接發(fā)送SYN+ACK報(bào)文。其中ACK報(bào)文是用來(lái)應(yīng)答的站刑,SYN報(bào)文是用來(lái)同步的绞旅。但是關(guān)閉連接時(shí)结榄,當(dāng)Server端收到FIN報(bào)文時(shí)绣否,很可能并不會(huì)立即關(guān)閉SOCKET段磨,所以只能先回復(fù)一個(gè)ACK報(bào)文,告訴Client端耗绿,”你發(fā)的FIN報(bào)文我收到了”债蜜。只有等到我Server端所有的報(bào)文都
- TCP客戶(hù)端-服務(wù)器程序設(shè)計(jì)基本框架
UDP 用戶(hù)數(shù)據(jù)報(bào)協(xié)議
1、將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)報(bào)究反,不需要建立連接
2寻定、每個(gè)數(shù)據(jù)報(bào)的大小限制在64K之內(nèi)
3、因?yàn)闊o(wú)需連接精耐,所以是不可靠傳輸協(xié)議
4狼速、不需要建立連接,速度快
- UDP客戶(hù)端-服務(wù)端程序設(shè)計(jì)基本框架
UDP是面向無(wú)連接的協(xié)議黍氮,只要知道接收端的IP和端口唐含,且網(wǎng)絡(luò)是可達(dá)的,任何主機(jī)都可以向接收端發(fā)送數(shù)據(jù)沫浆。這時(shí)候捷枯,如果一次能讀取超過(guò)一個(gè)報(bào)文的數(shù)據(jù),則會(huì)亂套专执。比如淮捆,主機(jī)A向發(fā)送了報(bào)文P1,主機(jī)B發(fā)送了報(bào)文P2,如果能夠讀取超過(guò)一個(gè)報(bào)文的數(shù)據(jù)攀痊,那么就會(huì)將P1和P2的數(shù)據(jù)合并在了一起桐腌,這樣的數(shù)據(jù)是沒(méi)有意義的。
端口號(hào)
TCP和UDP都是IP層面的傳輸協(xié)議苟径,是IP與上層之間的處理接口案站。TCP和UDP端口號(hào)被設(shè)計(jì)來(lái)區(qū)分運(yùn)行在單個(gè)設(shè)備上的多重應(yīng)用程序的IP地址。由于同一臺(tái)計(jì)算機(jī)上可能會(huì)運(yùn)行多個(gè)網(wǎng)絡(luò)應(yīng)用程序棘街,所以計(jì)算機(jī)需要確保目標(biāo)計(jì)算機(jī)上接收源主機(jī)數(shù)據(jù)包的軟件應(yīng)用程序的正確性蟆盐,以及響應(yīng)能夠被發(fā)送到源主機(jī)的正確應(yīng)用程序上。該過(guò)程正是通過(guò)使用TCP或UDP端口號(hào)來(lái)實(shí)現(xiàn)的遭殉。
--即每一個(gè)應(yīng)用都會(huì)在網(wǎng)卡上注冊(cè)一個(gè)端口號(hào)用來(lái)區(qū)分同一臺(tái)設(shè)備上應(yīng)用的之間的通信
在TCP和UDP頭部分石挂,有“源端口”和“目標(biāo)端口”段,主要用于顯示發(fā)送和接收過(guò)程中的身份識(shí)別信息险污。IP 地址和端口號(hào)合在一起被稱(chēng)為“套接字”痹愚。TCP端口比較復(fù)雜,其工作方式與UDP端口不同蛔糯。UDP端口對(duì)于基于UDP的通信作為單一消息隊(duì)列和網(wǎng)絡(luò)端點(diǎn)來(lái)操作拯腮,而所有TCP通信的終點(diǎn)都是唯一的連接。每個(gè)TCP連接由兩個(gè)端點(diǎn)唯一識(shí)別蚁飒。由于所有TCP連接由兩對(duì) IP 地址和TCP端口唯一識(shí)別(每個(gè)所連主機(jī)都有一個(gè)地址/端口對(duì))疾瓮,因此每個(gè)TCP服務(wù)器端口都能提供對(duì)多個(gè)連接的共享訪(fǎng)問(wèn)
再看一下IP數(shù)據(jù)包和TCP/UDP的數(shù)據(jù)包:
http 協(xié)議
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議飒箭。
http協(xié)議規(guī)定了客戶(hù)端和服務(wù)器之間的數(shù)據(jù)傳輸格式.
特點(diǎn):
1、簡(jiǎn)單快速:
http協(xié)議簡(jiǎn)單,通信速度很快;
2蜒灰、靈活:
http協(xié)議允許傳輸任意類(lèi)型的數(shù)據(jù);
3弦蹂、短連接:
http協(xié)議限制每次連接只處理一個(gè)請(qǐng)求,服務(wù)器對(duì)客戶(hù)端的請(qǐng)求作出響應(yīng)后,馬上斷開(kāi)連接.這種方式可以節(jié)省傳輸時(shí)間.
- http請(qǐng)求
http協(xié)議規(guī)定:一個(gè)完整的http請(qǐng)求包含'請(qǐng)求行','請(qǐng)求頭','請(qǐng)求體'三個(gè)部分;
1、請(qǐng)求行:包含了請(qǐng)求方法,請(qǐng)求資源路徑,http協(xié)議版本. "GET /resources/images/ HTTP/1.1"
2强窖、請(qǐng)求頭:包含了對(duì)客戶(hù)端的環(huán)境描述,客戶(hù)端請(qǐng)求的主機(jī)地址等信息.
Accept: text/html ( 客戶(hù)端所能接收的數(shù)據(jù)類(lèi)型 )
Accept-Language: zh-cn ( 客戶(hù)端的語(yǔ)言環(huán)境 )
Accept-Encoding: gzip( 客戶(hù)端支持的數(shù)據(jù)壓縮格式 )
Host: m.baidu.com( 客戶(hù)端想訪(fǎng)問(wèn)的服務(wù)器主機(jī)地址 )
User-Agent: Mozilla/5.0(Macintosh;Intel Mac OS X10.10 rv:37.0) Gecko/20100101Firefox/37.0( 客戶(hù)端的類(lèi)型,客戶(hù)端的軟件環(huán)境 )
3凸椿、請(qǐng)求體:客戶(hù)端發(fā)給服務(wù)器的具體數(shù)據(jù),比如文件/圖片等.
- http響應(yīng):服務(wù)器返回客戶(hù)端想要的數(shù)據(jù)
http協(xié)議規(guī)定:一個(gè)完整的http響應(yīng)包含'狀態(tài)行','響應(yīng)頭','實(shí)體內(nèi)容'三個(gè)部分;
1、狀態(tài)行:包含了http協(xié)議版本,狀態(tài)嗎,狀態(tài)英文名稱(chēng).
"HTTP/1.1 200 OK"
2翅溺、響應(yīng)頭:包含了對(duì)服務(wù)器的描述,對(duì)返回?cái)?shù)據(jù)的描述.
Content-Encoding: gzip(服務(wù)器支持的數(shù)據(jù)壓縮格式) Content-Length: 1528(返回?cái)?shù)據(jù)的長(zhǎng)度)
Content-Type:application/xhtml+xml;charset=utf-8(返回?cái)?shù)據(jù)的類(lèi)型)
Date: Mon,15Jun201509:06:46GMT(響應(yīng)的時(shí)間) Server: apache (服務(wù)器類(lèi)型)
3脑漫、實(shí)體內(nèi)容:服務(wù)器返回給客戶(hù)端的具體數(shù)據(jù)(圖片/html/文件...).
-
http方法
http協(xié)議定義了很多方法對(duì)應(yīng)不同的資源操作,其中最常用的是GET和POST方法。
eg:GET咙崎、POST优幸、OPTIONS、HEAD褪猛、PUT网杆、DELETE、TRACE、CONNECT碳却、PATCH
增:PUT
刪:DELETE
改:POST
查:GET
因?yàn)镚ET和POST可以實(shí)現(xiàn)上述所有操作,所以,在現(xiàn)實(shí)開(kāi)發(fā)中,GET和POST方法使用的最為廣泛队秩,除此以外HEAD請(qǐng)求使用頻率也比較高;
1昼浦、GET請(qǐng)求
在請(qǐng)求URL后面以?的形式跟上發(fā)給服務(wù)器的參數(shù),參數(shù)以"參數(shù)名"="參數(shù)值"的形式拼接,多個(gè)參數(shù)之間用&分隔;
GET的本質(zhì)是從服務(wù)器得到數(shù)據(jù),效率更高.并且GET請(qǐng)求可以被緩存.
注意:GET的長(zhǎng)度是有限制的,不同的瀏覽器有不同的長(zhǎng)度限制,一般在2~8K之間;2馍资、POST請(qǐng)求
POST的本質(zhì)是向服務(wù)器發(fā)送數(shù)據(jù),也可以獲得服務(wù)器處理之后的結(jié)果,效率不如GET.POST請(qǐng)求不可以被緩存,每次刷新之后都需要重新提交表單.
發(fā)送給服務(wù)器的參數(shù)全部放在'請(qǐng)求體'中;
理論上,POST傳遞的數(shù)據(jù)量沒(méi)有限制.
注意:所有涉及到用戶(hù)隱私的數(shù)據(jù)(密碼/銀行卡號(hào)等...)都要用POST的方式傳遞.3、HEAD請(qǐng)求
HEAD方法通常用在下載文件之前,獲取遠(yuǎn)程服務(wù)器的文件信息!相比于GET請(qǐng)求,不會(huì)下載文件數(shù)據(jù),只獲得響應(yīng)頭信息!
一般,使用HEAD方法的目的是提前告訴用戶(hù)下載文件的信息,由用戶(hù)確定是否下載文件!所以, HEAD方法,最好發(fā)送同步請(qǐng)求!
https協(xié)議
簡(jiǎn)單來(lái)說(shuō)关噪,HTTPS就是安全版的HTTP鸟蟹,并且由于當(dāng)今時(shí)代對(duì)安全性要求更高,chrome和firefox都大力支持網(wǎng)站使用HTTPS色洞,蘋(píng)果也在ios 10系統(tǒng)中強(qiáng)制app使用HTTPS來(lái)傳輸數(shù)據(jù)
- http和https的區(qū)別
1戏锹、HTTPS協(xié)議需要到CA申請(qǐng)證書(shū),一般免費(fèi)證書(shū)很少火诸,需要交費(fèi)锦针。
2、HTTP協(xié)議運(yùn)行在TCP之上置蜀,所有傳輸?shù)膬?nèi)容都是明文奈搜,HTTPS運(yùn)行在SSL/TLS之上,SSL/TLS運(yùn)行在TCP之上盯荤,所有傳輸?shù)膬?nèi)容都經(jīng)過(guò)加密的馋吗。
3、HTTP和HTTPS使用的是完全不同的連接方式秋秤,用的端口也不一樣宏粤,前者是80,后者是443灼卢。
4绍哎、HTTPS可以有效的防止運(yùn)營(yíng)商劫持,解決了防劫持的一個(gè)大問(wèn)題鞋真。