[網際網路] 乙太網路封包格式(MAC Frame Format) - 菜園角耕耘 ...

文章推薦指數: 80 %
投票人數:10人

Ethernet (802.3 MAC frame format) 在網路傳輸資料是透過所謂的封包來傳送,封包內包含了目的及來源的MAC位址、IP和Port,才能夠讓資料正確的傳送到 ... 標籤 程式語言 Linux Itinerary Android Cryptography Software Exam OpenSSL Internet Peregrinate BookReview Miscellaneous OpenWrt AppStore Gourmet UIUC Applyforadmission Charity Court LeetCode DeepLearning Languages Swift ZigBee 2013/12/09 [網際網路]乙太網路封包格式(MACFrameFormat) Ethernet(802.3MACframeformat) 在網路傳輸資料是透過所謂的封包來傳送,封包內包含了目的及來源的MAC位址、IP和Port,才能夠讓資料正確的傳送到目的地。

不過整個電腦的網路是利用各種網路拓樸連結在一起,有時候封包間會發生碰撞的問題,可以想像成在單行道上,兩台車都要通過,就會造成堵塞的現象。

因此透過CSMA/CD(CarrierSenseMultipleAccesswithCollision,IEEE802.3)的設計,訂定出了網路的封包大小最小為64bytes;最大為1518bytes,來避免封包碰撞的現象。

以TCP/IP封包為例子,扣掉MAC位址及一些辨識碼[6(DA)+6(SA)+2(Ethertype)+4(FCS)=18bytes],因此IP封包的大小為46~1500bytes,所以也常常會看到人家說網路的MTU為1500bytes,就是這麼來的。

1.EthernetII封包(Frame) Preamble(7) SFD(1) DA(6) SA(6) Ether type(2) Payload PAD FCS(4) Preamble:一連串的1010…10,用來同步 SFD(startofframedelimiter):為10101011,用來表示經同步之後,資料的起始 DA(DestinationAddress):目標的MAC位址,MAC為6bytes的硬體碼,從00:00:00:00:00:00到FF:FF:FF:FF:FF:FF,前3碼為製造廠商碼,後3碼為廠商自訂的流水號。

SA(SourceAddress):來源的MAC位址。

Ethertype:長度或者類別,IP封包為0x0800;ARP封包為0x0806。

Payload:MAC封包所要傳送的資料內容,也就是IP封包或者ARP封包等等,如底下第2點所介紹。

PAD(Padding):Ethernet封包長度介於46~1500bytes之間,因此假設IP封包長度沒有符合就必須做補滿的動作。

FCS(Framechecksequence,CRC32):Checksum,用來確認傳送資料是否有錯誤。

2.IP封包(Datagram) Version(4) IHL(4) Type ofService(8) Total Length(16) Identification(16) Flag(3) Fragment offset(13) Time toLive(8) Protocol(8) Header Checksum(16) Source Address(32) Destination Address(32) Options Padding Data IP封包格式的內容很多,簡單挑幾個重要的來介紹 Version: IPv4(4)orIPv6(6)。

Identification:IP封包最大可達65535Bytes,為了能夠放到MACframe裡面,所以IP封包會分割,然後到了目的地電腦之後,再利用Identification來重組。

Fragmentoffset:被切割的IP封包在原本封包裡面的offset,用來重組。

TimetoLive:為了避免無用的封包佔用網路資源,因此設計了一個TTL值,預設通常都是128or64,此參數的意義是封包每經過一個網路設備,TTL值就會減1,直到TTL值為0,封包就會被discard,才不會造成找不到目的地的IP封包會一直在網路上傳輸,佔用了網路的資源。

Protocol:常用的為TCP(0x06)或者UDP(0x17)封包協定。

HeaderChecksum:用來確認傳輸資料的正確與否。

SourceAddress:來源IP位址。

DestinationAddress:目的IP位址。

Data:TCPorUDP封包的內容。

3.TCP封包(Segment) Source Port(16) Destination Port(16) Sequence Number(32) Acknowledgment Number(32) Data Offset(4) Reserved(6) Flag(6) Window(16) Checksum(16) Urgent Pointer(16) Options Padding Data TCP為Layer3(NetworkLayer)的內容,主要包含了來源及目的的Port。

SourcePort:來源位址所使用的Port。

DestinationPort:目的位址所使用的Port。

SequenceNumber,AcknowledgmentNumber:要建立TCP連線為一個三向交握機制,為了確保兩者之間連線溝通的同步,就用這兩個參數來記錄。

簡單來說SequenceNumber為已送出的data量;而AcknowledgmentNumber為以接收的data量。

假設A與B之間建立TCP連線,一開始A會送(SEQA=0,ACKA=0)的封包給B,請求與B建立連線,然後B收到之後會回覆一個(SEQB=0,ACKB=1)給A,確認A可以連線,因為已經收到一個封包資訊,所以ACK為1,A接收到之後最後會在回覆一個確認封包(SEQA=1,ACKA=1)給B,確認建立TCP連線,這也就是三向交握的機制。

這兩個參數的設計,可以確認A會在確認B送過來的封包之中的(SEQB/ACKB)得知B是否有正確收到上一個傳送過去的封包,然後才會再送下一個封包。

相較於UDP的設計,TCP可以確保每次封包都會正確傳送到目的地,是一個可靠的傳輸,但相對的缺乏效率。

