TCP/IP協(xié)議棧與數(shù)據(jù)包封裝圖文教程

除了私有IP地址之外,還有幾種特殊的IP地址。127.*的IP地址用于本機(jī)環(huán)回(loop back)測試,通常是127.0.0.1。loopback是系統(tǒng)中一種特殊的網(wǎng)絡(luò)設(shè)備,如果發(fā)送數(shù)據(jù)包的目的地址是環(huán)回地址,或者與本機(jī)其它網(wǎng)絡(luò)設(shè)備的IP地址相同,則數(shù)據(jù)包不會發(fā)送到網(wǎng)絡(luò)介質(zhì)上,而是通過環(huán)回設(shè)備再發(fā)回給上層協(xié)議和應(yīng)用程序,主要用于測試。如下圖所示(該圖出自[TCPIP])。
36.10. loopback設(shè)備
還有一些不能用作主機(jī)IP地址的特殊地址:
目的地址為255.255.255.255,表示本網(wǎng)絡(luò)內(nèi)部廣播,路由器不轉(zhuǎn)發(fā)這樣的廣播數(shù)據(jù)包。
主機(jī)號全為0的地址只表示網(wǎng)絡(luò)而不能表示某個主機(jī),如192.168.10.0(假設(shè)子網(wǎng)掩碼為255.255.255.0)。
目的地址的主機(jī)號為全1,表示廣播至某個網(wǎng)絡(luò)的所有主機(jī),例如目的地址192.168.10.255表示廣播至192.168.10.0網(wǎng)絡(luò)(假設(shè)子網(wǎng)掩碼為255.255.255.0)。
下面介紹路由的過程,首先正式定義幾個名詞:
路由(名詞)
路由(動詞)
路由節(jié)點(diǎn)
接口
路由表
路由條目
缺省路由條目
數(shù)據(jù)包從源地址到目的地址所經(jīng)過的路徑,由一系列路由節(jié)點(diǎn)組成。
某個路由節(jié)點(diǎn)為數(shù)據(jù)報(bào)選擇投遞方向的選路過程。
一個具有路由能力的主機(jī)或路由器,它維護(hù)一張路由表,通過查詢路由表來決定向哪個接口發(fā)送數(shù)據(jù)包。
路由節(jié)點(diǎn)與某個網(wǎng)絡(luò)相連的網(wǎng)卡接口。
由很多路由條目組成,每個條目都指明去往某個網(wǎng)絡(luò)的數(shù)據(jù)包應(yīng)該經(jīng)由哪個接口發(fā)送,其中最后一條是缺省路由條目。
路由表中的一行,每個條目主要由目的網(wǎng)絡(luò)地址、子網(wǎng)掩碼、下一跳地址、發(fā)送接口四部分組成,如果要發(fā)送的數(shù)據(jù)包的目的網(wǎng)絡(luò)地址匹配路由表中的某一行,就按規(guī)定的接口發(fā)送到下一跳地址。
路由表中的最后一行,主要由下一跳地址和發(fā)送接口兩部分組成,當(dāng)目的地址與路由表中其它行都不匹配時,就按缺省路由條目規(guī)定的接口發(fā)送到下一跳地址。
假設(shè)某主機(jī)上的網(wǎng)絡(luò)接口配置和路由表如下:
$ ifconfigeth0 Link encap:Ethernet HWaddr 00:0C:29:C2:8D:7E
inet addr:192.168.10.223 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:420 (420.0 b)
Interrupt:10 Base address:0x10a0
eth1 Link encap:Ethernet HWaddr 00:0C:29:C2:8D:88
inet addr:192.168.56.136 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:603 errors:0 dropped:0 overruns:0 frame:0
TX packets:110 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:55551 (54.2 Kb) TX bytes:7601 (7.4 Kb)
Interrupt:9 Base address:0x10c0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:37 errors:0 dropped:0 overruns:0 frame:0
TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3020 (2.9 Kb) TX bytes:3020 (2.9 Kb)
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 * 255.255.255.0 U 0 0 0 eth0
192.168.56.0 * 255.255.255.0 U 0 0 0 eth1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
這臺主機(jī)有兩個網(wǎng)絡(luò)接口,一個網(wǎng)絡(luò)接口連到192.168.10.0/24網(wǎng)絡(luò),另一個網(wǎng)絡(luò)接口連到192.168.56.0/24網(wǎng)絡(luò)。路由表的Destination是目的網(wǎng)絡(luò)地址,Genmask是子網(wǎng)掩碼,Gateway是下一跳地址,Iface是發(fā)送接口,F(xiàn)lags中的U標(biāo)志表示此條目有效(可以禁用某些條目),G標(biāo)志表示此條目的下一跳地址是某個路由器的地址,沒有G標(biāo)志的條目表示目的網(wǎng)絡(luò)地址是與本機(jī)接口直接相連的網(wǎng)絡(luò),不必經(jīng)路由器轉(zhuǎn)發(fā),因此下一跳地址處記為*號。
如果要發(fā)送的數(shù)據(jù)包的目的地址是192.168.56.3,跟第一行的子網(wǎng)掩碼做與運(yùn)算得到192.168.56.0,與第一行的目的網(wǎng)絡(luò)地址不符,再跟第二行的子網(wǎng)掩碼做與運(yùn)算得到192.168.56.0,正是第二行的目的網(wǎng)絡(luò)地址,因此從eth1接口發(fā)送出去,由于192.168.56.0/24正是與eth1接口直接相連的網(wǎng)絡(luò),因此可以直接發(fā)到目的主機(jī),不需要經(jīng)路由器轉(zhuǎn)發(fā)。
如果要發(fā)送的數(shù)據(jù)包的目的地址是202.10.1.2,跟前三行路由表?xiàng)l目都不匹配,那么就要按缺省路由條目,從eth0接口發(fā)出去,首先發(fā)往192.168.10.1路由器,再讓路由器根據(jù)它的路由表決定下一跳地址。
6. UDP段格式
下圖是UDP的段格式(該圖出自[TCPIP])。
36.11. UDP段格式
下面分析一幀基于UDP的TFTP協(xié)議幀。
以太網(wǎng)首部
0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00IP首部
0000: 45 00
0010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a8
0020: 00 01
UDP首部
0020: 05 d4 00 45 00 3f ac 40TFTP協(xié)議
0020: 00 01 ‘c”:”\”q’
0030: ‘w”e”r”q”.”q”w”e’00
‘n”e”t”a’’s”c”i’
0040: ‘i’00 ‘b”l”k’’s”i”z”e’00 ‘5”1”2′00 ‘t”i’
0050: ‘m”e”o”u”t’00 ‘1”0′00 ‘t’’s”i”z”e’00 ‘0′
0060: 00
以太網(wǎng)首部:源MAC地址是00:05:5d:61:58:a8,目的MAC地址是00:05:5d:67:d0:b1,上層協(xié)議類型0×0800表示IP。
IP首部:每一個字節(jié)0×45包含4位版本號和4位首部長度,版本號為4,即IPv4,首部長度為5,說明IP首部不帶有選項(xiàng)字段。服務(wù)類型為0,沒有使用服務(wù)。16位總長度字段(包括IP首部和IP層payload的長度)為0×0053,即83字節(jié),加上以太網(wǎng)首部14字節(jié)可知整個幀長度是97字節(jié)。IP報(bào)標(biāo)識是0×9325,標(biāo)志字段和片偏移字段設(shè)置為0×0000,就是DF=0允許分片,MF=0此數(shù)據(jù)報(bào)沒有更多分片,沒有分片偏移。TTL是0×80,也就是128。上層協(xié)議0×11表示UDP協(xié)議。IP首部校驗(yàn)和為0×25ec,源主機(jī)IP是c0 a8 00 37(192.168.0.55),目的主機(jī)IP是c0 a8 00 01(192.168.0.1)。
UDP首部:源端口號0×05d4(1492)是客戶端的端口號,目的端口號0×0045(69)是TFTP服務(wù)的well-known端口號。UDP報(bào)長度為0×003f,即63字節(jié),包括UDP首部和UDP層payload的長度。UDP首部和UDP層payload的校驗(yàn)和為0xac40。
相關(guān)文章
- 本文將詳細(xì)介紹TCP為什么需要進(jìn)行三次握手,需要深入了解的朋友可以參考下2012-11-19
- 有internet協(xié)議版本(TCP/IPv4)及internet協(xié)議版本(TCP/IPv6),這些稱之為傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個工業(yè)標(biāo)準(zhǔn)的協(xié)議集,它是為廣域網(wǎng)(WAN)設(shè)計(jì)的2013-06-04
- 這篇文章主要為大家介紹了什么是tcp?tcp協(xié)議的基礎(chǔ)知識有哪些?與udp的區(qū)別在哪里?以下將詳細(xì)介紹tcp的基礎(chǔ)知識,需要的朋友可以參考下2014-09-16
TCP協(xié)議的一些認(rèn)識及實(shí)踐知識簡介
本文來探討一下TCP協(xié)議方面的一些認(rèn)識及實(shí)踐2012-10-25- 本文詳細(xì)來探討TCP建立拆除連接的知識2012-10-25
- 這篇文章主要為大家介紹了如何解決TCP窗口大小的調(diào)節(jié)與擁塞控制的辦法,有圖有步驟,很詳細(xì),需要的朋友可以參考下2014-09-17
- 這篇文章主要介紹了圖解TCP通信三次握手和四次分手,對正在學(xué)習(xí)TPC通信的同學(xué)會有些幫助,需要的朋友可以參考下2014-09-24
- 最常見的是TCP和UDP端口,這是用來在互聯(lián)網(wǎng)上的計(jì)算機(jī)之間的數(shù)據(jù)交換,3688/udp端口使用服務(wù)類型簡單的推- S- S簡單的推協(xié)議,基礎(chǔ)概念不是很了解的朋友可以參考下本文2013-11-20
網(wǎng)絡(luò)協(xié)議 TCP三次握手與四次斷開的詳細(xì)觀察
這篇文章主要為大家介紹了網(wǎng)絡(luò)協(xié)議之tcp協(xié)議,TCP三次握手與四次斷開是怎么的一種情況呢,下面我們來看看觀察TCP三次握手與四次斷開,需要的朋友可以參考下2015-04-29- 這篇文章主要介紹了圖解TCP/IP協(xié)議,幫助大家輕松學(xué)會TCP/IP協(xié)議,需要的朋友可以參考下2015-12-16