TCP 和 UDP是網絡協議的傳輸層上的兩種不同的協議。TCP的特點是面向連接的、可靠的字節流服務。客戶端需要和服務器之間建立一個TCP連接,之后才能傳輸數據。數據到達之前對方就一直在等待,除非對方直接關閉連接,數據有序,先發先到。UDP是一種無連接、不可靠的數據發送協議。發送方根據對方的ip地址發送數據包,但是不保證接收發接包的質量,數據無序還容易丟包。雖然UDP協議不穩定但是在即時通訊(QQ聊天、在線視頻、網絡語音電話)的場景下,可以允許偶爾的斷續,但是這種協議速度快。
TCP、UDP的報文結構
詳細引用:https://blog.csdn.net/baidu_32045201/article/details/78021536
UDP的報文結構 TCP的報文結構
TCP協議三次握手、四次揮手、超時重傳
通過抓包觀察TCP三次握手具體報文:https://blog.csdn.net/qq_39331713/article/details/81705890
三次握手是指建立TCP連接協議時,需要在客戶端和服務器之間發送三個包,握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。
第一次握手:客戶端發送第一個包,其中SYN標志位為1, ACK=0,發送順序號sequence=X(隨機int)。客戶端進入SYN發送狀態,等待服務器確認。
第二次握手:服務器收到這個包后發送第二個包,其中包SYN、ACK標志位為1,發送順序號seq=Y(隨機int),接收順序號ACK=X+1,此時服務器進入SYN接收狀態。
第三次握手:客戶端收到服務器傳來的包后,向服務器發送第三個包,SYN=0, ACK=1,接收順序號ACK = Y+1,發送順序號seq=X+1。此包發送完畢,客戶端和服務器進入ESTABLISHED建立成功狀態,完成三次握手。
四次握手是指終止TCP連接協議時,需要在客戶端和服務器之間發送四個包
- 第一次揮手:主動關閉方發送第一個包,其中FIN標志位為1,發送順序號seq為X。
- 第二次揮手:被動關閉方收到FIN包后發送第二個包,其中發送順序號seq為Z,接收順序號ack為X+1。
- 第三次揮手:被動關閉方再發送第三個包,其中FIN標志位為1,發送順序號seq為Y,接收順序號ack為X。
- 第四次揮手:主動關閉方發送第四個包,其中發送順序號為X,接收順序號為Y。至此,完成四次揮手。
超時重傳指的是,發送數據包在一定的時間周期內沒有收到相應的ACK,等待一定的時間,超時之后就認為這個數據包丟失,就會重新發送。這個等待時間被稱為RTO.
深入討論:
1、為什么建立連接協議是三次握手,而關閉連接卻是四次握手呢?
建立連接時,ACK和SYN可以放在一個報文里來發送。而關閉連接時,被動關閉方可能還需要發送一些數據后,再發送FIN報文表示同意現在可以關閉連接了,所以它這里的ACK報文和FIN報文多數情況下都是分開發送的。
2、為什么TIME_WAIT狀態還需要等2MSL后才能返回到CLOSED狀態?
兩個存在的理由:1、無法保證最后發送的ACK報文會一定被對方收到,所以需要重發可能丟失的ACK報文。2、關閉鏈接一段時間后可能會在相同的IP地址和端口建立新的連接,為了防止舊連接的重復分組在新連接已經終止后再現。2MSL足以讓分組最多存活msl秒被丟棄。
3、為什么必須是三次握手,不能用兩次握手進行連接?
記住服務器的資源寶貴不能浪費! 如果在斷開連接后,第一次握手請求連接的包才到會使服務器打開連接,占用資源而且容易被惡意攻擊!防止攻擊的方法,縮短服務器等待時間。兩次握手容易死鎖。如果服務器的應答分組在傳輸中丟失,將不知道S建立什么樣的序列號,C認為連接還未建立成功,將忽略S發來的任何數據分組,只等待連接確認應答分組。而S在發出的分組超時后,重復發送同樣的分組。這樣就形成了死鎖。
TCP/IP五層模型和OSI網絡七層協議
TCP/IP五層模型
應用層: 提供給客戶端訪問服務器網絡服務的接口 。常用協議:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等
HTTP協議(超文本傳輸協議)
詳見本篇博客:https://blog.csdn.net/sinat_41144773/article/details/89667597
傳輸層:數據傳輸協議TCP 或 UDP
網絡層 : 負責對數據包進行路由選擇和存儲轉發,負責為分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段和用戶數據報封裝成分組(IP數據報)或包進行傳送。
IP協議:逐跳發送模式;根據數據包的目的地IP地址決定數據如何發送;如果數據包不能直接發送至目的地,IP協議負責尋找一個合適的下一跳路由器,並將數據包交付給該路由器轉發
ICMP協議:因特網控制報文協議,用於檢測網絡連接
數據鏈路層: 負責分配MAC地址常用協議:地址解析協議(ARP)和反地址解析協議(RARP),實現IP地址與機器物理地址(MAC地址)之間的轉換兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀,在兩個相鄰的鏈路上傳送幀(frame)。每一幀包括數據和必要的控制信息。網卡接口的網絡驅動程序,處理數據在物理媒介上的傳輸;不同的物理網絡具有電氣特性,網絡驅動程序隱藏實現細節,為上層協議提供一致接口
物理層:所傳數據單位是比特(bit)。物理層要考慮用多大的電壓代表1 或 0 ,以及接受方如何識別發送方所發送的比特。
各網絡層對應的工作設備:
物理層:中繼器、集線器
數據鏈路層:網橋或交換機
網絡層中繼系統:路由器
網絡層以上的中繼系統:網關
TCP 和 UDP是網絡協議的傳輸層上的兩種不同的協議。TCP的特點是面向連接的、可靠的字節流服務。客戶端需要和服務器之間建立一個TCP連接,之后才能傳輸數據。數據到達之前對方就一直在等待,除非對方直接關閉連接,數據有序,先發先到。UDP是一種無連接、不可靠的數據發送協議。發送方根據對方的ip地址發送數據包,但是不保證接收發接包的質量,數據無序還容易丟包。雖然UDP協議不穩定但是在即時通訊(QQ聊天、在線視頻、網絡語音電話)的場景下,可以允許偶爾的斷續,但是這種協議速度快。
TCP、UDP的報文結構
詳細引用:https://blog.csdn.net/baidu_32045201/article/details/78021536
UDP的報文結構 TCP的報文結構
TCP協議三次握手、四次揮手、超時重傳
通過抓包觀察TCP三次握手具體報文:https://blog.csdn.net/qq_39331713/article/details/81705890
三次握手是指建立TCP連接協議時,需要在客戶端和服務器之間發送三個包,握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。
第一次握手:客戶端發送第一個包,其中SYN標志位為1, ACK=0,發送順序號sequence=X(隨機int)。客戶端進入SYN發送狀態,等待服務器確認。
第二次握手:服務器收到這個包后發送第二個包,其中包SYN、ACK標志位為1,發送順序號seq=Y(隨機int),接收順序號ACK=X+1,此時服務器進入SYN接收狀態。
第三次握手:客戶端收到服務器傳來的包后,向服務器發送第三個包,SYN=0, ACK=1,接收順序號ACK = Y+1,發送順序號seq=X+1。此包發送完畢,客戶端和服務器進入ESTABLISHED建立成功狀態,完成三次握手。
四次握手是指終止TCP連接協議時,需要在客戶端和服務器之間發送四個包
- 第一次揮手:主動關閉方發送第一個包,其中FIN標志位為1,發送順序號seq為X。
- 第二次揮手:被動關閉方收到FIN包后發送第二個包,其中發送順序號seq為Z,接收順序號ack為X+1。
- 第三次揮手:被動關閉方再發送第三個包,其中FIN標志位為1,發送順序號seq為Y,接收順序號ack為X。
- 第四次揮手:主動關閉方發送第四個包,其中發送順序號為X,接收順序號為Y。至此,完成四次揮手。
超時重傳指的是,發送數據包在一定的時間周期內沒有收到相應的ACK,等待一定的時間,超時之后就認為這個數據包丟失,就會重新發送。這個等待時間被稱為RTO.
深入討論:
1、為什么建立連接協議是三次握手,而關閉連接卻是四次握手呢?
建立連接時,ACK和SYN可以放在一個報文里來發送。而關閉連接時,被動關閉方可能還需要發送一些數據后,再發送FIN報文表示同意現在可以關閉連接了,所以它這里的ACK報文和FIN報文多數情況下都是分開發送的。
2、為什么TIME_WAIT狀態還需要等2MSL后才能返回到CLOSED狀態?
兩個存在的理由:1、無法保證最后發送的ACK報文會一定被對方收到,所以需要重發可能丟失的ACK報文。2、關閉鏈接一段時間后可能會在相同的IP地址和端口建立新的連接,為了防止舊連接的重復分組在新連接已經終止后再現。2MSL足以讓分組最多存活msl秒被丟棄。
3、為什么必須是三次握手,不能用兩次握手進行連接?
記住服務器的資源寶貴不能浪費! 如果在斷開連接后,第一次握手請求連接的包才到會使服務器打開連接,占用資源而且容易被惡意攻擊!防止攻擊的方法,縮短服務器等待時間。兩次握手容易死鎖。如果服務器的應答分組在傳輸中丟失,將不知道S建立什么樣的序列號,C認為連接還未建立成功,將忽略S發來的任何數據分組,只等待連接確認應答分組。而S在發出的分組超時后,重復發送同樣的分組。這樣就形成了死鎖。
TCP/IP五層模型和OSI網絡七層協議
TCP/IP五層模型
應用層: 提供給客戶端訪問服務器網絡服務的接口 。常用協議:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等
HTTP協議(超文本傳輸協議)
詳見本篇博客:https://blog.csdn.net/sinat_41144773/article/details/89667597
傳輸層:數據傳輸協議TCP 或 UDP
網絡層 : 負責對數據包進行路由選擇和存儲轉發,負責為分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段和用戶數據報封裝成分組(IP數據報)或包進行傳送。
IP協議:逐跳發送模式;根據數據包的目的地IP地址決定數據如何發送;如果數據包不能直接發送至目的地,IP協議負責尋找一個合適的下一跳路由器,並將數據包交付給該路由器轉發
ICMP協議:因特網控制報文協議,用於檢測網絡連接
數據鏈路層: 負責分配MAC地址常用協議:地址解析協議(ARP)和反地址解析協議(RARP),實現IP地址與機器物理地址(MAC地址)之間的轉換兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀,在兩個相鄰的鏈路上傳送幀(frame)。每一幀包括數據和必要的控制信息。網卡接口的網絡驅動程序,處理數據在物理媒介上的傳輸;不同的物理網絡具有電氣特性,網絡驅動程序隱藏實現細節,為上層協議提供一致接口
物理層:所傳數據單位是比特(bit)。物理層要考慮用多大的電壓代表1 或 0 ,以及接受方如何識別發送方所發送的比特。
各網絡層對應的工作設備:
物理層:中繼器、集線器
數據鏈路層:網橋或交換機
網絡層中繼系統:路由器
網絡層以上的中繼系統:網關