如何做網(wǎng)站的基礎(chǔ)惠州優(yōu)化怎么做seo
一、TCP/IP五層模型
-
物理層(Physical Layer):物理層是最底層,負(fù)責(zé)傳輸比特流(bitstream)以及物理介質(zhì)的傳輸方式。它定義了如何在物理媒介上傳輸原始的比特流,例如通過電纜、光纖或無線傳輸?shù)取?/p>
-
數(shù)據(jù)鏈路層(Data Link Layer):數(shù)據(jù)鏈路層位于物理層之上,負(fù)責(zé)在直接相連的節(jié)點(diǎn)之間傳輸數(shù)據(jù)幀(Frame)。它將比特流組織成幀,并提供數(shù)據(jù)的可靠傳輸、差錯檢測和糾正等功能。常見的協(xié)議包括以太網(wǎng)(Ethernet)和Wi-Fi。
-
網(wǎng)絡(luò)層(Network Layer):網(wǎng)絡(luò)層處理分組(Packet)的傳輸和路由,負(fù)責(zé)將數(shù)據(jù)從源主機(jī)傳輸?shù)侥繕?biāo)主機(jī)。它定義了邏輯地址(如IP地址)和路由選擇算法,并通過Internet Protocol (IP) 進(jìn)行數(shù)據(jù)的分組、定址和轉(zhuǎn)發(fā)。
-
傳輸層(Transport Layer):傳輸層提供端到端的可靠數(shù)據(jù)傳輸服務(wù),負(fù)責(zé)將數(shù)據(jù)從發(fā)送方傳輸?shù)浇邮辗降亩丝?。它通過傳輸協(xié)議(如TCP和UDP)提供了連接管理、流量控制、差錯檢測和糾正等功能。
-
應(yīng)用層(Application Layer):應(yīng)用層是最高層,負(fù)責(zé)處理特定應(yīng)用程序之間的通信。它包括各種應(yīng)用協(xié)議,如HTTP、FTP、SMTP和DNS等,用于實(shí)現(xiàn)不同應(yīng)用程序之間的數(shù)據(jù)交換和通信。
OSI七層網(wǎng)絡(luò)模型
二、以太網(wǎng)
以太網(wǎng)是應(yīng)用最普遍的局域網(wǎng)技術(shù),取代了其他局域網(wǎng)技術(shù)如令牌環(huán)、FDDI和ARCNET。
以太網(wǎng)在局域網(wǎng)各種技術(shù)中占統(tǒng)治地位的原因:
- 造價低廉(以太網(wǎng)網(wǎng)卡不到100塊);
- 是應(yīng)用最廣泛的局域網(wǎng)技術(shù);
- 比令牌環(huán)網(wǎng)、ATM網(wǎng)便宜,簡單;
- 滿足網(wǎng)絡(luò)速率要求:10Mb/s~10Gb/s.
以太網(wǎng)的兩個標(biāo)準(zhǔn):
- DIX Ethernet V2 是世界上第一個局域網(wǎng)產(chǎn)品(以太網(wǎng))的規(guī)約。
- IEEE 802.3 是第一個 IEEE(電氣電子工程師學(xué)會) 的以太網(wǎng)標(biāo)準(zhǔn)。
DIX Ethernet V2 標(biāo)準(zhǔn)與 IEEE 的 802.3 標(biāo)準(zhǔn)只有很小的差別,因此可以將 802.3 局域網(wǎng)簡稱為“以太網(wǎng)”。
嚴(yán)格說來,“以太網(wǎng)”應(yīng)當(dāng)是指符合 DIX Ethernet V2 標(biāo)準(zhǔn)的局域網(wǎng) 。
為了通信的簡便,以太網(wǎng)提供無連接,不可靠的服務(wù)
- 無連接:發(fā)送和接收方之間無“握手過程”。
- 對發(fā)送的數(shù)據(jù)幀不進(jìn)行編號,也不要求對方發(fā)回確認(rèn)。差錯幀直接丟棄,差錯糾正由高層負(fù)責(zé)。
這樣做的理由是局域網(wǎng)信道的質(zhì)量很好,信道質(zhì)量產(chǎn)生差錯的概率很小。
也就說:
- 以太網(wǎng)只實(shí)現(xiàn)無差錯接收,不實(shí)現(xiàn)可靠傳輸。
- 以太網(wǎng)提供的服務(wù)是不可靠的交付,即盡最大努力的交付。
- 當(dāng)目的站收到有差錯的數(shù)據(jù)幀時就丟棄此幀,其他什么也不做。差錯的糾正由高層來決定。
- 如果高層發(fā)現(xiàn)丟失了一些數(shù)據(jù)而進(jìn)行重傳,但以太網(wǎng)并不知道這是一個重傳的幀,而是當(dāng)作一個新的數(shù)據(jù)幀來發(fā)送。
三、MAC地址
MAC地址(英語:Media Access Control Address),直譯為媒體存取控制位址,也稱為局域網(wǎng)地址(LAN Address),MAC位址,以太網(wǎng)地址(Ethernet Address)或物理地址(Physical Address),它是一個用來確認(rèn)網(wǎng)絡(luò)設(shè)備位置的位址。
MAC地址是網(wǎng)絡(luò)設(shè)備的唯一識別碼,用于在局域網(wǎng)中確定設(shè)備的身份,該地址全球范圍內(nèi)具有唯一性。
MAC地址的長度為48位,即6個字節(jié)。其中前3個字節(jié)是OUI(Organizationally Unique Identifier),由IEEE分配給不同的廠家,后3個字節(jié)由廠家自行分配。
MAC地址通常表示為12個16進(jìn)制數(shù),每2個數(shù)之間用冒號隔開,例如:09:2F:20:3A:5C:8D。
令牌環(huán)和以太網(wǎng)等 LAN 技術(shù)使用 MAC 地址作為其物理地址,但有些網(wǎng)絡(luò) (AppleTalk) 不使用 MAC 地址。
已經(jīng)有了IP地址,為什么還要有MAC地址呢?
IP地址描述的是整個數(shù)據(jù)傳送過程中的起點(diǎn)和終點(diǎn)。
MAC地址描述的是數(shù)據(jù)傳送過程中,每一跳(一個區(qū)間)的起點(diǎn)和終點(diǎn)。
具體在網(wǎng)絡(luò)中,IP地址就是目標(biāo)主機(jī),MAC地址就是兩個相連路由器,只有一跳一跳經(jīng)過多個路由器,數(shù)據(jù)才能被送到目標(biāo)主機(jī)。
單站地址,組地址,廣播地址
IEEE 規(guī)定地址字段的第一字節(jié)的最低位為 I/G 位。I/G 表示 Individual / Group。
- 當(dāng) I/G 位 = 0 時,地址字段表示一個單站地址。
- 當(dāng) I/G 位 = 1 時,表示組地址,用來進(jìn)行多播(以前曾譯為組播)。此時,IEEE 只分配地址字段前三個字節(jié)中的 23 位。
當(dāng) I/G 位分別為 0 和 1 時,一個地址塊可分別生成 223 個單個站地址和 223 個組地址。
- 所有 48 位都為 1 時,為廣播地址。只能作為目的地址使用。
全球管理與本地管理
IEEE 把地址字段第一字節(jié)的最低第 2 位規(guī)定為 G/L 位,表示 Global / Local。
當(dāng) G/L 位 = 0 時,是全球管理(保證在全球沒有相同的地址),廠商向 IEEE 購買的 OUI 都屬于全球管理。
當(dāng) G/L 位 = 1 時, 是本地管理,這時用戶可任意分配網(wǎng)絡(luò)上的地址。
四、以太網(wǎng)幀F(xiàn)rame
以太網(wǎng)協(xié)議工作在數(shù)據(jù)鏈路層,它用作數(shù)據(jù)傳輸?shù)母袷浇凶鯢rame, 以太網(wǎng)幀,也叫MAC幀。
4.1 以太網(wǎng)幀類型
目前共有4種類型的以太網(wǎng)幀格式:
-
Ethernet Ⅱ以太幀
即DIX 2.0,是Xerox與DEC、Intel在1982年制定的以太網(wǎng)標(biāo)準(zhǔn)幀格式,已成為事實(shí)上的以太網(wǎng)幀標(biāo)準(zhǔn)。 -
Novell Netware 802.3 Raw以太幀
Novell Netware 802.3 Raw幀是Novell在1983年公布的專用以太網(wǎng)標(biāo)準(zhǔn)幀格式,其對IEEE 802.3的數(shù)據(jù)字段進(jìn)行了專門分隔,以便傳輸NetWare類型的數(shù)據(jù)。 -
IEEE 802.3 LLC以太幀
這是1985年由IEEE正式發(fā)布的802.3標(biāo)準(zhǔn),由Ethernet V2發(fā)展而來。主要是加入了LLC控制字段所以又叫802.3 LLC。 -
IEEE 802.3 SNAP以太幀
這是1985年IEEE為了保證在802.2 LLC上支持更多的上層協(xié)議,同時更好地支持IP協(xié)議而發(fā)布的標(biāo)準(zhǔn)。 后來為解決Ethernet II與802.3的兼容問題推出了折中的SNAP格式。
總的來說,Ethernet II原本只是幾家公司合伙制定的標(biāo)準(zhǔn),802.3是IEEE發(fā)布的正式國際標(biāo)準(zhǔn),但由于歷史原因Ethernet II成了事實(shí)上大家都遵循的標(biāo)準(zhǔn)。
最初流行的Ethernet Ⅱ幀第三個字段為幀類型,也沒有定義幀長度字段。后來隨著IEEE 802.3幀的發(fā)布,為了允許一些使用以太I(xiàn)I版本的數(shù)據(jù)報和一些使用802.3封裝的最初版本的數(shù)據(jù)包能夠在同一個以太網(wǎng)段使用,以太類型值必須大于等于1536(0x0600)。這個值比802.3數(shù)據(jù)包的最大長度1500byte (0x05DC)要更大。因此如果這個字段的值大于等于1536,則這個幀是以太I(xiàn)I幀,而那個字段是類型字段。否則(小于1500而大于46字節(jié)),他是一個IEEE 802.3幀,而那個字段是長度字段。1500~1536(不包含)的數(shù)值未定義。
4.2 Ethernet II以太幀
Ethernet Ⅱ幀,也稱為Ethernet V2幀,是如今局域網(wǎng)里最常見的以太幀,是以太網(wǎng)事實(shí)標(biāo)準(zhǔn)。
Ethernet II也是目前使用最為廣泛的幀格式也在事實(shí)上成為以太網(wǎng)的幀標(biāo)準(zhǔn)。
- 源地址,6個字節(jié)。發(fā)出數(shù)據(jù)包設(shè)備的物理地址(MAC地址),長度是48位,是在網(wǎng)卡出廠時固化的,不可以修改。
- 目的地址,6個字節(jié)。接收數(shù)據(jù)包設(shè)備的物理地址。
- 幀協(xié)議類型,2個字節(jié)。該字段有三種值,也就是向上交付時要交付的協(xié)議類型:
- 0x0800 對應(yīng)IP
- 0x0806 對應(yīng)ARP
- ox0835 對應(yīng)RARP
- 有效載荷。有效載荷的大小是46~1500字節(jié)。
- CRC校驗(yàn)碼,4個字節(jié)。處于幀末尾,用來校驗(yàn)數(shù)據(jù)是否正確,和校驗(yàn)和是一樣的作用。
4.3 IEEE802.3幀
可以認(rèn)為Novell Netware 802.3 Raw以太幀、IEEE 802.3 LLC以太幀 、IEEE 802.3 SNAP以太幀都遵循以下的一個框架結(jié)構(gòu)。
-
Length字段。 定義了Data字段包含的字節(jié)數(shù);
-
邏輯鏈路控制LLC(Logical Link Control)
由目的服務(wù)訪問點(diǎn)DSAP(Destination Service Access Point)、源服務(wù)訪問點(diǎn)SSAP(Source Service Access Point)和Control字段組成; -
SNAP(Sub-network Access Protocol)由機(jī)構(gòu)代碼(Org Code)和類型(Type)字段組成。Org Code三個字節(jié)都為0。Type字段的含義與Ethernet_Ⅱ中的Type字段相同;
LLC和SNAP共占用了Data字段的8個字節(jié);
當(dāng)DSAP和SSAP都取特定值0xff時,802.3幀就變成Netware-Ethernet幀,用于承載Netware類型的幀;
當(dāng)DSAP和SSAP都取特定值0xaa時,802.3幀就變成Ethernet_SNAP幀,用于傳輸多種協(xié)議;
DSAP和SSAP其他的取值均為純IEEE802.3幀。
4.3.1 802.3 Raw以太幀
+-----------+-----------+-----------+----------+------------------+----------+| DMAC | SMAC | Length | 0xFFFF | Data | FCS || 6 Bytes | 6 Bytes | 2 Bytes | 2 Bytes | Variable length | 4 Bytes |+-----------+-----------+-----------+----------+------------------+----------+
字段 | 長度 | 含義 |
---|---|---|
DMAC | 6字節(jié) | 以太網(wǎng)幀的目的MAC地址,指明幀的接收者。 |
SMAC | 6字節(jié) | 以太網(wǎng)幀的源MAC地址,指明幀的發(fā)送者。 |
Length | 2字節(jié) | 指后續(xù)數(shù)據(jù)的字節(jié)長度,但不包括FCS字段。 |
Data | 44~1498字節(jié) | 數(shù)據(jù)字段,標(biāo)識幀的負(fù)載(可能包含填充位)。數(shù)據(jù)字段的最小長度必須為44字節(jié)以保證幀長至少為64字節(jié),這意味著傳輸1字節(jié)信息也必須使用44字節(jié)的數(shù)據(jù)字段。如果填入該字段的信息少于44字節(jié),該字段的其余部分也必須進(jìn)行填充。數(shù)據(jù)字段的最大長度為1498字節(jié)。以太幀的長度必須為整數(shù)字節(jié),因此幀的負(fù)載長度不足整數(shù)字節(jié),需插入填充字段以保證數(shù)據(jù)幀的長度為整數(shù)字節(jié)。 |
FCS | 4字節(jié) | 幀校驗(yàn)序列FCS(Frame Check Sequence)是為接收網(wǎng)卡提供判斷是否傳輸錯誤的一種方法,如果發(fā)現(xiàn)錯誤,丟棄此幀。FCS只是通用叫法,具體的FCS還可以細(xì)分多種校驗(yàn)方法。在以太幀中,FCS通常采用循環(huán)冗余碼校驗(yàn)CRC(Cyclical Redundancy Check)。 |
802.3 RAW使用Length字段代替了type,又從Data里挪了2個字節(jié)賦值成0xFFFF。前面說過802.3 RAW是Novel公司在IEEE還未正式推出802.3時,在其臨時版本上自己推出的一個版本。在802.3臨時版中使用Length字段代替了type字段,Novel公司沿用了這個設(shè)定,但后續(xù)802.3正式發(fā)布時又從Data中挪了3個字節(jié)用作DSAP、SSAP、Control字段(各一個字節(jié),下面會講到)。為了與正式版的802.3做兼容和區(qū)分,RAW就把DSAP和SSAP這兩個字段賦值成0xFFFF,同時Control字段還是劃回到Data里去。
4.3.2 IEEE 802.3 LLC以太幀
+-----------+-----------+-----------+----------+----------+----------+------------------+----------+
| DMAC | SMAC | Length | DSAP | SSAP | Ctrl | Data | FCS |
| 6 Bytes | 6 Bytes | 2 Bytes | 1 Bytes | 1 Bytes | 1 Bytes | Variable length | 4 Bytes |
+-----------+-----------+-----------+----------+----------+----------+------------------+----------+
字段 | 長度 | 含義 |
---|---|---|
DMAC | 6字節(jié) | 目的MAC地址,該字段標(biāo)識幀的接收者。 |
SMAC | 6字節(jié) | 源MAC地址,該字段標(biāo)識幀的發(fā)送者。 |
Length | 2字節(jié) | 指后續(xù)數(shù)據(jù)的字節(jié)長度,但不包括FCS字段。 |
DSAP | 1字節(jié) | 目的服務(wù)訪問點(diǎn),長度為1字節(jié),取值范圍是0x00~0xFF。 |
SSAP | 1字節(jié) | 源服務(wù)訪問點(diǎn),長度為1字節(jié),取值范圍是0x00~0xFF。 |
Ctrl | 1字節(jié) | 該字段值通常設(shè)為0x03,表示無連接服務(wù)的IEEE 802.2無編號數(shù)據(jù)格式。 |
Data | 43~1497字節(jié) | 數(shù)據(jù)字段,標(biāo)識幀的負(fù)載(可能包含填充位)。 |
FCS | 4字節(jié) | 幀校驗(yàn)序列FCS(Frame Check Sequence)是為接收網(wǎng)卡提供判斷是否傳輸錯誤的一種方法,如果發(fā)現(xiàn)錯誤,丟棄此幀。FCS只是通用叫法,具體的FCS還可以細(xì)分多種校驗(yàn)方法。在以太幀中,FCS通常采用循環(huán)冗余碼校驗(yàn)CRC(Cyclical Redundancy Check)。 |
4.3.3 IEEE 802.3 SNAP以太幀
+-----------+-----------+-----------+----------+----------+----------+---------+---------+------------------+----------+
| DMAC | SMAC | Length | DSAP | SSAP | Ctrl | OUI | Type | Data | FCS |
| 6 Bytes | 6 Bytes | 2 Bytes | 1 Bytes | 1 Bytes | 1 Bytes | 3 Bytes | 2 Bytes | Variable length | 4 Bytes |
+-----------+-----------+-----------+----------+----------+----------+---------+---------+------------------+----------+
字段 | 長度 | 含義 |
---|---|---|
DMAC | 6字節(jié) | 目的MAC地址,該字段標(biāo)識幀的接收者。 |
SMAC | 6字節(jié) | 源MAC地址,該字段標(biāo)識幀的發(fā)送者。 |
Length | 2字節(jié) | 指后續(xù)數(shù)據(jù)的字節(jié)長度,但不包括FCS字段。 |
DSAP | 1字節(jié) | 目的服務(wù)訪問點(diǎn),該值固定為0xAA。 |
SSAP | 1字節(jié) | 源服務(wù)訪問點(diǎn),該值固定為0xAA。 |
Ctrl | 1字節(jié) | 該字段值通常設(shè)為0x03,表示無連接服務(wù)的IEEE 802.2無編號數(shù)據(jù)格式。 |
SNAP-ID | 5字節(jié) | 由OUI和Type兩部分組成。 |
OUI | 3字節(jié) | 3字節(jié)的組織唯一標(biāo)識符(Organizationally Unique Identifier),其值通常等于MAC地址的前3字節(jié),即網(wǎng)絡(luò)適配器廠商代碼。 |
Type | 2字節(jié) | 標(biāo)識以太網(wǎng)幀所攜帶的上層數(shù)據(jù)類型。根據(jù)RFC1042標(biāo)準(zhǔn),OUI使用一個特殊的數(shù)值0x00-00-00,當(dāng)這個字段為0x00-00-00時,Type字段與Ethernet II封裝中的Type具有相同的含義。 |
Data | 38~1492字節(jié) | 數(shù)據(jù)字段,標(biāo)識幀的負(fù)載(可能包含填充位)。數(shù)據(jù)字段的最小長度必須為38字節(jié)以保證幀長至少為64字節(jié),這意味著傳輸1字節(jié)信息也必須使用38字節(jié)的數(shù)據(jù)字段。如果填入該字段的信息少于38字節(jié),該字段的其余部分也必須進(jìn)行填充。數(shù)據(jù)字段的最大長度為1492字節(jié)。以太幀的長度必須為整數(shù)字節(jié),因此幀的負(fù)載長度不足整數(shù)字節(jié),需插入填充字段以保證數(shù)據(jù)幀的長度為整數(shù)字節(jié)。 |
FCS | 4字節(jié) | 幀校驗(yàn)序列FCS(Frame Check Sequence)是為接收網(wǎng)卡提供判斷是否傳輸錯誤的一種方法,如果發(fā)現(xiàn)錯誤,丟棄此幀。FCS只是通用叫法,具體的FCS還可以細(xì)分多種校驗(yàn)方法。在以太幀中,FCS通常采用循環(huán)冗余碼校驗(yàn)CRC(Cyclical Redundancy Check)。 |
SNAP是為了將802.3 LLC與Ethernet II進(jìn)行兼容,兼容方式是保留Length、DSAP、SSAP、Control這4個字段,同時再從Data里挪5個字節(jié)用作SNAP字段。而SNAP字段又由2個部分組成,前3個字節(jié)是org code,其含義是組織代碼,其實(shí)就是MAC地址里前3個字節(jié),所以其實(shí)沒啥用。后2個字節(jié)是type與Ethernet II的type字段一模一樣。其實(shí)也是通過這個SNAP里的type字段與Ethernet II幀兼容。
為了與LLC幀進(jìn)行區(qū)別,DSAP、SSAP的值固定為0xAA,Control的值固定為0x03。
4.4 IEEE 802.1Q標(biāo)簽
IEEE 802.1Q標(biāo)準(zhǔn)對以太幀格式進(jìn)行了修改,在源MAC地址字段和協(xié)議類型字段之間加入4字節(jié)的802.1Q Tag。802.1Q Tag也稱為VLAN Tag,帶有VLAN Tag的以太幀稱為VLAN幀。
所有四種以太幀類型都可包含一個IEEE 802.1Q選項(xiàng)來確定它屬于哪個VLAN以及他的IEEE 802.1p優(yōu)先級(QoS)。這個封裝由IEEE 802.3ac定義并將幀大小從64字節(jié)擴(kuò)充到1522字節(jié)(注:不包含7個前導(dǎo)字節(jié)和1個字節(jié)的幀開始符以及12個幀間距字節(jié))。
+-----------+----------+--------+-----------+| TPID | PRI | CFI | VID || 2 Bytes | 3 Bits | 1 Bits | 12 Bits |+-----------+----------+--------+-----------+| || || || |
+-----------+-----------+--------------+---------------+------+-----------+----------+
| DMAC | SMAC | 802.1Q Tag | Length/Type | Data | FCS |
| 6 Bytes | 6 Bytes | 4 Bytes | 2 Bytes | Variable length | 4 Bytes |
+-----------+-----------+--------------+---------------+------+-----------+----------+
4字節(jié)的VLAN TAG 包含以下參數(shù):
- 2個字節(jié)的標(biāo)簽協(xié)議標(biāo)識:0x8100
- 2個字節(jié)的標(biāo)簽控制信息:
- 用戶優(yōu)先級:3 位,取值范圍0~7,值越大優(yōu)先級越大。
- CFI規(guī)范格式標(biāo)識符:1位,0代表幀VLAN正確,1代表VLAN錯誤
- VID:12位,標(biāo)識VALN ID,也就是VLAN號
4.5 最小幀長
以太網(wǎng)幀最小幀長為64B——有效載荷46字節(jié),這是信號從爭取信道到占領(lǐng)信道的最短時間。
凡是小于64B的幀,都視為被沖突破壞的信號,應(yīng)當(dāng)丟棄。如果要發(fā)送小于64B的幀,需要MAC子層在數(shù)據(jù)字段后填充字段。
這個長度是由CSMA/CD(載波偵聽多路訪問/碰撞檢測)算法以及最大傳輸距離的需求共同決定的。這樣的設(shè)計可以避免在網(wǎng)絡(luò)中發(fā)生不必要的沖突,確保數(shù)據(jù)包能夠在網(wǎng)絡(luò)中正確傳輸。如果數(shù)據(jù)包太短,例如小于64字節(jié),那么它可能在發(fā)送過程中被網(wǎng)絡(luò)中的其他設(shè)備誤解為沖突信號,從而導(dǎo)致數(shù)據(jù)丟失或重傳。因此,最小幀長有助于區(qū)分由沖突引起的短幀和正常傳輸?shù)挠杏脦?#xff0c;從而保證數(shù)據(jù)傳輸?shù)男屎涂煽啃浴?/p>
規(guī)定對10Mbps以太網(wǎng)一幀的最小發(fā)送時間為51.2微秒。這段時間所能傳輸?shù)臄?shù)據(jù)為512位,因此也稱該時間為512位時。這個時間定義為以太網(wǎng)時隙,或沖突時槽。512位=64字節(jié),這就是以太網(wǎng)幀最小64字節(jié)的原因。
4.6 最大幀長
以太網(wǎng)的最大幀長度為1518字節(jié)(不包括幀校驗(yàn)序列),其中包括最大的數(shù)據(jù)幀長度為1500字節(jié)和額外的幀頭和幀尾。最大幀長度的設(shè)置是為了避免單一主機(jī)占用信道時間過長。在不同的網(wǎng)絡(luò)環(huán)境下,能夠適應(yīng)不同的數(shù)據(jù)傳輸需求和網(wǎng)絡(luò)負(fù)載。
MAC幀協(xié)議規(guī)定自己的有效載荷不能超過1500字節(jié)(由MTU控制——最大傳送單元,可以修改),這1500個字節(jié)限制包括了上層報頭+有效載荷。
路由器也是主機(jī),也有自己的最大MTU的限制,如果某個路由器的MTU為500字節(jié),但是接收到了局域網(wǎng)內(nèi)某個主機(jī)1500字節(jié)的報文,這是路由器就會對這個報文再次進(jìn)行分片組裝!
數(shù)據(jù)包的大小只有傳輸層能控制,但有時仍會超過1500字節(jié),只能由IP協(xié)議進(jìn)行分片與組裝來解決,發(fā)送端IP層進(jìn)行分片,每一個分片都會有IP報頭,對端IP層進(jìn)行組裝(字節(jié)超限并不是主流情況)。TCP和MAC幀并不關(guān)心IP對數(shù)據(jù)包進(jìn)行了分片和組裝,這僅僅是IP層自己的行為。
4.7 協(xié)議類型
如上圖,0x0800表示要分用給IP協(xié)議,0x0806表示要分用給ARP協(xié)議,0x8035表示要交給RARP協(xié)議,后兩者協(xié)議在后面會詳細(xì)介紹。
4.8 解包
從整個數(shù)據(jù)幀讀取前14個字節(jié),然后再從最后讀取4個字節(jié),剩下的就是有效載荷,如此就完成了解包過程。
4.9 分用
根據(jù)幀協(xié)議類型交給對應(yīng)的上層協(xié)議即可,如0x0800就交給網(wǎng)絡(luò)層的IP協(xié)議去處理有效載荷。
五、MTU
對于以太網(wǎng)來說,既然會存在碰撞,那么發(fā)生的數(shù)據(jù)幀是長了好還是短了好呢?
太長和太短都不行,太短會導(dǎo)致數(shù)據(jù)幀無法校驗(yàn),因?yàn)镃RC校驗(yàn)是需要數(shù)據(jù)幀中有一定數(shù)量的有效載荷的,所以MAC幀協(xié)議規(guī)定,有效載荷的長度要大于等于46字節(jié)。如果最終交付到數(shù)據(jù)鏈路層的有效載荷太小,小于46字節(jié),MAC幀協(xié)議會在后面補(bǔ)充到46字節(jié)。
如果太長的話,數(shù)據(jù)在以太網(wǎng)中傳輸?shù)臅r間就會變長,從而增加了數(shù)據(jù)碰撞的概率,也不合適,所以MAC幀協(xié)議規(guī)定有效載荷的最大值是1500字節(jié),也被叫做以太網(wǎng)的最大傳輸單元(MTU)。
不同的網(wǎng)絡(luò)類型有不同的MTU。
如果IP層的數(shù)據(jù)報大于MTU了,則需要分片,然后再交給數(shù)據(jù)鏈路層。
5.1 MTU對IP協(xié)議的影響
由于數(shù)據(jù)鏈路層MTU的限制, 對于較大的IP數(shù)據(jù)包要進(jìn)行分包:
- 將較大的IP包分成多個小包, 并給每個小包打上標(biāo)簽;
- 每個小包IP協(xié)議頭的 16位標(biāo)識(id) 都是相同的;
- 每個小包的IP協(xié)議頭的3位標(biāo)志字段中, 第2位置為0, 表示允許分片, 第3位來表示結(jié)束標(biāo)記(當(dāng)前是否是最后一個小包, 是的話置為1, 否則置為0);
- 到達(dá)對端時再將這些小包, 會按順序重組, 拼裝到一起返回給傳輸層;
- 一旦這些小包中任意一個小包丟失, 接收端的重組就會失敗,但是IP層不會負(fù)責(zé)重新傳輸數(shù)據(jù),傳輸層若為TCP將超時重傳,UDP將表現(xiàn)為丟包。
5.2 MTU對UDP協(xié)議的影響
- 一旦UDP攜帶的數(shù)據(jù)超過1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就會在網(wǎng)絡(luò)層分成多個IP數(shù)據(jù)報。
- 這多個IP數(shù)據(jù)報有任意一個丟失, 都會引起接收端網(wǎng)絡(luò)層重組失敗. 那么這就意味著, 如果UDP數(shù)據(jù)報在網(wǎng)絡(luò)層被分片, 整個數(shù)據(jù)被丟失的概率就大大增加了。
5.3 MTU對TCP協(xié)議的影響
- TCP的一個數(shù)據(jù)報也不能無限大, 還是受制于MTU。TCP的單個數(shù)據(jù)報的最大消息長度, 稱為MSS(Max Segment Size);
- TCP在建立連接的過程中, 通信雙方會進(jìn)行MSS協(xié)商。最理想的情況下, MSS的值正好是在IP不會被分片處理的最大長度(這個長度仍然是受制于數(shù)據(jù)鏈路層的MTU)。
- 雙方在發(fā)送SYN的時候會在TCP頭部寫入自己能支持的MSS值。
- 然后雙方得知對方的MSS值之后, 選擇較小的作為最終MSS。
- MSS的值就是在TCP首部的40字節(jié)變長選項(xiàng)中(kind=2)。
六、ARP協(xié)議
https://www.ietf.org/rfc/rfc826.txt
6.1 ARP協(xié)議的作用
ARP協(xié)議是一個介于數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間的協(xié)議。
在局域網(wǎng)通信中,必須得知道目標(biāo)主機(jī)的MAC地址才能將數(shù)據(jù)封裝成MAC幀。
源主機(jī)的應(yīng)用程序知道目的主機(jī)的IP地址和端口號,卻不知道目的主機(jī)的MAC地址,需要使用ARP協(xié)議來查找IP和MAC地址的映射關(guān)系。
6.2 ARP老化
ARP緩存表中保存了IP地址和對應(yīng)的MAC地址映射關(guān)系。但是,網(wǎng)絡(luò)中的設(shè)備是動態(tài)的,可能會發(fā)生IP地址分配變化或設(shè)備更換的情況。為了保持ARP緩存表的準(zhǔn)確性,需要一種機(jī)制來處理過時的條目。這就是ARP老化機(jī)制。
ARP老化是指ARP緩存表中的條目在一定時間內(nèi)沒有被使用而被刪除的過程。每個條目都有一個生存時間(存活時間),一般默認(rèn)為20分鐘左右。如果在該時間內(nèi)沒有再次與該IP地址通信,那么該條目將被刪除。當(dāng)然,如果在生存時間內(nèi)繼續(xù)與該IP地址通信,那么該條目的生存時間會被重置,以保持其有效性。
在Linux中,ARP老化是由內(nèi)核的網(wǎng)絡(luò)協(xié)議棧負(fù)責(zé)的。內(nèi)核會定期檢查ARP緩存表中的條目,并清除過時的條目,以確保ARP緩存表的及時更新。
6.3 ARP協(xié)議格式
ARP協(xié)議下層是MAC幀(幀類型為0x0806)。
ARP數(shù)據(jù)包字段:
- 硬件類型,2字節(jié)。指鏈路層網(wǎng)絡(luò)類型, 1為以太網(wǎng)。
- 協(xié)議類型,2字節(jié)。指發(fā)送方要轉(zhuǎn)換的地址類型,0x0800為IP地址;
- 硬件地址長度,1字節(jié)。對于ARP請求或者應(yīng)答來說,該值為6,物理地址長度。
- 協(xié)議地址長度,1字節(jié)。對于ARP請求或者應(yīng)答來說,該值為4,IP地址長度。
- op操作類型,2字節(jié)。1表示ARP請求,2表示ARP應(yīng)答。
- 發(fā)送端以太網(wǎng)地址,6字節(jié)。和以太網(wǎng)源地址相同。
- 發(fā)送端IP地址,4字節(jié)。
- 目的以太網(wǎng)地址,6字節(jié)。發(fā)送ARP請求時,該字段置0。
- 目的IP地址,4字節(jié)。
注意到源MAC地址、目的MAC地址在以太網(wǎng)首部和ARP請求中各出現(xiàn)一次,對于鏈路層為以太網(wǎng)的情況是多余的,但如果鏈路層是其它類型的網(wǎng)絡(luò)則有可能是必要的。
6.4 ARP請求
6.4.1 ARP廣播請求
當(dāng)一個主機(jī)第一次想去獲取同一網(wǎng)絡(luò)中某個設(shè)備的MAC地址,由于此時主機(jī)不知道設(shè)備的MAC地址,所以只能廣播ARP請求,以便于這個ARP請求能被設(shè)備收到;當(dāng)?shù)谝粋€過程走完之后(其實(shí)就是主機(jī)收到了設(shè)備的ARP應(yīng)答),雙方都知道對方的IP–MAC映射,也會在自己的ARP表中生成這個映射。
這是一條10.10.11.14發(fā)出的廣播請求,詢問10.10.11.114的MAC地址。
- 硬件類型為1,說明為以太網(wǎng)
- 協(xié)議類型為0x0800, IPv4
- 硬件地址長度為6
- 協(xié)議長度為4
- 操作類型為1,表示ARP請求
- 發(fā)送端MAC地址 和 MAC幀頭部源MAC地址一樣。
- 發(fā)送端IP地址為本機(jī)地址
- 目的以太網(wǎng)地址留空,ARP請求置0
- 目的IP地址,就是要查詢的IP地址。
MAC地址FF:FF:FF:FF:FF:FF, 代表這是一個廣播MAC幀。
6.4.2 ARP單播請求
由于ARP老化機(jī)制第二種–單播輪詢,主機(jī)會定期向設(shè)備發(fā)送點(diǎn)到點(diǎn)的單播ARP請求報文,用來確認(rèn)對方是否存在,確認(rèn)這條ARP緩存是該更新(主要是更新老化定時器)還是刪除,同時,使用單播還可以減少網(wǎng)絡(luò)中的ARP報文數(shù)量;因此。這種"明知故問"的單播ARP請求報文其實(shí)是非常合理的
這是10.10.11.114發(fā)出的一個ARP請求,問詢10.10.11.14的MAC地址,以前已經(jīng)知道,才能填寫在MAC幀的首部,但是要過期了,查詢是否需要更新。
6.5 ARP應(yīng)答
目的主機(jī)接收到ARP請求,發(fā)現(xiàn)其中的IP地址與本機(jī)相符,則發(fā)送一個ARP應(yīng)答數(shù)據(jù)包給源主機(jī),將自己的硬件地址填寫在應(yīng)答包中;ARP收到應(yīng)答的時候,會以最新的應(yīng)答為準(zhǔn)。
當(dāng)被請求主機(jī)發(fā)送ARP應(yīng)答時,其他主機(jī)在數(shù)據(jù)鏈路層就可以通過以太網(wǎng)目的地址字段區(qū)分這個MAC幀是不是給我的。
6.6 Gratuitous ARP(免費(fèi) ARP)
Gratuitous ARP 是一種特殊的 ARP 請求,當(dāng)主機(jī)啟動時,發(fā)送一個 Gratuitous ARP 請求,即請求自己的 IP 地址和 MAC 地址,即目標(biāo) IP 地址為 自己的 IP 地址。
Gratuitous ARP 的作用 - 以廣播的形式發(fā)送自己的 IP 地址 和 MAC 地址,在網(wǎng)絡(luò)中宣告自己的信息,可以是宣告新添加的主機(jī)或者更新自己的 MAC 地址 - 檢測 IP 地址沖突,若收到了 ARP 響應(yīng)報文,則說明網(wǎng)絡(luò)中已存在使用該 IP 地址的主機(jī)。
七、RARP協(xié)議
Reverse Address Resolution Protocal,逆地址解析協(xié)議。
https://www.ietf.org/rfc/rfc903.txt
7.1 RARP協(xié)議作用
允許局域網(wǎng)的物理機(jī)器使用MAC地址,從網(wǎng)關(guān)服務(wù)器的ARP表或緩存上請求IP地址。
主要用于無盤工作站,因?yàn)榻o無盤工作站配置IP地址不能保存。
在網(wǎng)絡(luò)中配置一臺RARP服務(wù)器,里面保存著IP地址和MAC地址的映射關(guān)系,當(dāng)無盤工作站啟動后,就封裝一個RARP數(shù)據(jù)包,里面有其MAC地址,然后廣播到網(wǎng)絡(luò)上去,當(dāng)服務(wù)器收到請求包后,就查找對應(yīng)的MAC地址的IP地址裝入響應(yīng)報文中發(fā)回給請求者。因?yàn)樾枰獜V播請求報文,因此,RARP只能用于具有廣播能力的網(wǎng)絡(luò)。
7.2 RARP工作原理
- 發(fā)送端發(fā)送一個本地的RARP廣播包,在此廣播包中聲明自己的MAC地址,并且請求任何收到此請求的RARP服務(wù)器分配一個IP地址。
- 本地網(wǎng)段上的RARP服務(wù)器收到此請求后,檢查其RARP列表,查找該MAC地址對應(yīng)的IP地址。如果存在,RARP服務(wù)器就給源主機(jī)發(fā)送一個響應(yīng)數(shù)據(jù)包,并將此IP地址提供給對方主機(jī)使用;如果不存在,RARP服務(wù)器對此不做任何響應(yīng)。
- 源端在收到從RARP服務(wù)器來的響應(yīng)信息后,利用得到的IP地址進(jìn)行通信;如果一直沒有收到RARP服務(wù)器的響應(yīng)信息,則表示初始化失敗。
7.3 RARP協(xié)議格式
RARP協(xié)議格式和ARP協(xié)議格式相同。使用區(qū)別是:
- RARP請求或應(yīng)答幀代碼類型是0x8035,
- RARP的請求的操作代碼是3,應(yīng)答操作代碼是4。
可以看出這個包發(fā)送出來的時候是沒有IP地址的——因?yàn)椴恢?#xff0c;就是要查詢自己的IP。
然后是目的MAC是一個廣播地址。
八、以太網(wǎng)幀F(xiàn)rame的傳輸過程
以太網(wǎng)采用廣播機(jī)制,所有與網(wǎng)絡(luò)連接的工作站都可以看到網(wǎng)絡(luò)上傳遞的數(shù)據(jù)。通過查看包含在幀中的目標(biāo)地址,確定是否進(jìn)行接收或放棄。如果證明數(shù)據(jù)確實(shí)是發(fā)給自己的,工作站將會接收數(shù)據(jù)并傳遞給高層協(xié)議進(jìn)行處理。
以太網(wǎng)采用CSMA/CD媒體訪問機(jī)制,任何工作站都可以在任何時間訪問網(wǎng)絡(luò)。在發(fā)送數(shù)據(jù)之前,工作站首先需要偵聽網(wǎng)絡(luò)是否空閑,如果網(wǎng)絡(luò)上沒有任何數(shù)據(jù)傳送,工作站就會把所要發(fā)送的信息投放到網(wǎng)絡(luò)當(dāng)中。否則,工作站只能等待網(wǎng)絡(luò)下一次出現(xiàn)空閑的時候再進(jìn)行數(shù)據(jù)的發(fā)送。
而局域網(wǎng)中存在多臺主機(jī),這些主機(jī)都和以太網(wǎng)相連,都能夠看到以太網(wǎng),故而也能看到以太網(wǎng)中跑的數(shù)據(jù)。
網(wǎng)絡(luò)通信本質(zhì)上就是進(jìn)程間通信,而網(wǎng)絡(luò)就是臨界資源。
所以局域網(wǎng)中的所有主機(jī)都唔那個收到主機(jī)MAC1發(fā)送的數(shù)據(jù),每臺主機(jī)在收到數(shù)據(jù)后,數(shù)據(jù)鏈路層會對比數(shù)據(jù)幀報頭中的目的MAC地址,如果和自己的MAC地址相同,則進(jìn)行解包分用交給下一層。
如果數(shù)據(jù)幀報頭中的目的MAC地址和自己的MAC地址不符,那么直接在數(shù)據(jù)鏈路層就丟棄該數(shù)據(jù),上層根本不知道曾經(jīng)有過這個數(shù)據(jù)。
8.1 單播
主機(jī)B給主機(jī)C發(fā)送單播幀,主機(jī)B首先要構(gòu)建該單播幀,在幀首部中的目的地址字段填入主機(jī)C的MAC地址,源地址字段填入自己的MAC地址,再加上幀首部的其他字段、數(shù)據(jù)載荷以及幀尾部,就構(gòu)成了該單播幀
主機(jī)B將該單播幀發(fā)送出去,主機(jī)A和C都會收到該單播幀
主機(jī)A的網(wǎng)卡發(fā)現(xiàn)該單播幀的目的MAC地址與自己的MAC地址不匹配,于是丟棄該幀
主機(jī)C的網(wǎng)卡發(fā)現(xiàn)該單播幀的目的MAC地址與自己的MAC地址匹配,于是接受該幀,并將該幀交給其上層處理
8.2 廣播
假設(shè)主機(jī)B要發(fā)送一個廣播幀,主機(jī)B首先要構(gòu)建該廣播幀,在幀首部中的目的地址字段填入廣播地址,也就是十六進(jìn)制的全F,源地址字段填入自己的MAC地址,再加上幀首部中的其他字段、數(shù)據(jù)載荷以及幀尾部,就構(gòu)成了該廣播幀
主機(jī)B將該廣播幀發(fā)送出去,主機(jī)A和C都會收到該廣播幀,發(fā)現(xiàn)該幀首部中的目的地址字段的內(nèi)容是廣播地址,就知道該幀是廣播幀,主機(jī)A和主機(jī)C都接受該幀,并將該幀交給上層處理
8.3 多播
假設(shè)主機(jī)A要發(fā)送多播幀給該多播地址。將該多播地址的左起第一個字節(jié)寫成8個比特,第一個字節(jié)的最低比特位是1,這就表明該地址是多播地址
快速判斷地址是不是多播地址,就是上圖所示箭頭所指的第十六進(jìn)制數(shù)不能整除2(1,3,5,7,9,B,D,F),則該地址是多播地址
假設(shè)主機(jī)B,C和D支持MAC多播,各用戶給自己的主機(jī)配置多播組列表如下所示
主機(jī)B屬于兩個多播組,主機(jī)C也屬于兩個多播組,而主機(jī)D不屬于任何多播組
主機(jī)A首先要構(gòu)建該多播幀,在幀首部中的目的地址字段填入該多播地址,源地址字段填入自己的MAC地址,再加上幀首部中的其他字段、數(shù)據(jù)載荷以及幀尾部,就構(gòu)成了該多播幀
主機(jī)A將該多播幀發(fā)送出去,主機(jī)B、C、D都會收到該多播幀
主機(jī)B和C發(fā)現(xiàn)該多播幀的目的MAC地址在自己的多播組列表中,因此主機(jī)B和C都會接受該**多播幀,**并交付給上層處理
主機(jī)D發(fā)現(xiàn)該多播幀的目的MAC地址不在自己的多播組列表中,則丟棄該多播幀
8.3 兩主機(jī)同一子網(wǎng),不經(jīng)過網(wǎng)關(guān)
當(dāng)主機(jī)A發(fā)向主機(jī)B的數(shù)據(jù)流在網(wǎng)絡(luò)層封裝成IP數(shù)據(jù)包,IP數(shù)據(jù)包的首部包含了源地址和?標(biāo)地址。
主機(jī)A會?本機(jī)配置的24位IP網(wǎng)絡(luò)掩碼255.255.255.0與目標(biāo)地址進(jìn)?與運(yùn)算,得出?標(biāo)網(wǎng)絡(luò)地址與本機(jī)的?絡(luò)地址是不是在同?個?段中。
如果在同一個子網(wǎng),可以通過ARP協(xié)議獲取目的IP的MAC地址,數(shù)據(jù)鏈路層直接封裝以太網(wǎng)幀發(fā)送出去。
這個過程中源IP、目標(biāo)IP、源MAC、目標(biāo)MAC都不會改變。
8.3 路由轉(zhuǎn)發(fā)過程
當(dāng)主機(jī)A發(fā)向主機(jī)B的數(shù)據(jù)流在網(wǎng)絡(luò)層封裝成IP數(shù)據(jù)包,IP數(shù)據(jù)包的首部包含了源地址和?標(biāo)地址。
主機(jī)A會?本機(jī)配置的24位IP網(wǎng)絡(luò)掩碼255.255.255.0與目標(biāo)地址進(jìn)?與運(yùn)算,得出?標(biāo)網(wǎng)絡(luò)地址與本機(jī)的?絡(luò)地址是不是在同?個?段中。
如果不是將IP數(shù)據(jù)包轉(zhuǎn)發(fā)到網(wǎng)關(guān)。在發(fā)往?關(guān)前主機(jī)A還會通過ARP的請求獲得默認(rèn)?關(guān)的MAC地址。在主機(jī)A數(shù)據(jù)鏈路層IP數(shù)據(jù)包封裝成以太網(wǎng)數(shù)據(jù)幀,然后才發(fā)住到網(wǎng)關(guān)……也就是路由器上的?個端?。
當(dāng)網(wǎng)關(guān)路由器接收到以太網(wǎng)數(shù)據(jù)幀時,發(fā)現(xiàn)數(shù)據(jù)幀中的目標(biāo)MAC地址是自己的某?個端?的物理地址,這時路由器會把以太網(wǎng)數(shù)據(jù)幀的封裝去掉。路由器認(rèn)為這個IP數(shù)據(jù)包是要通過自己進(jìn)行轉(zhuǎn)發(fā),接著它就在匹配路由表。匹配到路由項(xiàng)后,它就將包發(fā)往下?條地址。
IP地址始終不變
目的IP地址是為了確認(rèn)目的主機(jī)。如果IP地址改變則目的主機(jī)改變無法進(jìn)行正常通信。
源IP地址由于NAT等相關(guān)技術(shù)可能會發(fā)生變化,看情況。
經(jīng)過交換機(jī), 源/目的MAC地址不變
數(shù)據(jù)幀在交換機(jī)之間轉(zhuǎn)發(fā)。在一個網(wǎng)段內(nèi)部,通過數(shù)據(jù)包通過MAC尋址(二層交換機(jī)和終端都有MAC表,查表或者通過MAC廣播)因此在二層交換機(jī),數(shù)據(jù)包里的源目MAC地址肩負(fù)著把數(shù)據(jù)包從發(fā)包終端傳遞到目的IP所在終端(網(wǎng)段的其他主機(jī)~其他網(wǎng)段IP的話就是給網(wǎng)關(guān))的任務(wù)。
經(jīng)過路由器,源/目的MAC地址變
經(jīng)過路由器,由于三層設(shè)備轉(zhuǎn)發(fā),跨網(wǎng)段了,原來的MAC地址當(dāng)然就不能使用了,所以出接口的MAC此時成為在新一個網(wǎng)段實(shí)現(xiàn)兩個IP之間尋址的源MAC,根據(jù)MAC表找到匹配到的路由條目指出的需要轉(zhuǎn)給的下一個IP的MAC地址(沒的話ARP廣播得到),然后封裝好新的源目MAC,轉(zhuǎn)給新網(wǎng)段之間的交換機(jī)。。。直到完成新的網(wǎng)段里兩點(diǎn)之間的數(shù)據(jù)包的傳遞。
在幀不斷轉(zhuǎn)發(fā)的過程中,IP源/目的地址不變,MAC源/目的地址根據(jù)所經(jīng)過的路由器端口變化。
參考:
- https://www.cnblogs.com/kingwz/p/16938768.html
- https://blog.csdn.net/sj15814963053/article/details/124128878