了解TCP协议,IP协议、ICMP协议和ARP协议(TCP报文,TCP的分成管理,TCP与UDP,TCP的三次握手四次挥手原理)
文章目錄
- 了解TCP/IP協(xié)議
- TCP報文格式
- TCP/IP 的分層管理
- TCP與UDP
- TCP的三次握手與四次揮手
- 為什么要三次握手?
- 為什么要四次揮手?
- IP數(shù)據(jù)包格式
- ICMP協(xié)議
- ICMP協(xié)議的基本使用
- ARP協(xié)議工作原理
了解TCP/IP協(xié)議
TCP/IP傳輸協(xié)議,即傳輸控制/網(wǎng)絡(luò)協(xié)議,也叫作網(wǎng)絡(luò)通訊協(xié)議。它是在網(wǎng)絡(luò)的使用中的最基本的通信協(xié)議。TCP/IP傳輸協(xié)議對互聯(lián)網(wǎng)中各部分進(jìn)行通信的標(biāo)準(zhǔn)和方法進(jìn)行了規(guī)定。并且,TCP/IP傳輸協(xié)議是保證網(wǎng)絡(luò)數(shù)據(jù)信息及時、完整傳輸?shù)膬蓚€重要的協(xié)議。TCP/IP傳輸協(xié)議是嚴(yán)格來說是一個四層的體系結(jié)構(gòu),應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層都包含其中。
TCP報文格式
源端口號:16位字段,為發(fā)送方進(jìn)程對應(yīng)的端口號。
目標(biāo)端口號:16位字段,對應(yīng)的是接收端的進(jìn)程,接收端收到數(shù)據(jù)后,根據(jù)這個端口號來確定吧這個數(shù)據(jù)送給哪個應(yīng)用程序的進(jìn)程。
首部長度:一般是20字節(jié),最大可以擴(kuò)展為60字節(jié)。用它可以確定首部數(shù)據(jù)結(jié)構(gòu)的字節(jié)長度。
SYN:同步序號位,TCP需要建立連接時將該值設(shè)為1
ACK:確認(rèn)序號位,當(dāng)該位為1時,用于確認(rèn)發(fā)送方的數(shù)據(jù)
FIN:當(dāng)TCP斷開連接時將該位置為1
TCP/IP 的分層管理
TCP/IP協(xié)議里最重要的一點(diǎn)就是分層。TCP/IP協(xié)議族按層次分別為 應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層。當(dāng)然也有按不同的模型分為4層或者7層的。
物理層
該層負(fù)責(zé) 比特流在節(jié)點(diǎn)之間的傳輸,即負(fù)責(zé)物理傳輸,這一層的協(xié)議既與鏈路有關(guān),也與傳輸?shù)慕橘|(zhì)有關(guān)。通俗來說就是把計算機(jī)連接起來的物理手段。
數(shù)據(jù)鏈路層
控制網(wǎng)絡(luò)層與物理層之間的通信,主要功能是保證物理線路上進(jìn)行可靠的數(shù)據(jù)傳遞。為了保證傳輸,從網(wǎng)絡(luò)層接收到的數(shù)據(jù)被分割成特定的可被物理層傳輸?shù)膸?。幀是用來移動?shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)包,他不僅包含原始數(shù)據(jù),還包含發(fā)送方和接收方的物理地址以及糾錯和控制信息。
網(wǎng)絡(luò)層
決定如何將數(shù)據(jù)從發(fā)送方路由到接收方。
傳輸層
該層為兩臺主機(jī)上的應(yīng)用程序提供端到端的通信。傳輸層有兩個傳輸協(xié)議:TCP(傳輸控制協(xié)議)和 UDP(用戶數(shù)據(jù)報協(xié)議)。其中,TCP是一個可靠的面向連接的協(xié)議,udp是不可靠的或者說無連接的協(xié)議
應(yīng)用層
應(yīng)用程序收到傳輸層的數(shù)據(jù)后,接下來就要進(jìn)行解讀。解讀必須事先規(guī)定好格式,而應(yīng)用層就是規(guī)定應(yīng)用程序的數(shù)據(jù)格式。主要的協(xié)議有:HTTP.FTP,Telent等。
TCP與UDP
TCP的三次握手與四次揮手
- 第一次握手:建立連接??蛻舳税l(fā)送連接請求報文段,并將syn(標(biāo)記位)設(shè)置為1,Squence Number(數(shù)據(jù)包序號)(seq)為x,接下來等待服務(wù)端確認(rèn),客戶端進(jìn)入SYN_SENT狀態(tài)(請求連接);
- 第二次握手:服務(wù)端收到客戶端的 SYN 報文段,對 SYN 報文段進(jìn)行確認(rèn),設(shè)置 ack(確認(rèn)號)為 x+1(即seq+1 ; 同時自己還要發(fā)送 SYN 請求信息,將 SYN 設(shè)置為1, seq為 y。服務(wù)端將上述所有信息放到 SYN+ACK 報文段中,一并發(fā)送給客戶端,此時服務(wù)器進(jìn)入 SYN_RECV狀態(tài)。
- 第三次握手:客戶端收到服務(wù)端的 SYN+ACK(確認(rèn)符) 報文段;然后將 ACK 設(shè)置為 y+1,向服務(wù)端發(fā)送ACK報文段,這個報文段發(fā)送完畢后,客戶端和服務(wù)端都進(jìn)入ESTABLISHED(連接成功)狀態(tài),完成TCP 的三次握手。
四次揮手如下所示:
-
第一次揮手
客戶端設(shè)置seq和 ACK ,向服務(wù)器發(fā)送一個 FIN(終結(jié))報文段。此時,客戶端進(jìn)入 FIN_WAIT_1 狀態(tài),表示客戶端沒有數(shù)據(jù)要發(fā)送給服務(wù)端了。
FIN:斷開連接標(biāo)識,提出斷開連接的一方將這個值設(shè)為1.ACK:ACK=1,表示確認(rèn)序列號字段有效。
-
第二次揮手
服務(wù)端收到了客戶端發(fā)送的 FIN 報文段,向客戶端回了一個 ACK 報文段。
-
第三次揮手
服務(wù)端向客戶端發(fā)送FIN 報文段,請求關(guān)閉連接,同時服務(wù)端進(jìn)入 LAST_ACK 狀態(tài)。
-
第四次揮手
客戶端收到服務(wù)端發(fā)送的 FIN 報文段后,向服務(wù)端發(fā)送 ACK 報文段,然后客戶端進(jìn)入 TIME_WAIT 狀態(tài)。服務(wù)端收到客戶端的 ACK 報文段以后,就關(guān)閉連接。此時,客戶端等待 2MSL(指一個片段在網(wǎng)絡(luò)中最大的存活時間)后依然沒有收到回復(fù),則說明服務(wù)端已經(jīng)正常關(guān)閉,這樣客戶端就可以關(guān)閉連接了。
最后再看一下完整的過程:
為什么要三次握手?
為了防止已失效的連接請求報文突然又傳送到了服務(wù)端,因為產(chǎn)生錯誤。
具體解釋: “已失效的連接請求報文段”產(chǎn)生情況:
client 發(fā)出的第一個連接請求報文段并沒有丟失,而是在某個網(wǎng)絡(luò)節(jié)點(diǎn)長時間滯留,因此導(dǎo)致延誤到連接釋放以后的某個時間才到達(dá) service。如果沒有三次握手,那么此時server收到此失效的連接請求報文段,就誤認(rèn)為是 client再次發(fā)出的一個新的連接請求,于是向 client 發(fā)出確認(rèn)報文段,同意建立連接,而此時 client 并沒有發(fā)出建立連接的情況,因此并不會理會服務(wù)端的響應(yīng),而service將會一直等待client發(fā)送數(shù)據(jù),因此就會導(dǎo)致這條連接線路白白浪費(fèi)。
如果此時變成兩次揮手行不行?
這個時候需要明白全雙工與半雙工,再進(jìn)行回答。比如:
- 第一次握手: A給B打電話說,你可以聽到我說話嗎?
- 第二次握手: B收到了A的信息,然后對A說: 我可以聽得到你說話啊,你能聽得到我說話嗎?
- 第三次握手: A收到了B的信息,然后說可以的,我要給你發(fā)信息啦!
在三次握手之后,A和B都能確定這么一件事: 我說的話,你能聽到; 你說的話,我也能聽到。 這樣,就可以開始正常通信了,如果是兩次,那將無法確定。
為什么要四次揮手?
TCP 協(xié)議是一種面向連接,可靠,基于字節(jié)流的傳輸層通信協(xié)議。TCP 是全雙工模式(同一時刻可以同時發(fā)送和接收),這就意味著,當(dāng)主機(jī)1發(fā)出 FIN 報文段時,只是表示主機(jī)1已結(jié)沒有數(shù)據(jù)要發(fā)送了,主機(jī)1告訴主機(jī)2,它的數(shù)據(jù)已經(jīng)全部發(fā)送完畢;但是,這個時候主機(jī)1還是可以接受來自主機(jī)2的數(shù)據(jù);當(dāng)主機(jī)2返回 ACK報文段時,這個時候就表示主機(jī)2也沒有數(shù)據(jù)要發(fā)送了,就會告訴主機(jī)1,我也沒有數(shù)據(jù)要發(fā)送了,之后彼此就會中斷這次TCP連接。
數(shù)據(jù)已經(jīng)全部發(fā)送完畢;但是,這個時候主機(jī)1還是可以接受來自主機(jī)2的數(shù)據(jù);當(dāng)主機(jī)2返回 ACK報文段時,這個時候就表示主機(jī)2也沒有數(shù)據(jù)要發(fā)送了,就會告訴主機(jī)1,我也沒有數(shù)據(jù)要發(fā)送了,之后彼此就會中斷這次TCP連接。
IP數(shù)據(jù)包格式
第一層
版本:該字段包含的是IP的版本號,4比特。目前IP的版本為4(即IPv4)。
首部長度:該字段用于表示IP數(shù)據(jù)包頭長度,4比特。IP數(shù)據(jù)包頭最短為20字節(jié),但是其長度是可變的,具體長度取決于可選字段的長度。
優(yōu)先級與服務(wù)類型:該字段用于表示數(shù)據(jù)包的優(yōu)先級和服務(wù)類型,8比特。用來區(qū)分哪些數(shù)據(jù)包優(yōu)先級高和哪些數(shù)據(jù)優(yōu)先級低。例:同時迅雷下載和聊QQ,其中QQ的優(yōu)先級就比迅雷下載的優(yōu)先級高,否則就需要等待迅雷下載完畢才能進(jìn)行QQ聊天。
總長度:該字段用以指示整個IP數(shù)據(jù)包的長度,16比特。最長為65535(2^16-1)字節(jié),包括包頭和數(shù)據(jù)。
第二層 上層的數(shù)據(jù)到IP層會被分片
標(biāo)識符:該字段用于表示IP數(shù)據(jù)包的標(biāo)識符,16比特。當(dāng)IP對上層數(shù)據(jù)分片時,它將給所有的分片分配一組編號,然后將這些編號放入標(biāo)識符字段中,保證分片不會被錯誤的重組。標(biāo)識符字段用于標(biāo)識一個數(shù)據(jù)包,以便接收節(jié)點(diǎn)可以重組被分片的數(shù)據(jù)包。
標(biāo)志:標(biāo)志字段,3比特。標(biāo)志和分片一起被用來傳遞信息。例如,當(dāng)數(shù)據(jù)包從一個以太網(wǎng)發(fā)送到另一個以太網(wǎng)時,指示對當(dāng)前的包不能進(jìn)行分片或者一個包被分片后指示在一系列的分片中最后一個分片是否已發(fā)出。
段偏移量:該字段用于表示段偏移量,13比特。段偏移量中包含的信息是在一個分片序列中如何將分片重新連接起來。
第三層
TTL:Time to live 該字段用于表示IP數(shù)據(jù)包的生命周期,8比特。該字段包含的信息可以防止一個數(shù)據(jù)包在網(wǎng)絡(luò)中無限循環(huán)的轉(zhuǎn)發(fā)下去。即防止路由環(huán)路。一個數(shù)據(jù)包經(jīng)過每一個路由器,TTL將減去1。
協(xié)議號:協(xié)議字段,8比特。該字段用以指示在IP數(shù)據(jù)包中封裝的是哪一個協(xié)議,是TCP還是UDP,TCP的協(xié)議號為6,UDP的協(xié)議號為17.
首部校驗和:該字段用于表示校驗和,16比特。校驗和是16位的錯誤檢測字段。目的主機(jī)和網(wǎng)絡(luò)中的每個網(wǎng)關(guān)都要重新計算包頭的校驗和,就如同源主機(jī)做的一樣。如果數(shù)據(jù)包沒有被改動過,兩個計算結(jié)果應(yīng)該是一樣的。
第四層
源IP地址:該字段用于表示數(shù)據(jù)包的源地址,32比特。這是一個網(wǎng)絡(luò)地址,指的是發(fā)送該數(shù)據(jù)包設(shè)備的網(wǎng)絡(luò)地址。
第五層
目標(biāo)IP地址:該字段用于表示數(shù)據(jù)包的目的地址,32比特。這也是一個網(wǎng)絡(luò)地址,但指的是接收節(jié)點(diǎn)的網(wǎng)絡(luò)地址。
ICMP協(xié)議
ICMP協(xié)議:主要用于在IP網(wǎng)絡(luò)中發(fā)送控制消息,提供在通信環(huán)境中可能發(fā)生的各種問題的反饋。
ICMP采取“錯誤偵測與回饋機(jī)制”,通過IP數(shù)據(jù)包封裝,用來發(fā)送錯誤和控制消息。
ICMP協(xié)議號是1
ICMP協(xié)議的基本使用
1ping命令的返回信息
不能建立連接的應(yīng)答:
連接超時的應(yīng)答
ping命令的常用參數(shù)
1.-a 可以顯示對方主機(jī)名稱
2.-l 可以設(shè)定ping包的大小。一般情況下,ping包的大小為32字節(jié)。
3.-t 長ping命令
在window系統(tǒng)中,默認(rèn)情況會發(fā)送4個ping包,如果在ping命令后面加上參數(shù)“-t”,系統(tǒng)會一直不停的ping下去。按ctrl+c結(jié)束。
ARP協(xié)議
ARP實(shí)際上是一個廣播。ARP(Address Resolution Protocol,地址解析協(xié)議)的基本功能是負(fù)責(zé)將一個已知的IP地址解析成MAC地址,以便在交換機(jī)上通過MAC地址進(jìn)行通信。
ARP協(xié)議工作原理
ARP緩存表:老化時間:120s(綁定的不受老化時間影響)
ARP緩存表是主機(jī)存儲在內(nèi)存中的一個IP地址和MAC地址對應(yīng)表。在windows系統(tǒng)中可以使用命令“arp-a”來顯示ARP緩存表。
ARP協(xié)議工作過程
1.PC1想要發(fā)送數(shù)據(jù)給PC2,查看緩存表里沒有PC2的MAC地址
2.PC1發(fā)送(需要10.0.0.2的MAC地址)的廣播。
3.所有主機(jī)收到ARP請求的廣播,PC2回復(fù)ARP應(yīng)答 ,其他主機(jī)丟棄
4.PC1將PC2的MAC地址保存到緩存表中,這時就可以和PC2發(fā)送數(shù)據(jù)了。
ARP協(xié)議攻擊原理
ARP協(xié)議實(shí)際上是一種廣播,廣播是請求+回應(yīng),在回應(yīng)過程中可以出現(xiàn)bug,可以主動回應(yīng)欺騙其他主機(jī)或者網(wǎng)關(guān)等
解決方法:
主機(jī)如何綁定ARP來防止ARP欺騙
如何查找IP的接口號:netsh interface ipv4 show neighbors
格式:netsh interface ipv4 set neighbors 接口號 IP地址 IP地址對應(yīng)的MAC地址
附:如何解除綁定
格式:netsh -c “i i” delete neighbors idx號 IP地址 IP地址對應(yīng)的MAC地址
如何查看idx號:netsh i i show in
總結(jié)
以上是生活随笔為你收集整理的了解TCP协议,IP协议、ICMP协议和ARP协议(TCP报文,TCP的分成管理,TCP与UDP,TCP的三次握手四次挥手原理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4 8G双通道内存,提速还省钱,专家教你
- 下一篇: firewalld/iptables防火