報文、報文段、分組、包、資料報、幀、資料流的概念區別
1.報文(message)
我們將位於應用層的資訊分組稱為報文。報文是網路中交換與傳輸的資料單元,也是網路傳輸的單元。報文包含了將要傳送的完整的資料資訊,其長短不需一致。報文在傳輸過程中會不斷地封裝成分組、包、幀來傳輸,封裝的方式就是新增一些控制資訊組成的首部,那些就是報文頭。
2.報文段(segment)
通常是指起始點和目的地都是傳輸層的資訊單元。
3.分組/包(packet)
分組是在網路中傳輸的二進位制格式的單元,為了提供通訊效能和可靠性,每個使用者傳送的資料會被分成多個更小的部分。在每個部分的前面加上一些必要的控制資訊組成的首部,有時也會加上尾部,就構成了一個分組。它的起始和目的地是網路層
4.資料報(datagram)
面向無連線的資料傳輸,其工作過程類似於報文交換。採用資料報方式傳輸時,被傳輸的分組稱為資料報。通常是指起始點和目的地都使用無連線網路服務的的網路層的資訊單元。
5.幀(frame)
幀是資料鏈路層的傳輸單元。它將上層傳入的資料新增一個頭部和尾部,組成了幀。它的起始點和目的點都是資料鏈路層。
6.資料單元(data unit)
指許多資訊單元。常用的資料單元有服務資料單元(SDU)、協議資料單元(PDU)。
SDU是在同一機器上的兩層之間傳送資訊。PDU是傳送機器上每層的資訊傳送到接收機器上的相應層(同等層間交流用的)。
應用層——訊息
傳輸層——資料段/報文段(segment) (注:TCP叫TCP報文段,UDP叫UDP資料報,也有人叫UDP段)
網路層——分組、資料包(packet)
鏈路層——幀(frame)
物理層——P-PDU(bit)
其實,segment,datagram,packet,frame是存在於同條記錄中的,是基於所在協議層不同而取了不同的名字。我們可以用一個形象的例子對資料包的概念加以說明:我們在郵局郵寄產品時,雖然產品本身帶有自己的包裝盒,但是在郵寄的時候只用產品原包裝盒來包裝顯然是不行的。必須把內裝產品的包裝盒放到一個郵局指定的專用紙箱裡,這樣才能夠郵寄。這裡,產品包裝盒相當於資料包,裡面放著的產品相當於可用的資料,而專用紙箱就相當於幀,且一個幀中通常只有一個數據包。
TCP資料流(TCP stream)
Wireshark中是這麼定義的:相同四元組(源地址,源埠,目的地址,目的埠)的包就為一條TCP流,即一條流有很多個包。
[IP address A, TCP port A, IP address B, TCP port B]
All the packets for the same tcp.stream value should have the same values for these fields (though the src/dest will be switched for A->B and B->A packets).
the stream index is an internal Wireshark mapping to: [IP address A, TCP port A, IP address B, TCP port B]
All the packets for the same tcp.stream value should have the same values for these fields (though the src/dest will be switched for A->B and B->A packets)
see the Statistics/Conversations/TCP tab in Wireshark to show a summary of these streams.
以下用Wireshark實際抓包說明一下:
一個包就是一行記錄,可看出是從No.1開始計數的。
點選Follow->TCP Stream可檢視該包所屬的流:
可看出wireshark中流是從0開始計數的,這個流序號沒什麼意義,只是為了唯一標識一條流(Stream indexes are Wireshark-internal. It just uses a number to uniquely identify a TCP stream.),該流有3個客戶端包,40個服務端包,最左邊的packet 2 表示滑鼠點選的這個包在全部包序列中的序號。
點選Statistics->Conversations
(注:我的ipv4地址是公網ip,所以做了馬賽克處理,ipv6是臨時ip就無所謂了。)
可看到:TCP流有24條,UDP流有26條。IPv4流有19條,IPv6流有11條,為什麼IPv4+IPv6流總數小於TCP+UDP流呢?
因為IP流沒有埠,只考慮相同二元組(源ip,目的ip):