曾經(jīng)被TCP/IP概念困苦已久确镊,決心做一個(gè)總結(jié)。
? ? ? ?TCP/IP參考模型是計(jì)算機(jī)網(wǎng)絡(luò)的祖父ARPANET和其后繼的因特網(wǎng)使用的參考模型范删。ARPANET是由美國(guó)國(guó)防部DoD(U.S.Department of Defense)贊助的研究網(wǎng)絡(luò)蕾域。逐漸地它通過(guò)租用的電話線連結(jié)了數(shù)百所大學(xué)和政府部門(mén)。當(dāng)無(wú)線網(wǎng)絡(luò)和衛(wèi)星出現(xiàn)以后到旦,現(xiàn)有的協(xié)議在和它們相連的時(shí)候出現(xiàn)了問(wèn)題旨巷,所以需要一種新的參考體系結(jié)構(gòu)。這個(gè)體系結(jié)構(gòu)在它的兩個(gè)主要協(xié)議出現(xiàn)以后添忘,被稱(chēng)為T(mén)CP/IP參考模型(TCP/IP reference model)采呐。--引用百度百科上的一段解釋。
TCP/IP 模型是由以下幾個(gè)部分組成:
1.應(yīng)用層搁骑,(協(xié)議http)?
2.傳輸層(TCP)
3.?網(wǎng)絡(luò)層(ip)
4.鏈路層(網(wǎng)線等)
Q :在這里提一個(gè)問(wèn)題斧吐,我們平常說(shuō)的3g,4g,5g對(duì)應(yīng)的是哪一層呢?
?A : 3g 4g 5g ---對(duì)應(yīng)---->鏈路層
網(wǎng)絡(luò)中傳輸?shù)男g(shù)語(yǔ)名稱(chēng):
包是全能性術(shù)語(yǔ)
1.幀用于表示數(shù)據(jù)鏈路層中包的單位
2.片是ip中數(shù)據(jù)的單位
3.段則表示Tcp數(shù)據(jù)流中的信息
4.消息是指應(yīng)用協(xié)議中數(shù)據(jù)的單位
網(wǎng)絡(luò)傳輸數(shù)據(jù)流程:
(流程)
用戶(hù)A發(fā)送了一段信息比如 i am Android :
交給Tcp層(傳輸層)打包 仲器,附加Tcp包首部煤率。?i am Android (Tcp首部)
交給ip層(網(wǎng)絡(luò)層)打包。附加ip包首部娄周。?i am Android (Tcp首部)(ip首部)
交給數(shù)據(jù)鏈路層涕侈,附加以太網(wǎng)包首部。i am Android (Tcp首部)(ip首部)(以太網(wǎng)首部)
隨后交給物理層進(jìn)行相關(guān)的傳輸:
用戶(hù)b收到消息:
一層一層解開(kāi):
數(shù)據(jù)鏈路層將以太網(wǎng)首部打開(kāi) :?i am Android (Tcp首部)(ip首部)
ip層(網(wǎng)絡(luò)層)??i am Android (Tcp首部)
Tcp層(傳輸層)???i am Android?
上一層接收煤辨。?i am Android裳涛。
這樣設(shè)計(jì)的目的是:遵循單一職責(zé)原則
TCP和UDP的區(qū)別:
? TCP是面向連接的可靠的協(xié)議,在收發(fā)數(shù)據(jù)前必須和對(duì)方建立可靠的連接众辨,建立連接的3次握手端三,斷開(kāi)連接的4次揮手。而UDP是面向無(wú)連接的通訊協(xié)議鹃彻,數(shù)據(jù)傳輸前郊闯,源端和終端不建立連接,發(fā)送端盡可能快的將數(shù)據(jù)扔到網(wǎng)絡(luò)上蛛株,接收端從消息隊(duì)列中讀取消息段团赁。
注:基于udp.在應(yīng)用層可以自己實(shí)現(xiàn)了連接和重傳 ---》udt.(http3)
IP地址的作用是主要是尋址。(ip地址(網(wǎng)絡(luò)層) :為網(wǎng)絡(luò)或主機(jī)配一個(gè)邏輯地址谨履,為mac地址做區(qū)分欢摄。隨意更改。mac地址(數(shù)據(jù)鏈路成)不能更改)
例如:
公司有兩棟大樓?
A大樓:有一個(gè)通訊子網(wǎng)
B大樓笋粟,有一個(gè)通訊子網(wǎng)
有兩個(gè)路由器將A(通訊子網(wǎng))和B(通訊子網(wǎng))連接起來(lái) 局域網(wǎng)
A里面有它自己的多臺(tái)計(jì)算機(jī)怀挠,組成的子網(wǎng)析蝴。 ?B也是它自己的多臺(tái)計(jì)算機(jī)組成的子網(wǎng)
現(xiàn)在A樓里面有臺(tái)a機(jī)器(ip地址:192.168.1.2)
B樓里面有臺(tái)b機(jī)器(ip地址:192.167.1.2)
a發(fā)送數(shù)據(jù)給b機(jī)器:
數(shù)據(jù)包到達(dá)路由器,當(dāng)前的數(shù)據(jù)包不是我的子網(wǎng)里面的绿淋,于是去找哪個(gè)子網(wǎng)是192.167.-----》發(fā)給相應(yīng)的路由器
它是怎么知道要發(fā)給的是192.167.1.2呢闷畸?
在我們的子網(wǎng)中,每一個(gè)計(jì)算機(jī)都要在路由器保存吞滞,告訴別的機(jī)器里面我的ip地址和mac地址是多少佑菩。然后在發(fā)給相應(yīng)的計(jì)算機(jī)。路由器給每個(gè)計(jì)算機(jī)發(fā)送一份冯吓,但是網(wǎng)卡在收到數(shù)據(jù)包倘待,判斷數(shù)據(jù)包的mac地址是否和本機(jī)的mac地址一樣,不一樣直接丟棄组贺。
所以在這里引出了一個(gè)網(wǎng)絡(luò)嗅探的網(wǎng)絡(luò)攻擊:
在同一個(gè)子網(wǎng)上凸舵。不讓網(wǎng)卡收到數(shù)據(jù),將獲取的數(shù)據(jù)提前全部抓住失尖。
端口號(hào):
用來(lái)識(shí)別同一臺(tái)計(jì)算機(jī)中進(jìn)行通信的不同應(yīng)用程序啊奄,因此,它被稱(chēng)為程序地址掀潮。
端口號(hào)的有關(guān)范圍:
標(biāo)準(zhǔn)既定端口號(hào):0~1023 ?1024~49151
服務(wù)端的程序制定端口號(hào)菇夸。
客戶(hù)端。操作系統(tǒng)會(huì)為它分配一個(gè) 49152——65535仪吧。
所以我們可以通過(guò)一個(gè)源ip地址庄新,目標(biāo)ip地址 ,協(xié)議號(hào)薯鼠,源端口號(hào)以及目標(biāo)端口號(hào)這五個(gè)元素識(shí)別一個(gè)通信择诈。
在這里我們著重講一下TCP:
Tcp:(Transmission Control Protocol)
特性:
面向連接,
可靠性出皇,
RTT(往返時(shí)延羞芍,Round-Trip Time) 和RTO(重傳超時(shí),Retransmission TimeOut)
數(shù)據(jù)排序
流量控制
全雙工
對(duì)上面特性進(jìn)行的解釋?zhuān)?/h3>
? ? ?假設(shè)應(yīng)用層有一串報(bào)文要通過(guò)網(wǎng)絡(luò)發(fā)送郊艘,進(jìn)行流轉(zhuǎn)(傳輸層荷科,網(wǎng)絡(luò)層等),假如用戶(hù)發(fā)送一個(gè)很大的數(shù)據(jù)呢纱注?如何保證用戶(hù)發(fā)送的數(shù)據(jù)不被丟失呢畏浆?在這里就要對(duì)這個(gè)很大的數(shù)據(jù)進(jìn)行拆分了,ip層會(huì)進(jìn)行拆分成片狞贱,按照一般來(lái)說(shuō)刻获,以太網(wǎng)能接收的是1046字節(jié),按照1046字節(jié)進(jìn)行分片,再往對(duì)端進(jìn)行傳輸斥滤,這種情況下問(wèn)題就出現(xiàn)了将鸵,我本來(lái)是一個(gè)很大的數(shù)據(jù),現(xiàn)在發(fā)送出去佑颇,被切成了許多片顶掉,如果中途丟了幾個(gè)片呢,我如何能保證數(shù)據(jù)到對(duì)端之后的完整呢挑胸。然后TCP里面提出了重傳超時(shí)和應(yīng)答確認(rèn)機(jī)制來(lái)確保數(shù)據(jù)的完整性痒筒。假如對(duì)端一直沒(méi)有收到對(duì)方的消息,它不會(huì)一直等下去茬贵,而是在一個(gè)時(shí)間后簿透,進(jìn)行重傳一次,那么這個(gè)時(shí)長(zhǎng)如何確定呢解藻,操作系統(tǒng)在設(shè)計(jì)的時(shí)候會(huì)引入一個(gè)RTT機(jī)制老充,也就是往返時(shí)延機(jī)制。一個(gè)數(shù)據(jù)包從我這一端發(fā)送到另外一端螟左,然后收到對(duì)方的應(yīng)答啡浊,以這個(gè)時(shí)長(zhǎng)為往返時(shí)延。操作系統(tǒng)會(huì)對(duì)最新的一次往返時(shí)延胶背,都會(huì)對(duì)自己內(nèi)部的RTO進(jìn)行重新計(jì)算巷嚣。這個(gè)重傳超時(shí)不是固定的。
數(shù)據(jù)排序:拆分成一片片后钳吟,對(duì)方在組成一個(gè)完整的數(shù)據(jù)包之前要清楚順序廷粒,所以網(wǎng)絡(luò)協(xié)議上會(huì)在這一端進(jìn)行排序。以方便在對(duì)端進(jìn)行完整的組裝红且。
流量控制(滑動(dòng)窗口):我的通訊對(duì)端處理數(shù)據(jù)能力不一樣坝茎,發(fā)送端只管發(fā)送,對(duì)端可能接收后還要進(jìn)行一下處理,所以可能接收的數(shù)據(jù)能力沒(méi)有你發(fā)送方發(fā)的快直焙,所以還有一種機(jī)制景东,應(yīng)答報(bào)文或者發(fā)送報(bào)文會(huì)告訴對(duì)端,目前我一次性能接收多少數(shù)據(jù)奔誓。
全雙工:在通訊兩個(gè)對(duì)端斤吐,接收方和服務(wù)端可以同時(shí)向?qū)Χ税l(fā)送也可以同時(shí)接收對(duì)端的數(shù)據(jù)。
TCP連接中的三次握手
客戶(hù)端(connect) :
1.先向服務(wù)器發(fā)送SYN的報(bào)文(SYN = 1 seq = 23412)厨喂。 客戶(hù)端狀態(tài):SYN_SENT
2.服務(wù)端收到報(bào)文后和措,向客戶(hù)端作出相應(yīng)的應(yīng)答(SYN = 1. ACK = 1,ack?= 23413 seq = 6478)??服務(wù)端狀態(tài):SYN_RCVD
3.客戶(hù)端收到報(bào)文后,進(jìn)行檢查:ACK是否為1?ack 是否是23413 ?蜕煌,客戶(hù)端就確定服務(wù)器收到了我的SYN = 1 seq = 23412 報(bào)文派阱。向服務(wù)器作出應(yīng)答
4.客戶(hù)端應(yīng)答發(fā)送給服務(wù)器ACK = 1,ack =??6479,?客戶(hù)端狀態(tài):ESTABLISHED
5.服務(wù)端收到客戶(hù)端的報(bào)文后斜纪。服務(wù)端狀態(tài):ESTABLISHED
為什么TCP需要三次握手贫母?
Tcp是面向連接的文兑,所以需要雙方都確認(rèn)連接的建立(維護(hù)序列號(hào))。
SYN洪泛攻擊:通過(guò)網(wǎng)絡(luò)所在的端口發(fā)送大量偽造原地址的攻擊報(bào)文腺劣,造成服務(wù)器端上的半開(kāi)連接隊(duì)列被占滿(mǎn)绿贞,從而阻止其他用戶(hù)進(jìn)行訪問(wèn)。
原理:攻擊者客戶(hù)端利用偽造的ip地址向服務(wù)器發(fā)出請(qǐng)求(第一次握手橘原,而服務(wù)器的響應(yīng)的報(bào)文將永遠(yuǎn)發(fā)送不到真實(shí)的客戶(hù)端籍铁,服務(wù)端在等待客戶(hù)端的第三次握手(永遠(yuǎn)都不會(huì)有),服務(wù)端在等待這種半開(kāi)的連接過(guò)程中消耗了資源趾断,如果有成千上萬(wàn)的這種連接拒名,主機(jī)資源將被耗盡,從而達(dá)到攻擊的目的芋酌,
解決方案:
1.無(wú)效連接監(jiān)控釋放增显。
2.延緩TCB分配方法
3.防火墻
TCP連接中的四次揮手
第一次客戶(hù)端發(fā)送close主動(dòng)關(guān)閉請(qǐng)求,F(xiàn)IN = 1 seq = 98745----->客戶(hù)端:Fin_wait_1
客戶(hù)端進(jìn)行應(yīng)答:ACK = 1 ack= 98756 --->CLOSE_WAIT?
客戶(hù)端收到服務(wù)器的請(qǐng)求------》客戶(hù)端?Fin_wait_2
服務(wù)器發(fā)送報(bào)文 FIN = 1 seq = 76432 ------》CLOSE
客戶(hù)端收到服務(wù)器的請(qǐng)求 --------〉TIME_WAITING 應(yīng)答 ACk = 1 ?ack = 76433 ?
服務(wù)器-------->CLOSED
客戶(hù)端TIME_WAITING持續(xù)一段時(shí)間 ?: 2 * MSL------>客戶(hù)端CLOSED
為什么需要四次揮手
因?yàn)門(mén)cp是雙全工(客戶(hù)端和服務(wù)器端可以相互發(fā)送和接受請(qǐng)求)脐帝,所以需要雙方都確認(rèn)關(guān)閉和連接甸怕。
為什么需要TIME_WAITING 并且要存活那么長(zhǎng)時(shí)間:
MSL :最長(zhǎng)報(bào)文段壽命(存活的最長(zhǎng)時(shí)間 RFC 定義為2分鐘 系統(tǒng)30s);TIME_WAITING 實(shí)際1——4min
服務(wù)端發(fā)送報(bào)文---》客戶(hù)端要做應(yīng)答腮恩。網(wǎng)絡(luò)丟失梢杭,服務(wù)端重發(fā)。
端口沖突:
A:8080端口?
B: 8080端口
A立馬關(guān)閉的話秸滴,b申請(qǐng)到了武契,服務(wù)器還在發(fā),則沒(méi)收到荡含。被B收到了咒唆。
網(wǎng)絡(luò)抓包相關(guān)工具:
wireshark ?tcpdump.