一.OSI七層網(wǎng)絡(luò)模型—Open System Interconnection
OSI | 功能 | TCP/IP協(xié)議 |
---|---|---|
應(yīng)用層(Application Layer) | 面向計(jì)算機(jī)用戶天试,提供應(yīng)用程序和網(wǎng)絡(luò)之間的接口质礼,向用戶提供服務(wù),完成用戶希望在網(wǎng)上完成的各種工作 | HTTP宣蠕,HTTPS,F(xiàn)TP,TELNET,SSH退唠,SMTP,POP3等 |
表示層(Presentation Layer) | 處理來(lái)自應(yīng)用層的的命令和數(shù)據(jù)荤胁,對(duì)各種語(yǔ)法解釋?zhuān)凑找?guī)格傳給會(huì)話層瞧预。處理編碼,數(shù)據(jù)可是轉(zhuǎn)換和加密解密 | 沒(méi)有協(xié)議 |
會(huì)話層(Session Layer) | 用戶應(yīng)用程序和網(wǎng)絡(luò)之間的接口仅政,向兩個(gè)實(shí)體表示層提供連接和連接方法垢油,不同實(shí)體之間的表示層連接叫做會(huì)話,因此主要功能是維護(hù)和協(xié)調(diào)會(huì)話之間的數(shù)據(jù)通信 | 沒(méi)有協(xié)議 |
傳輸層(Transport Layer) | 為會(huì)話層和網(wǎng)絡(luò)層提供傳輸服務(wù)圆丹,從會(huì)話層獲得數(shù)據(jù)滩愁,在必要時(shí)進(jìn)行分割,然后傳送給網(wǎng)絡(luò)層辫封,主要起到建立硝枉,維護(hù)和取消傳輸連接功能,負(fù)責(zé)兩節(jié)點(diǎn)的可靠傳輸 | TCP倦微、UDP |
網(wǎng)絡(luò)層(Network Layer) | 通過(guò)路由算法(兩節(jié)點(diǎn)之間可能有多條路徑)妻味,為報(bào)文選擇最適當(dāng)?shù)穆窂剑诰W(wǎng)絡(luò)層數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)包欣福,通過(guò)路徑選擇等控制责球,將信息從一個(gè)網(wǎng)絡(luò)設(shè)備傳送到另一個(gè)網(wǎng)絡(luò)設(shè)備 | IP、ICMP拓劝、RIP雏逾、OSPF、BGP郑临、IGMP等 |
數(shù)據(jù)鏈路層(Data Link Layer) | 數(shù)據(jù)鏈路層的數(shù)據(jù)傳輸單元成為幀校套,就是將網(wǎng)絡(luò)層轉(zhuǎn)發(fā)的數(shù)據(jù)封裝為幀,傳輸給物理層牧抵,以及分析物理層傳輸過(guò)來(lái)的數(shù)據(jù)幀 | SLIP、CSLIP、PPP犀变、ARP妹孙、RARP、MTU等 |
物理層(Physical Layer) | 為數(shù)據(jù)鏈路層提供數(shù)據(jù)幀和接收數(shù)據(jù)幀然后管理電腦通信設(shè)備和網(wǎng)絡(luò)媒體之間的互通获枝。包括了針腳蠢正、電壓、線纜規(guī)范省店、集線器嚣崭、中繼器、網(wǎng)卡懦傍、主機(jī)適配器等 | ISO2110等 |
二 .TCP/IP模型
OSI | TCP/IP | 協(xié)議 |
---|---|---|
應(yīng)用層/表示層/會(huì)話層 | 應(yīng)用層 | HTTP雹舀、FTP、TFTP粗俱、SMIP说榆、SNMP、DNS |
傳輸層 | 傳輸層 | TCP寸认、UDP |
網(wǎng)絡(luò)層 | 網(wǎng)絡(luò)層 | ICMP签财、IGMP、IP偏塞、ARP唱蒸、RARP |
數(shù)據(jù)鏈路層/物理層 | 網(wǎng)絡(luò)接口層 | 由底層網(wǎng)絡(luò)定義協(xié)議 |
三.TCP/IP分層模型圖
-
鏈路層—網(wǎng)絡(luò)接口層
網(wǎng)絡(luò)接口層是TCP/IP模型的最底層,負(fù)責(zé)接收從上一層交來(lái)的數(shù)據(jù)報(bào)并將數(shù)據(jù)報(bào)通過(guò)底層的物理網(wǎng)絡(luò)發(fā)送出去灸叼,比較常見(jiàn)的就是設(shè)備的驅(qū)動(dòng)程序神汹。ARP(地址解析協(xié)議)和RARP(逆地址解析協(xié)議)是某些網(wǎng)絡(luò)接口(如以太網(wǎng)和令牌環(huán)網(wǎng))使用的特殊協(xié)議,用來(lái)轉(zhuǎn)換IP層和網(wǎng)絡(luò)接口層使用的地址
-
網(wǎng)絡(luò)層
對(duì)應(yīng)OSI網(wǎng)絡(luò)層怜姿,負(fù)責(zé)數(shù)據(jù)包裝慎冤、尋址、路由和交換錯(cuò)誤報(bào)文沧卢。只管傳送數(shù)據(jù)蚁堤,不管成功與否
IP網(wǎng)絡(luò)協(xié)議一種不可靠的服務(wù),快速將源節(jié)點(diǎn)送到目標(biāo)節(jié)點(diǎn)但狭,被TCP/UDP使用披诗,TCP和UDP的每組數(shù)據(jù)都通過(guò)端系統(tǒng)和每個(gè)中間路由器中的IP層在互聯(lián)網(wǎng)中進(jìn)行傳輸。
-
傳輸層
位于應(yīng)用層和網(wǎng)絡(luò)接口層之間立磁,為兩臺(tái)主機(jī)提供端到端的通信呈队,在TCP/IP協(xié)議族中,有兩個(gè)互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)唱歧。
TCP為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信宪摧,如圖:
TCP首部最小為20字節(jié)粒竖,這20字節(jié)分為5行,每行4個(gè)字節(jié)也就是32個(gè)位几于。
第一行是源端口號(hào)和目標(biāo)端口號(hào)蕊苗,分別占用16位,也就是端口號(hào)最大是2^16沿彭,所以端口號(hào)的范圍是0~65536
第二行朽砰,第三行分別是32位序列號(hào)和32位確認(rèn)號(hào),在建立連接時(shí)喉刘,計(jì)算機(jī)生成一個(gè)隨機(jī)序列號(hào)作為初始值瞧柔,傳遞給目標(biāo),當(dāng)對(duì)方接收完畢之后睦裳,接收端會(huì)返回一個(gè)32位確認(rèn)應(yīng)答號(hào)是序列號(hào)加數(shù)據(jù)長(zhǎng)度造锅,當(dāng)發(fā)送端收到確認(rèn)應(yīng)答號(hào)后,用來(lái)確認(rèn)這個(gè)位置以前所有數(shù)據(jù)都被正常接收推沸,否則將會(huì)從新連接發(fā)送
-
第四行主要分為兩大部分备绽,左側(cè)16位分別是4位首首部長(zhǎng)度,如果沒(méi)有可選字段鬓催,那這里的值就是5肺素,表示TCP首都的長(zhǎng)度為20字節(jié),也就是說(shuō)5行x每行32bit宇驾。一位8bit倍靡,所以就是5x4=20字節(jié)。然后是6位保留用作未來(lái)使用课舍,暫時(shí)都為0.
然后是6位控制位塌西,連接,傳輸和斷開(kāi)都受到這六個(gè)控制位的指揮
- URG (urgent緊急) — 緊急標(biāo)志位筝尾,表示的是此報(bào)文段中有緊急數(shù)據(jù)捡需,將緊急數(shù)據(jù)排在普通數(shù)據(jù)的前面;當(dāng)接受端收到此報(bào)文后后必須先處理緊急數(shù)據(jù)筹淫,而后再處理普通數(shù)據(jù)站辉。 通常用來(lái)暫時(shí)中斷通信
- ACK (acknowledgement確認(rèn)) — 置1時(shí)表示確認(rèn)號(hào)合法,為0表示數(shù)據(jù)段不包含確認(rèn)信息损姜,確認(rèn)號(hào)被忽略
- PSH (push推送) — 置1時(shí)請(qǐng)求的報(bào)文在接收方收到時(shí)饰剥,會(huì)盡快交付接收應(yīng)用進(jìn)程,而不在等到整個(gè)緩存區(qū)都填滿后再交付給應(yīng)用進(jìn)程
- RST (reset重置) — 置1時(shí)重新連接摧阅,表示出現(xiàn)錯(cuò)誤汰蓉,需要釋放連接,再重新建立連接
- SYN (synchronous同步) — 置1時(shí)連接請(qǐng)求或同意報(bào)文棒卷,當(dāng)SYN=1而ACK=0時(shí)顾孽,表明這是一個(gè)連接請(qǐng)求報(bào)文段祝钢。對(duì)方若同意建立連接,則應(yīng)在響應(yīng)的報(bào)文段中使SYN=1和ACK=1
- FIN (FINis終止) — 釋放連接若厚,提出斷開(kāi)連接的一方將FIN置為1表示斷開(kāi)連接
然后第二部分是16位窗口大小
- 窗口 — 指對(duì)于發(fā)送報(bào)文段一方而言的接收窗口太颤。 窗口值 — 則是告訴發(fā)送方,從報(bào)文段首部的確認(rèn)號(hào)算起盹沈,接收方目前允許對(duì)方發(fā)送的數(shù)據(jù)量
-
第五行分別為16位校驗(yàn)和、16位緊急指針
- 16位校驗(yàn)和 — 發(fā)送端計(jì)算校驗(yàn)和吃谣,接收端進(jìn)行檢驗(yàn)計(jì)算和乞封,如果兩次校驗(yàn)一致表示數(shù)據(jù)正確,否則認(rèn)為數(shù)據(jù)被破壞岗憋,接收端將丟棄該數(shù)據(jù)肃晚,主要用來(lái)差錯(cuò)控制
- 16位緊急指針 — 當(dāng)URG置為1時(shí),指向后面優(yōu)先數(shù)據(jù)仔戈,URG為0時(shí)关串,則無(wú)效作為填充,主要用來(lái)加快處理標(biāo)識(shí)為URG的緊急數(shù)據(jù)
可選項(xiàng) — TCP頭部長(zhǎng)度最多為60字節(jié)监徘,所以可選項(xiàng)最多為40字節(jié)晋修,在這里不做太多陳述,具體可查閱TCP頭部選項(xiàng)
-
應(yīng)用層
應(yīng)用層是我們經(jīng)常接觸使用的部分凰盔,比如常用的http協(xié)議墓卦、ftp協(xié)議(文件傳輸協(xié)議)、snmp(網(wǎng)絡(luò)管理協(xié)議)户敬、telnet(遠(yuǎn)程登錄協(xié)議)落剪、smtp(簡(jiǎn)單郵件傳輸協(xié)議)、dns(域名解析)尿庐,主要是面向用戶的交互的忠怖。這里的應(yīng)用層集成了osi分層模型中 的應(yīng)用、表示抄瑟、會(huì)話層三層的功能凡泣。
TCP三次握手,四次揮手
- TCP是面向連接的協(xié)議锐借,它在源點(diǎn)和終點(diǎn)之間建立虛擬連接问麸,而不是物理連接
- 在數(shù)據(jù)通信之前,發(fā)送端與接收端要先建立連接钞翔,等數(shù)據(jù)發(fā)送結(jié)束后严卖,雙方再斷開(kāi)連接
- TCP連接的每一方都是由一個(gè)IP地址和一個(gè)端口組成
- 首先建立連接,客戶端連接服務(wù)端布轿,發(fā)送32位序列號(hào)seq=x哮笆,并且SYN置1来颤,服務(wù)端監(jiān)聽(tīng)客戶端發(fā)送的序列號(hào),然后發(fā)送32位確認(rèn)響應(yīng)swq=y和ack=x+1稠肘,并將SYN福铅、ACK置1,然后客戶端接收以后项阴,說(shuō)明服務(wù)端接收成功滑黔,然后再返回ack=y+1,表示客戶端已經(jīng)接收成功可以開(kāi)始連接
- 當(dāng)需要斷開(kāi)數(shù)據(jù)的時(shí)候环揽,客戶端發(fā)送序列號(hào)seq=x+2略荡,確認(rèn)號(hào)ack=y+1,并FIN置1歉胶,服務(wù)端接收以后汛兜,返回ack=x+3,并ACK置1通今,如果有數(shù)據(jù)沒(méi)有傳送完畢粥谬,等待傳送完畢返回序列號(hào)seq=y+1也就是返回確認(rèn)號(hào),并FIN置1辫塌,如果沒(méi)有數(shù)據(jù)則合并ack=x+3漏策,seq=y+1 FIN置1,最后客戶端接收以后返回給服務(wù)端確認(rèn)號(hào)ack=y+2來(lái)確認(rèn)斷開(kāi)
抓包
- Window用科來(lái)網(wǎng)絡(luò)分析系統(tǒng)璃氢,如圖
如圖所示三次握手哟玷,第一次客戶端發(fā)送seq序列號(hào),ACK置0一也,SYN置1巢寡。然后服務(wù)端收到序列號(hào)后發(fā)送列號(hào)seq,確認(rèn)號(hào)ack為客戶端序列號(hào)+1椰苟,且SYN抑月、ACK置1,然后客戶端接收以后發(fā)送序列號(hào)為服務(wù)端的ack確認(rèn)號(hào)舆蝴,并發(fā)送確認(rèn)號(hào)為服務(wù)端序列號(hào)+1谦絮,且ACK置1
如圖所示四次揮手變?nèi)螕]手,因?yàn)闆](méi)有數(shù)據(jù)需要等待傳輸洁仗,首先客戶端發(fā)送序列號(hào)為服務(wù)端在握手中發(fā)送的確認(rèn)號(hào)层皱,確認(rèn)號(hào)為服務(wù)端發(fā)送的序列號(hào)+1,且ACK赠潦、FIN置1叫胖,當(dāng)服務(wù)端收到以后開(kāi)始發(fā)送給客戶端,序列號(hào)為客戶端發(fā)送的確認(rèn)號(hào)她奥,確認(rèn)號(hào)為客戶端發(fā)送的序列號(hào)+1瓮增,且ACK怎棱、FIN置1,當(dāng)客戶端收到以后再發(fā)送給服務(wù)端绷跑,序列號(hào)為服務(wù)端發(fā)的確認(rèn)號(hào)拳恋,確認(rèn)號(hào)為服務(wù)端發(fā)送的序列號(hào)+1,且ACK置1砸捏,結(jié)束連接
-
Mac用WireShark
WireShark主要用于抓包谬运,在這里我們需要用wireshark查看tcp的三次握手和4次揮手,具體請(qǐng)查看WireShark教程
UDP則為應(yīng)用層提供一種非常簡(jiǎn)單的服務(wù)垦藏,如圖:
- UDP是一個(gè)無(wú)連接吩谦、不保證可靠性的傳輸層協(xié)議,也就是說(shuō)發(fā)送端不關(guān)心發(fā)送的數(shù)據(jù)是否到達(dá)目標(biāo)主機(jī)膝藕、數(shù)據(jù)是否出錯(cuò)等,收到數(shù)據(jù)的主機(jī)也不會(huì)告訴 發(fā)送方是否收到了數(shù)據(jù)咐扭,它的可靠性由上層協(xié)議來(lái)保障
- 首部結(jié)構(gòu)簡(jiǎn)單晌畅,在數(shù)據(jù)傳輸時(shí)能實(shí)現(xiàn)最小的開(kāi)銷(xiāo)渣触,如果進(jìn)程想發(fā)送很短的報(bào)文而對(duì)可靠性要求不高可以使用
- 16位源端口號(hào)和16位目標(biāo)端口號(hào)和TCP一樣
- 16位UDP長(zhǎng)度代表數(shù)據(jù)長(zhǎng)度
- 16位UDP校驗(yàn)和,用于差錯(cuò)控制
- 主要應(yīng)用于QQ、視頻軟件构罗、TFTP 簡(jiǎn)單文件傳輸協(xié)議(短信)