【CyberSecurityLearning 22】传输层协议分析(TCP/UDP)
目錄
一、傳輸層協議:
1)TCP/IP協議族的傳輸層協議主要有兩個:
2)TCP協議特點:
3)TCP報文段/封裝
4)TCP包頭分析:
5)TCP的三次握手建立連接
6)TCP的四次握手斷開連接
7)UDP協議特點
8)UDP協議包頭:
一、傳輸層協議:
1)TCP/IP協議族的傳輸層協議主要有兩個:
TCP(Transmission Control Protocol )?:傳輸控制協議
UDP(User Datagram Protocol )?:用戶數據報協議
2)TCP協議特點:
TCP是面向連接的服務、可靠的進程到進程通信的協議(因為在TCP包頭里面封裝了端口號,端口號就意味著一個服務,一個進程)
(網絡層的IP協議完成點到點的通信,傳輸層的TCP協議完成的是進程到進程的通信,進程就是一個終端里面的一個服務)
TCP是完成可靠的進程到進程通信,而UDP是完成非可靠的進程到進程通信,因為TCP是面向連接的服務
TCP是面向連接的服務理解:
TCP是屬于四層,而對于五層的服務來說,就是一個“打工的”,四層為五層提供服務,四層能夠識別五層,應用層生成完數據就會往傳輸層去扔,扔過去就不管了
四層就開始琢磨了,這個數據我怎么傳過去呢?這個時候就要看兩個方向,一個是TCP,一個是UDP,如果你要是扔給tcp了,tcp會先把你的數據放到一邊,tcp跟應用層的“老大”說:“你這個信息我還沒辦法往對方那傳,我要提前跟對方建立連接”,這時候TCP把應用層的數據先放到一邊,先緩存起來,然后四層與四層進行對話,這個過程中,由TCP生成一個TCP包頭,其中這個包頭里面有跟對方的聊天記錄,這個對話跟五層沒關系,只跟四層有關系,然后三層、二層、一層進行封裝,封裝完之后你會發現由TCP嘗試和對方的TCP嘗試建立連接的時候,聊得這個天,這個幀是沒有五層數據的
所以說,將來如果抓到一個幀,這個幀里面沒有五層數據,從四層開始的,很顯然這個幀是傳輸層的兩端TCP在聊天,聊什么天呢?“我這邊老板要和你那邊老板通信了,咱倆建立個連接唄!”,最終我們兩個之間建立了一個TCP鏈路,這個tcp鏈路之所以可以提供可靠的進程到進程通信(可靠的老板到老板通信),就是因為我與對方建立了鏈接,而這個連接有一些機制,這個機制促使我這個鏈路是可以可靠的完成進程到進程通信。
什么機制呢?有了這個鏈接,我們就可以有重傳機制,我跟老板說“我跟對方已經建立了鏈接,你盡情的往這扔數據吧!”,這時候老板就大量的往四層扔數據,那我四層就會刷刷的把這些數據扔到鏈路上去,扔的時候對方可能沒收到,這時候我這邊的“秘書”就會拿個“小鬧鐘”,這個“小鬧鐘”只有TCP有,UDP沒有,TCP會看這個“小鬧鐘”:比如說2s到了,對方怎么沒有搭理我啊?,我可能數據沒發過去,這時候老板跟我說的話我再重傳,只要你不跟我回話我就一直重傳,這個重傳的目的就是為了讓數據一定能到達對方。
如果雙方不再通信了,雙方的“秘書”也要提前溝通交互,完成一個交互狀態的協商達成去斷開這個連接
一旦建立連接之后我發了個信息對方沒回,如果一直沒回,秘書就會跟老板說已經出現問題了,這時候你的老板就會出現兩種狀態,第一種就是報錯,第二種情況就是死機了,秘書不工作了,秘書不把信息傳過去了,這時候就顯示網絡有問題,你的秘書就開始琢磨了:“我已經通知老板了” 老板說你不要給我發數據了,這個鏈路已經出問題了,但是老板那個軟件死記報錯了,但是作為秘書,我和對方的連接還在,換句話說:一旦我和對方建立連接之后,在我的電腦的緩存中就會生成一條會話狀態,這個會話狀態叫establish,代表已建立會話狀態,他會占用我的會話狀態,而一臺電腦上的會話狀態是有限的,一直發沒有回復,直接在本地把這個會話斷掉,在我的世界就好像我沒有跟對方建立過會話。如果這時候應用層再跟我發信息說要跟他對話,我要重新跟對方建立連接。
TCP提供全雙工服務,即數據可在同一時間雙向傳輸(全雙工就是我和對方聊天的同時,對方也能跟我聊天)
3)TCP報文段/封裝
TCP報文段封裝在IP數據22報中
4)TCP包頭分析:
注釋:
端口號范圍:0-65535
源端口號:是客戶端進程隨機生成的,一般是從50000開始的
目標端口號:一般是服務器固定的。如:mysql:3306
序列號seq:TCP為每個字節都進行了編號。
確認號ack:通過ack來確認每個字節是否收到,判斷是否需要重傳!
控制位(可以理解為開關位)每個占1bit,就是1和0,1代表開,0代表關:
????????????? SYN:請求建立連接位(如果被置位了,表示這是用來建立連接的第一個報文)
????????????? FIN:請求斷開連接位 (如果被置位了,表示這是用來關閉連接的第一個報文)
????? ? ? ? ? RST:重置位,強制對方斷開連接,釋放會話(如果被置位了,表示TCP連接要重新建立)
?????? ? ? ?? PSH:推送位,推送數據到應用層,為1時為有應用層數據
???? ? ? ? ?? ACK:確認位,該位為開關,為1時,ack號有效,為0時,ack無效。(如果被置位了,表示這個報文也是一個確認報文)
????? ? ? ??? URG:緊急位,為1時,代表有些字節為緊急數據,需要第一時間推送到應用層,需要與緊急指針配合。(如果被置位了,表示需要第一時間推送到應用層)
置位就是=1
窗口大小:win窗口,用于通知發送方自己的緩存大小。
校驗和:校驗整個TCP段
5)TCP的三次握手建立連接
第一次握手:建立連接時,客戶端發送syn包(syn=x)到服務器,并進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
?
在三次握手中,有一個著名的攻擊,流程如下:(SYN泛洪攻擊---屬于DOS攻擊)
黑客大量向服務器發送第一個包,這時候在服務器的緩存里面就會記錄一條會話狀態是SYN_RECEIVED,緊接著服務器給黑客一個回應,黑客不給回應
黑客大量偽造第一次的握手數據包,并且不給回應,在服務器上就會有大量握手對話,而且還沒有成功,服務器的會話已經被占滿了。(把你“秘書”占滿了),這樣你的服務器無法為客戶提供正常服務。
?
6)TCP的四次握手斷開連接
1)客戶端進程發出連接釋放報文,并且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等于前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
2)服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,并且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處于半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
3)客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。
4)服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由于在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認。
5)客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2??MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態。
6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。
7)UDP協議特點
無連接、不可靠的傳輸協議
(老板把數據給了我,不跟對方建立連接,我的秘書從來不跟對方秘書聊天,直接扔出去,對方能不能收到也不管了)
花費的開銷小(udp包頭里面就不需要封裝那么多字節)、傳輸效率較高
8)UDP協議包頭:
注釋:
UDP長度:用來指出UDP的總長度,為首部加上數據
校驗和:用來完成對UDP數據的差錯檢驗,它是UDP協議提供的唯一的可靠機制
部分參考:https://blog.csdn.net/qq_38950316/article/details/81087809
總結
以上是生活随笔為你收集整理的【CyberSecurityLearning 22】传输层协议分析(TCP/UDP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:肖戎(1974-),女,广东省地方
- 下一篇: 2019中国(黄石)工业互联网创新发展大