• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            山寨:不是最好的,是最適合我們的!歡迎體驗(yàn)山寨 中文版MSDN

            Blog @ Blog

            當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見。 -- 聶魯達(dá)

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            BBS

            Blog

            Web

            最新評論

            mac包,ip包,tcp包 格式說明[轉(zhuǎn)]

            乙太網(wǎng)路的 MAC 訊框
            圖三、乙太網(wǎng)路的 MAC 訊框
            在這個(gè) MAC 當(dāng)中,最重要的就是那個(gè) 6 Bytes 的目的與來源位址了! 事實(shí)上,在所有的乙太網(wǎng)路卡當(dāng)中都有一個(gè)獨(dú)一無二的網(wǎng)路卡卡號(hào), 那就是上頭的『目的與來源位址』,這個(gè)位址是硬體位址( hardware address ), 共有 6 bytes ,分別由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 這 6 bytes 當(dāng)中,前 3bytes 為廠商的代碼,後 3bytes 則是該廠商自行設(shè)定的裝置碼了。 在 Linux 當(dāng)中,你可以使用 ifconfig 這個(gè)指令來查閱你的網(wǎng)路卡卡號(hào)喔! 不過,由於 MAC 主要是與網(wǎng)路卡卡號(hào)有關(guān),所以我們也常常將 MAC 作為網(wǎng)路卡卡號(hào)的代稱。 特別注意,在這個(gè) MAC 的傳送中,他僅在區(qū)域網(wǎng)路內(nèi)生效, 如果跨過不同的網(wǎng)域 (這個(gè)後面 IP 的部分時(shí)會(huì)介紹),那麼來源與目的的位址就會(huì)跟著改變了。 這是因?yàn)樽兂刹煌W(wǎng)路卡之間的交流了嘛!所以卡號(hào)當(dāng)然不同了!如下所示:

            在不同主機(jī)間持續(xù)傳送相同資料
            圖四、在不同主機(jī)間持續(xù)傳送相同資料的 MAC 訊框變化

            例如上面的圖示,我的資料要由電腦 A 通過 B 後才送達(dá) C ,而 B 電腦有兩塊網(wǎng)路卡, 其中 MAC-2 與 A 電腦的 MAC-1 互通,至於 MAC-3 則與 C 電腦的 MAC-4 互通。 但是 MAC-1 不能與 MAC-3 與 MAC-4 互通,為啥?因?yàn)?MAC-1 這塊網(wǎng)路卡並沒有與 MAC-3 及 MAC-4 使用同樣的 switch/hub 相接嘛!所以,資料的流通會(huì)變成:
            1. 先由 MAC-1 傳送到 MAC-2 ,此時(shí)來源是 MAC-1 而目的地是 MAC-2;
            2. B 電腦接收後,察看該訊框,發(fā)現(xiàn)目標(biāo)其實(shí)是 C 電腦,而為了與 C 電腦溝通, 所以他會(huì)將訊框內(nèi)的來源 MAC 改為 MAC-3 ,而目的改為 MAC-4 ,如此就可以直接傳送到 C 電腦了。
            也就是說,只要透過 B (就是路由器) 才將封包送到另一個(gè)網(wǎng)域 (IP 部分會(huì)講) 去的時(shí)候, 那麼訊框內(nèi)的硬體位址就會(huì)被改變,然後才能夠在同一個(gè)網(wǎng)域裡面直接進(jìn)行 frame 的流通啊!
            MAC包大小:舊為1900bytes,大為9000bytes
            IP 封包的表頭
            現(xiàn)在我們知道 IP 這個(gè)資料封包 (packet) 是需要放置在 MAC 訊框裡面的,所以當(dāng)然不能比 MAC 所能容許的最大資料量還大!但是 IP 封包其實(shí)可以到 65535 bytes 那麼大的吶! 那麼 IP 封包除了資料之外,他的表頭資料 (head) 是長怎樣呢? 在圖三的 MAC 訊框表頭裡面最重要的莫過於那個(gè)網(wǎng)路卡硬體位址, 那麼在 IP 表頭裡面當(dāng)然就以來源與目標(biāo)的 IP 位址為最重要囉! 除此之外, IP 表頭裡面還含有哪些重要資料呢?如底下所示:(下圖第一行為每個(gè)欄位的 bit 數(shù))

            4 bits 4 bits 8 bits 3 bits 13 bits
            Version IHL Type of Service Total Length
            Identification Flags Fragmentation Offset
            Time To Live Protocol Header Checksum
            Source Address
            Destination Address
            Options Padding
            Data
            圖八、IP 封包的表頭資料

            在上面的圖示中有個(gè)地方要注意,那就是『每一行所佔(zhàn)用的位元數(shù)為 32 bits』, 也就是說, IP 封包的表頭資料是 32 bits 的倍數(shù)喔!那各個(gè)表頭的內(nèi)容分別介紹如下:
            • Version(版本)
              宣告這個(gè) IP 封包的版本,例如目前慣用的還是 IPv4 這個(gè)版本,在這裡宣告的。

            • IHL(Internet Header Length, IP表頭的長度)
              告知這個(gè) IP 封包的表頭長度,單位為位元組(bytes)。 此 IHL 長度的範(fàn)圍為 5~15。

            • Type of Service(服務(wù)類型)
              這個(gè)項(xiàng)目的內(nèi)容為『PPPDTRUU』,表示這個(gè) IP 封包的服務(wù)類型,主要分為:
              PPP:表示此 IP 封包的優(yōu)先度; D:若為 0 表示一般延遲(delay),若為 1 表示為低延遲;
              T:若為 0 表示為一般傳輸量 (throughput),若為 1 表示為高傳輸量;
              R:若為 0 表示為一般可靠度(reliability),若為 1 表示高可靠度。
              UU:保留尚未被使用。
              我們前面談到 gigabit 乙太網(wǎng)路時(shí)曾提到 Jumbo frame 對吧!可以提高 MTU, 由於 gigabit 乙太網(wǎng)路的種種相關(guān)規(guī)格可以讓這個(gè) IP 封包加速且降低延遲, 某些特殊的標(biāo)誌就是在這裡說明的。

            • Total Length(總長度)
              指這個(gè) IP 封包的總?cè)萘浚ū眍^與內(nèi)容 (Data) 部分。最大可達(dá) 65535 bytes。

            • Identification(辨別碼)
              我們前面提到 IP 袋子必須要放在 MAC 袋子當(dāng)中。不過,如果 IP 袋子太大的話, 就得先要將 IP 再重組成較小的袋子然後再放到 MAC 當(dāng)中。而當(dāng) IP 被重組時(shí), 每個(gè)來自同一筆資料的小 IP 就得要有個(gè)識(shí)別碼以告知接收端這些小 IP 其實(shí)是來自同一個(gè)封包才行。 也就是說,假如 IP 封包其實(shí)是 65536 那麼大 (前一個(gè) Total Length 有規(guī)定), 那麼這個(gè) IP 就得要再被分成更小的 IP 分段後才能塞進(jìn) MAC 訊框中。那麼每個(gè)小 IP 分段是否來自同一個(gè) IP 資料,呵呵!這裡就是那個(gè)識(shí)別碼啦!

            • Flags(特殊旗標(biāo))
              這個(gè)地方的內(nèi)容為『0DM』,其意義為:
              D:若為 0 表示可以分段,若為 1 表示不可分段
              M:若為 0 表示此 IP 為最後分段,若為 1 表示非最後分段。

            • Fragment Offset(分段偏移)
              表示目前這個(gè) IP 分段在原始的 IP 封包中所佔(zhàn)的位置。 就有點(diǎn)像是序號(hào)啦,有這個(gè)序號(hào)才能將所有的小 IP 分段組合成為原本的 IP 封包大小嘛! 透過 Total Length, Identification, Flags 以及這個(gè) Fragment Offset 就能夠?qū)⑿?IP 分段在收受端組合起來囉!

            • Time To Live(TTL, 存活時(shí)間)
              表示這個(gè) IP 封包的存活時(shí)間,範(fàn)圍為 0-255。當(dāng)這個(gè) IP 封包通過一個(gè)路由器時(shí), TTL 就會(huì)減一,當(dāng) TTL 為 0 時(shí),這個(gè)封包將會(huì)被直接丟棄。說實(shí)在的,要讓 IP 封包通過 255 個(gè)路由器,還挺難的~ ^_^

            • Protocol Number(協(xié)定代碼)
              由於網(wǎng)路上面的封包協(xié)定太多了,每個(gè)協(xié)定都是裝在 IP 當(dāng)中的, 所以 IP 當(dāng)然就得在表頭上面告知收受端,這個(gè) IP 內(nèi)含有的資料是什麼協(xié)定才行。 一般常見的網(wǎng)路協(xié)定如下所示:
              IP 內(nèi)的號(hào)碼 協(xié)定名稱(全名)
              1 ICMP (Internet Control Message Protocol)
              2 IGMP (Internet Group Management Protocol)
              3 GGP (Gateway-to-Gateway Protocol)
              4 IP (IP in IP encapsulation)
              6 TCP (Transmission Control Protocol)
              8 EGP (Exterior Gateway Protocol)
              17 UDP (User Datagram Protocol)
              當(dāng)然啦,我們比較常見到的還是那個(gè) TCP, UDP, ICMP 說!

            • Header Checksum(表頭檢查碼)
              用來檢查這個(gè) IP 表頭的錯(cuò)誤檢驗(yàn)之用。

            • Source Address
              還用講嗎?當(dāng)然是來源的 IP 位址,相關(guān)的 IP 我們之前提過囉!

            • Destination Address
              有來源還需要有目標(biāo)才能傳送,這裡就是目標(biāo)的 IP 位址。

            • Options (其他參數(shù))
              這個(gè)是額外的功能,提供包括安全處理機(jī)制、路由紀(jì)錄、時(shí)間戳記、 嚴(yán)格與寬鬆之來源路由等。

            • Padding(補(bǔ)齊項(xiàng)目)
              由於 Options 的內(nèi)容不一定有多大,但是我們知道 IP 每個(gè)資料都必須要是 32 bits, 所以,若 Options 的資料不足 32 bits 時(shí),則由 padding 主動(dòng)補(bǔ)齊。

            你只要知道 IP 表頭裡面還含有: TTL, Protocol, 來源 IP 與目標(biāo) IP 也就夠了! 而這個(gè) IP 表頭的來源與目標(biāo) IP ,以及那個(gè)判斷通過多少路由器的 TTL ,就能瞭解到這個(gè) IP 將被如何傳送到目的端吶。下一節(jié)我們將介紹一下那麼 IP 封包是如何被傳送到目的地?
            TCP 協(xié)定
            在前幾個(gè)小節(jié)內(nèi)談到的 IP 與路由的相關(guān)說明中,我們知道 IP 與路由僅能將資料封包傳送到正確的目標(biāo)而已, 但是這個(gè)目的地是否真的能夠收下來這個(gè)封包?那可就不一定了。要確認(rèn)該資料能否正確的被目的端所接收, 就必須要在資料封包上面多加一些參數(shù)來判斷才行。

            在前面的 OSI 七層協(xié)定當(dāng)中,在網(wǎng)路層的 IP 之上則是傳送層,而傳送層的資料打包成什麼? 最常見的就是 TCP 封包了。這個(gè) TCP 封包資料必須要能夠放到 IP 的資料袋當(dāng)中才行喔! 所以,我們可以將 MAC, IP 與 TCP 的封包資料這樣看:
            各封包之間的相關(guān)性
            圖十一、各封包之間的相關(guān)性

            所以說,IP 除了表頭之外的 Data 內(nèi)容其實(shí)就是 TCP 封包的表頭與內(nèi)容;而 MAC 的 Data 內(nèi)容, 就是一個(gè)完整的 IP 封包資料!這也是我們上頭提到的,最終還是得以 MAC 能夠支援的最大容許容量, 才能夠決定 IP 與 TCP 封包是否需要再進(jìn)行分段的工作。那麼既然 MAC 與 IP 都有表頭資料, 想當(dāng)然爾,TCP 也有表頭資料來記錄該封包的相關(guān)資訊囉??沒錯(cuò)啦~ TCP 封包的表頭是長這個(gè)樣子的:

            4 bits 6 bits 6 bits 8 bits 8 bits
            Source Port Destination Port
            Sequence Number
            Acknowledge Number
            Data
            Offset
            Reserved Code Window
            Ckecksum Urgent Pointer
            Options Padding
            Data
            圖十二、TCP 封包的表頭資料

            上圖就是一個(gè) TCP 封包的表頭資料,各個(gè)項(xiàng)目以 Source Port, Destination Port 及 Code 算是比較重要的項(xiàng)目,底下我們就分別來談一談各個(gè)表頭資料的內(nèi)容吧!
            • Source Port & Destination Port ( 來源埠口 & 目標(biāo)埠口 )
              什麼是埠口(port)?我們知道 IP 封包的傳送主要是藉由 IP 位址連接兩端, 但是到底這個(gè)連線的通道是連接到哪裡去呢?沒錯(cuò)!就是連接到 port 上頭啦! 舉例來說,鳥站 (http://linux.vbird.org) 有開放 WWW 伺服器, 這表示鳥站的主機(jī)必須要啟動(dòng)一個(gè)可以讓 client 端連接的端口,這個(gè)端口就是 port , 中文翻譯成為埠口。同樣的,用戶端想要連接到鳥哥的鳥站時(shí),就必須要在 client 主機(jī)上面啟動(dòng)一個(gè) port ,這樣這兩個(gè)主機(jī)才能夠利用這條『通道』來傳遞封包資料喔! 這個(gè)目標(biāo)與來源 port 的紀(jì)錄,可以說是 TCP 封包上最重要的參數(shù)了! 下個(gè)小單元我們還會(huì)繼續(xù)介紹。

            • Sequence Number ( 封包序號(hào) )
              由於 TCP 封包必須要帶入 IP 封包當(dāng)中,所以如果 TCP 資料太大時(shí)(大於 IP 封包的容許程度), 就得要進(jìn)行分段。這個(gè) Sequence Number 就是記錄每個(gè)封包的序號(hào), 可以讓收受端重新將 TCP 的資料組合起來。

            • Acknowledge Number ( 回應(yīng)序號(hào) )
              為了確認(rèn)主機(jī)端確實(shí)有收到我們 client 端所送出的封包資料,我們 client 端當(dāng)然希望能夠收到主機(jī)方面的回應(yīng),那就是這個(gè) Acknowledge Number 的用途了。 當(dāng) client 端收到這個(gè)確認(rèn)碼時(shí),就能夠確定之前傳遞的封包已經(jīng)被正確的收下了。

            • Data Offset (資料補(bǔ)償)
              在圖十二倒數(shù)第二行有個(gè) Options 欄位對吧!那個(gè) Options 的欄位長度是非固定的, 而為了要確認(rèn)整個(gè) TCP 封包的大小,就需要這個(gè)標(biāo)誌來說明整個(gè)封包區(qū)段的起始位置。

            • Reserved (保留)
              未使用的保留欄位。

            • Code (Control Flag, 控制標(biāo)誌碼)
              當(dāng)我們在進(jìn)行網(wǎng)路連線的時(shí)候,必須要說明這個(gè)連線的狀態(tài),好讓接收端瞭解這個(gè)封包的主要?jiǎng)幼鳌?這可是一個(gè)非常重要的控制碼喔!這個(gè)欄位共有 6 個(gè) bits ,分別代表 6 個(gè)控制碼,若為 1 則為啟動(dòng)。分別說明如下:

              • URG(Urgent):若為 1 則代表該封包為緊急封包, 接收端應(yīng)該要緊急處理,且圖十二當(dāng)中的 Urgent Pointer 欄位也會(huì)被啟用。

              • ACK(Acknowledge):若為 1 代表這個(gè)封包為回應(yīng)封包, 則與上面提到的 Acknowledge Number 有關(guān)。

              • PSH(Push function):若為 1 時(shí), 代表要求對方立即傳送緩衝區(qū)內(nèi)的其他對應(yīng)封包,而無須等待緩衝區(qū)滿了才送。

              • RST(Reset):如果 RST 為 1 的時(shí)候, 表示連線會(huì)被馬上結(jié)束,而無需等待終止確認(rèn)手續(xù)。這也就是說,這是個(gè)強(qiáng)制結(jié)束的連線, 且發(fā)送端已斷線。

              • SYN(Synchronous):若為 1 , 表示發(fā)送端希望雙方建立同步處理,也就是要求建立連線。通常帶有 SYN 標(biāo)誌的封包表示『主動(dòng)』要連接到對方的意思。

              • FIN(Finish):若為 1 ,表示傳送結(jié)束, 所以通知對方資料傳畢,是否同意斷線,只是發(fā)送者還在等待對方的回應(yīng)而已。

              其中比較常見到的應(yīng)該是 ACK/SYN/FIN 等,這三個(gè)控制碼是務(wù)必要記下來的, 這樣未來在談到防火牆的時(shí)候,您才會(huì)比較清楚為啥每個(gè) TCP 封包都有所謂的『狀態(tài)』條件! 那就是因?yàn)檫B線方向的不同所致啊!底下我們會(huì)進(jìn)一步討論喔!

            • Window (滑動(dòng)視窗)
              主要是用來控制封包的流量的,可以告知對方目前本身有的緩衝器容量(Receive Buffer) 還可以接收封包。當(dāng) Window=0 時(shí),代表緩衝器已經(jīng)額滿,所以應(yīng)該要暫停傳輸資料。 Window 的單位是 byte。

            • Checksum(確認(rèn)檢查碼)
              當(dāng)資料要由發(fā)送端送出前,會(huì)進(jìn)行一個(gè)檢驗(yàn)的動(dòng)作,並將該動(dòng)作的檢驗(yàn)值標(biāo)注在這個(gè)欄位上; 而接收者收到這個(gè)封包之後,會(huì)再次的對封包進(jìn)行驗(yàn)證,並且比對原發(fā)送的 Checksum 值是否相符,如果相符就接受,若不符就會(huì)假設(shè)該封包已經(jīng)損毀,進(jìn)而要求對方重新發(fā)送此封包!

            • Urgent Pointer(緊急資料)
              這個(gè)欄位是在 Code 欄位內(nèi)的 URG = 1 時(shí)才會(huì)產(chǎn)生作用。可以告知緊急資料所在的位置。

            • Options(任意資料)
              目前此欄位僅應(yīng)用於表示接收端可以接收的最大資料區(qū)段容量,若此欄位不使用, 表示可以使用任意資料區(qū)段的大小。這個(gè)欄位較少使用。

            • Padding(補(bǔ)足欄位)
              如同 IP 封包需要有固定的 32bits 表頭一樣, Options 由於欄位為非固定, 所以也需要 Padding 欄位來加以補(bǔ)齊才行。同樣也是 32 bits 的整數(shù)。
            轉(zhuǎn)自:http://blog.chinaunix.net/u/28949/showart_251762.html

            posted on 2008-05-16 14:52 isabc 閱讀(920) 評論(0)  編輯 收藏 引用

            廣告信息(免費(fèi)廣告聯(lián)系)

            中文版MSDN:
            歡迎體驗(yàn)

            久久青青草原国产精品免费| 亚洲人AV永久一区二区三区久久 | 色诱久久久久综合网ywww | 国产精品久久久天天影视| 久久99国内精品自在现线| 青青草国产精品久久| 久久综合给合综合久久| 欧美午夜精品久久久久免费视| 99久久免费国产特黄| 久久福利片| 久久亚洲欧美日本精品| 久久99精品国产麻豆宅宅| av无码久久久久久不卡网站| 久久中文字幕视频、最近更新| 国产一久久香蕉国产线看观看 | 精品久久久久久中文字幕| 91久久九九无码成人网站| 国产A三级久久精品| 欧美久久亚洲精品| aaa级精品久久久国产片| 久久精品人妻中文系列| 国产精品亚洲美女久久久| 日本道色综合久久影院| 91精品国产综合久久婷婷| 亚洲国产综合久久天堂| 一本色道久久综合狠狠躁篇| 国产精品九九九久久九九| 久久久国产打桩机| 亚洲国产精品综合久久一线 | 久久青青草原亚洲av无码app| 无码任你躁久久久久久| 99久久婷婷国产一区二区| 久久久av波多野一区二区| 狠狠色丁香婷婷久久综合五月 | 青青草原综合久久| 亚洲精品无码久久一线| 国产精品99久久久精品无码| 国色天香久久久久久久小说 | 精品久久久久久| 久久青青草原国产精品免费| 国产一久久香蕉国产线看观看|