TCP/IP詳解(六)---UDP:使用者資料報協議
什麼是UDP?
UDP(User Datagram Protocol),即使用者資料報協議。工作在OSI七層模型的傳輸層,不同於TCP提供可靠的端到端連線,UDP不可靠,無需在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,QQ訊息就是一種顯著的UDP報文。
UDP首部
UDP首部8個位元組
TCP首部20個位元組
IP首部20個位元組
IP分片
由於資料鏈路層限制了每次傳送資料幀的最大長度(MTU)。任何時候IP層接收到一份要傳送的IP資料報時,它要判斷向本地哪個介面傳送資料(選路),並查詢該介面獲得其MTU。IP把MTU與資料報長度進行比較,如果需要則進行分片。分片可以發 生在原始傳送端主機上,也可以發生在中間路由器上。
IP分片資料報的重組則發生在目的端的網路層。
使用UDP很容易導致IP分片。我們可以用sock程式來增加資料報的長度,直到分片發生。在一個乙太網上,資料幀的最大長度是1500位元組, 其中1472位元組留給資料,假定IP首部為20位元組,UDP首部為8位元組。我們分別以資料長度為 1471, 1472, 1473和1474位元組執行sock程式。最後兩次應該發生分片。
tcpdump:
前兩份UDP資料報(第1行和第2行)能裝入乙太網資料幀,沒有被分片。但是對應於寫1473位元組的IP資料報長度為1501,就必須進行分片(第3行和第4行)。同理,寫1474位元組產生的資料報長度為1502,它也需要進行分片(第5行和第6行)。
當IP資料報被分片後,tcpdump打印出其他的資訊。首先,frag 26304(第3行和第4 行)和frag 26313(第5行和第6行)指的是IP首部中標識欄位的值。
分片資訊中的下一個數字,即第3行中位於冒號和@號之間的1480,是除IP首部外的片長。 兩份資料報第一片的長度均為1480:UDP首部佔8位元組,使用者資料佔1472位元組(加上IP首部的20位元組分組長度正好為1500位元組)。第1份資料報的第2片(第4行)只包含1位元組資料—剩下的使用者資料。第2份資料報的第2片(第6行)包含剩下的2位元組使用者資料。
ICMP不可達差錯(需要分片)
發生ICMP不可達差錯的另一種情況是,當路由器收到一份需要分片的資料報,而在IP首部又設定了不分片(DF)的標誌位元。
最大UDP資料報長度
理論上,IP資料報的最大長度是65535位元組,這是由IP首部16位元總長度欄位所限制的。去除20位元組的IP首部和8個位元組的UDP首部,UDP資料報中使用者資料的最長長度為65507位元組。但是,大多數實現所提供的長度比這個最大值小。
兩個限制因素。第一,應用程式可能會受到其程式介面的限制。 socket API提供了一個可供應用程式呼叫的函式,以設定接收和傳送快取的長度。對於 UDP socket,這個緩衝區長度與應用程式可以讀寫的最大UDP資料報的長度直接相關。現在的大部分系統都預設提供了可讀寫大於8192位元組的UDP資料報(使用這個預設值是因為 8192是NFS讀寫使用者資料數的預設值)。
第二個限制來自於TCP / IP的核心實現。可能存在一些實現特性(或差錯),使IP資料報長度小於65535位元組。
相關推薦
TCP/IP詳解(六)---UDP:使用者資料報協議
什麼是UDP? UDP(User Datagram Protocol),即使用者資料報協議。工作在OSI七層模型的傳輸層,不同於TCP提供可靠的端到端連線,UDP不可靠,無需在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,QQ訊息就是一種顯著的U
TCP/IP詳解(二) --Internet地址結構
IP地址用於識別和定位整個Internet系統(單播地址)中裝置的網路介面。也用於識別多個介面(組播、廣播和任播地址)。 一、IP地址表示 IPv4 32位,點位法 0.0.0.0 二進位制00000000 00000000 00000000 00000000
TCP/IP詳解(四)---ICMP:Internet控制報文協議
基本概念 ICMP(Internet Control Message Protocol,網路控制報文協議),屬於OSI七層模型中的網路層,與IP/UDP同屬一層,可以將其看成IP、UDP協議功能的一個補充,因為以前說過,IP協議是不可靠的,其可靠性需藉
TCP/IP詳解(一) -- 基本概念
一、什麼是TCP/IP TCP/IP是一組協議的代名詞,包括許多別的協議,組成了TCP/IP協議簇。TCP/IP 採納了ARPANET參考模型,將協議分為4層。 二、 ARPANET參考模型 編號 名稱 描述/例子 . 7 應用層 實質上是Int
unittest詳解(六) 斷言
test 判斷 fail 測試用例 ttr order 失敗 true false 我們在執行測試用例時,怎麽來判斷這條用例是否通過呢?唯一的辦法就是拿實際結果和預期結果進行比較,如果一致用例就是通過的,否則用例就是失敗的。在python中這種比較的方法就叫做斷言,unit
CentOS 7.4 Tengine安裝配置詳解(六)
tengine 反向代理 十五、反向代理:1、演示環境:IP操作系統節點角色192.168.1.222CentOS 7.4node1Tengine服務器192.168.1.144CentOS 6.9node2Apache服務器2、node2安裝Apache服務,並創建測試頁:# yum -y inst
Zookeeper詳解(六):Zookeeper的應用場景
很好 手動 app1 服務器 ros 運行時 dns 再次 -- Zookeeper是一個發布/訂閱模式的分布式數據管理與協調框架,結合Watcher事件通知,可以搭建分布式框架中的很多核心功能。數據發布和訂閱也就是常用的配置管理,將數據信息發布到一個或者多個ZK節點上,應
PE文件格式詳解(六)
itme lordpe order 詳解 proc table mil create 實踐 0x00 前言 前面兩篇講到了輸出表的內容以及涉及如何在hexWorkShop中找到輸出表及輸入DLL,感覺有幾個地方還是沒有理解好,比如由數據目錄表DataDirectory[
PE檔案格式詳解(六)
0x00 前言 前面兩篇講到了輸出表的內容以及涉及如何在hexWorkShop中找到輸出表及輸入DLL,感覺有幾個地方還是沒有理解好,比如由資料目錄表DataDirectory[16]找到輸出表表後以為找到輸入DLL就完了,其實這一流程的最終功能是通過輸入DLL找到輸入DLL呼叫的函
安卓專案實戰之強大的網路請求框架okGo使用詳解(六):擴充套件專案okServer,更強大的下載上傳功能,支援斷點和多工管理
OkGo與OkDownload的區別就是,OkGo只是簡單的做一個下載功能,不具備斷點下載,暫停等操作,但是這在很多時候已經能滿足需要了。 而有些app需要有一個下載列表的功能,就像迅雷下載一樣,每個下載任務可以暫停,可以繼續,可以重新下載,可以有下載優先順序,這時候OkDownload就有
【linux】Valgrind工具集詳解(六):使用Valgrind gdbserver和GDB除錯程式
一、概述 在Valgrind下執行的程式不是由CPU直接執行的。相反,它執行在Valgrind提供的合成CPU上。這就是偵錯程式在Valgrind上執行時無法除錯程式的原因。 二、快速入門 在使用Memcheck工具時使用GDB除錯程式,啟動方式如下: 1、valgrind
docker容器技術之Dockerfile詳解(六)
上一篇文章的連線:docker容器技術之儲存卷(五) 目錄 一、前言 二、Dockerfile 2.1製作映象有兩種: 2.2 什麼是Dockerfile? 2.3 Dockerfile的語法格式 dockerfile做映象時的工作邏輯: .dockering
mybatis 詳解(六)------通過mapper介面載入對映檔案
目錄 1、定義 userMapper 介面 2、在全域性配置檔案 mybatis-configuration.xml 檔案中載入 UserMapper 介面(單個載入對映檔案) 3、編寫UserMapper.xml 檔案 4、測試 5、批量載入對映檔案 6、注意
mybatis 詳解(六)------通過mapper接口加載映射文件
實體類 數據庫 pda and pack trim .get 查詢語句 :after 目錄 1、定義 userMapper 接口 2、在全局配置文件 mybatis-configuration.xml 文件中加載 UserMapper 接口(單個加載映射文件) 3、編寫
TCP/IP實現(十一) UDP使用者資料報協議
一.已連線UDP 我們可以對UDP套接字呼叫connect進行連線,但與TCP連線的差別很大。UDP進行連線並不進行三次握手,核心只是核心只是檢查一些立即可知的錯誤(如一個顯然不可達的目的地),並將對端的IP地址和埠號記錄在PCB協議控制塊中,之後立即返
TCP/IP學習筆記(6)-UDP協議
UDP簡要介紹 UDP是傳輸層協議,和TCP協議處於一個分層中,但是與TCP協議不同,UDP協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。 UDP協議頭 UDP埠號 由於很多軟體需要用到UDP協議,所以UDP協議必須通過某個標誌用以區分不同的程式所需
TCP / IP學習筆記(6)-UDP協議
UDP檢驗和覆蓋UDP協議頭和資料,這和IP的檢驗和是不同的,IP協議的檢驗和只是覆蓋IP資料頭,並不覆蓋所有的資料.UDP和TCP都包含一個偽首部,這是為了計算檢驗和而設定的。偽首部甚至還包含IP地址這樣的IP協議裡面都有的資訊,目的是讓UDP兩次檢查資料是否已經正確到達目的地。如果傳送端沒有開啟檢驗和選項
Tkinter 元件詳解(六):LabelFrame
Tkinter 元件詳解之LabelFrame LabelFrame 元件是 Frame 元件的變體。預設情況下,LabelFrame 會在其子元件的周圍繪製一個邊框以及一個標題。 何時使用 LabelFrame 元件? 當你想要將一些相關的元件分為一組的時候,可
Kafka LogManager詳解(六)
文章目錄 一、LogManager結構 二、LogManager的建立 檢查日誌目錄 載入日誌目錄的檔案 三、啟動LogManager 4個定時任務 四、舊的日誌
SpringBoot開發詳解(六)-- 異常統一管理以及AOP的使用
AOP在SpringBoot中的使用 使用切面管理異常的原因: 今天的內容乾貨滿滿哦~並且是我自己在平時工作中的一些問題與解決途徑,對實際開發的作用很大,好,閒言少敘,讓我們開始吧~~ 我們先看一張錯誤資訊在APP中的展示圖: 是不是體驗很差