[網際網路] 乙太網路封包格式(MAC Frame Format) - 菜園角耕耘 ...
文章推薦指數: 80 %
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
延伸文章資訊
- 1IPv4 - iT 邦幫忙
當一個大封包在經過一些傳輸單位(MTU)較小的路徑時,會被切割成碎片(fragment) 再進行傳送(這個切割和傳送層的打包有所不同,它是由網路層決定的)。由於網路情況或其它 ...
- 2[網際網路] 乙太網路封包格式(MAC Frame Format) - 菜園角耕耘 ...
Ethernet (802.3 MAC frame format) 在網路傳輸資料是透過所謂的封包來傳送,封包內包含了目的及來源的MAC位址、IP和Port,才能夠讓資料正確的傳送到 ...
- 3實驗2 乙太網路協定分析
說明如下:『乙太網路(Ethernet)是一種電腦區 ... 至於網路系統中要如何決定採用何種框架格式,並非 ... 讓封包解析的工作方便些,例如只要解析通訊協定Type為.
- 4Ethernet 封包格式與長度
最短封包64 octets,低於此長度的封包稱為runt frame。 ... 常見的Ethernet 封包格式是Ethernet II,或稱為DIX (DEC, Intel, ... 查看網路版.
- 5[課業] IP表頭格式介紹 - 正Man's World - 痞客邦
前面所介紹的IP 封包格式﹐請花點時間研究一下﹐因為在日後的網路生涯中﹐許多概念都要求設計者非常了解IP 和TCP 封包(標頭)的結構﹐例如﹕防火牆設定和 ...