Window:TCP會確保封包是否正確送達目的地,不過每次都送出等待目的的回覆確認的話,會造成太多時間的在等待上,因此設計了Window參數,用來告訴對方一次可以接受的視窗大小,讓對方一次送N個TCP封包,然後再回覆確認,,若有沒收到的要求對方再重傳,確認N個封包都收到之後,再送下一個N個封包,如此可以增加傳送的效率。

Checksum:錯誤檢查碼,確認資料傳送的正確性。

底下用WireShark軟體抓取一個TCP/IP封包為例子 MAC表頭的部分,目的及來源的MAC位址。

IPv4封包的內容,包含了目的及來源的IP位址,Protocol為TCP(0x06)。

TCP封包的內容,包含了來源及目的位址所使用的Portnumber,SEQ/ACKnumber。

最後就是資料內容。

根據OSI七層參考模型,資料是從傳輸層(TPC/UDP,Port)→網路層(IPaddress)→資料鏈結層(MAC)→實體層(Binary)來傳送,由上而下包裝segment(TCP/UDP,Port)→datagram(IPaddress)→frame(MAC),最後實體層用1010的二進制碼傳送出去。

張貼者: BrunoChen 發表於 12/09/201311:16:00下午 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest 標籤: Internet 1則留言: Unknown30/6/2112:05少數清晰的整理,很厲害回覆刪除回覆回覆新增留言載入更多… 較新的文章 較舊的文章 首頁 訂閱: 張貼留言(Atom) 熱門文章 [Wi-Fi]IEEE802.11a/b/g/n/ac有什麼差別? 在市面上的行動通訊產品,常常會看到IEEE802.11a/b/g/n或者IEEE802.11ac的規格,但這幾種規格到底有什麼差異呢?Wi-Fi使用的radiofrequency頻段為2.4GHz或者5GHz,簡單整理成下表:ProtocolF... [網際網路]乙太網路封包格式(MACFrameFormat) Ethernet(802.3MACframeformat)在網路傳輸資料是透過所謂的封包來傳送,封包內包含了目的及來源的MAC位址、IP和Port,才能夠讓資料正確的傳送到目的地。

不過整個電腦的網路是利用各種網路拓樸連結在一起,有時候封包間會發生碰撞的問題,可以想像... [OpenVPNGUI]Server及Client設定 OpenVPNGUI是一套簡單好操作的設定軟體,來讓電腦可以透過虛擬的VPN網域來上網。

對於常出差的朋友們來說,能夠利用VPN來上一些被擋掉的網站,也是挺方便的!OpenVPN的下載網址注意下載的時候要注意電腦是32位元還是64位元的系統,如果是64位元建議到以下網站... [VirtualBox]Samba下Ubuntu與Win7共享資料夾設定,利用host-only網路 使用Samba設置Ubuntu有多種方式,像是GuestOS利用橋接方式與HostOS連結,搭配指定同網段IP的方式來做,但這樣的方式會讓所有區網內的使用者都可以連上GuestOS。

只是想在GuestOS上寫寫code應該不用昭告天下吧!所以為了達到讓Guest... [JAVA]Socket網路server/client文字傳輸程式 想要練習對程式語言的各種應用熟悉程度,像是檔案I/O、執行緒、網路Socket還有程式介面,最快速的方式就是寫一個類似MSN的文字傳輸程式。

既可以綜合練習到以上的部分,還可以藉由撰寫的過程中,更加了解程式語言。

JAVA也不例外,物件程式導向的程式語言,筆者對此一直還懵懵懂懂... [Linux]fork()的使用介紹 整個作業系統(OperatingSystem,OS)是為了分配有限的硬體資源給Program使用,然而OS也視為一個Program,放進CPU中執行,為了讓OSKernel辨識每個Process,就會有所謂的行程辨識元(ProcessIdentifier,PID),其中... [Android]用WifiManager來getwifi的SSID,powerlevel和所使用的channel基本資訊 ***2017/01/06更新***請參考[Android]WifiManagerforAndroidMorlater******在行動裝置上最常用到的莫過於是網路了,其中因為Wi-Fi在很多政府機關、公共場所都是免費可使用的,因此Wi-Fi應該算得上... 網誌文章 ►  2022 (4) ►  三月 (3) ►  二月 (1) ►  2021 (3) ►  六月 (2) ►  五月 (1) ►  2019 (4) ►  七月 (1) ►  五月 (2) ►  二月 (1) ►  2018 (15) ►  八月 (1) ►  七月 (1) ►  五月 (10) ►  四月 (1) ►  三月 (1) ►  一月 (1) ►  2017 (45) ►  十一月 (9) ►  十月 (5) ►  九月 (1) ►  八月 (1) ►  七月 (1) ►  五月 (3) ►  四月 (4) ►  三月 (7) ►  二月 (5) ►  一月 (9) ►  2016 (8) ►  十二月 (4) ►  三月 (4) ►  2015 (7) ►  十月 (1) ►  九月 (2) ►  四月 (4) ►  2014 (25) ►  十二月 (3) ►  十一月 (1) ►  八月 (3) ►  七月 (2) ►  六月 (1) ►  五月 (3) ►  四月 (2) ►  三月 (4) ►  二月 (3) ►  一月 (3) ▼  2013 (29) ▼  十二月 (6) [Java]WebServer撰寫 [Android]BundleError:java.lang.NullPointerExcep... [網際網路]乙太網路封包格式(MACFrameFormat) [Linux]常用指令:chmod [Linux]常用指令:grep [Linux]常用指令:find ►  十一月 (14) ►  十月 (9) 搜尋此網誌 Translate 連結 嘗鮮元-記錄生活點滴 總網頁瀏覽量 BloggerAds



請為這篇文章評分?