日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C高级编程——网络编程之以太网(2)

發布時間:2023/12/20 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C高级编程——网络编程之以太网(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux網絡編程——以太網


宗旨:技術的學習是有限的,分享的精神是無限的。


1、以太網幀格式

? ? ? ? 源地址和目的地址是指網卡的硬件地址(也叫MAC地址),長度是48位,是在網卡出廠時固化的。用ifconfig命令查看,“?硬件地址?00:0c:29:cf:7e:1a??。協議字段有三種值,分別對應IP、?ARP、?RARP。幀末尾是CRC校驗碼

? ? ? ? ARPRARP數據包的長度不夠46字節,要在后面補填充位。最大值1500稱為以太網的最大傳輸單元(?MTU),不同的網絡類型有不同的MTU,如果一個數據包從以太網路由到撥號鏈路上,數據包長度大于撥號鏈路的MTU了,則需要對數據包進行分片(?fragmentation。ifconfig查看“?MTU:1500”。MTU這個概念指數據幀中有效載荷的最大長度,不包括幀首部的長度。


2、數據報格式

? ? ? ? 在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,如果接收到的數據包的硬件地址與本機不符,則直接丟棄。因此在通訊前必須獲得目的主機的硬件地址。?ARP協議就起到這個作用。源主機發出ARP請求,詢問“IP地址是192.168.0.1的主機的硬件地址是多少,并將這個請求廣播到本地網段(以太網幀首部的硬件地址填FF:FF:FF:FF:FF:FF表示廣播),目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答數據包給源主機,將自己的硬件地址填寫在應答包中。

? ? ? ? 每臺主機都維護一個ARP緩存表,可以用arp?-a命令查看。緩存表中的表項有過期時間(一般為20分鐘),如果20分鐘內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來獲得目的主機的硬件地址。

ARP數據報格式:

? ? ? ? 注意到源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對于鏈路層為以太網的情況是多余的,但如果鏈路層是其它類型的網絡則有可能是必要的。硬件類型指鏈路層網絡類型,1為以太網,協議類型指要轉換的地址類型,0x0800IP地址,后面兩個地址長度對于以太網地址和IP地址分別為64(字節),op字段為1表示ARP請求,op字段為2表示ARP應答。

例如請求幀:

以太網首部(?14字節)

0000:?ff?ff?ff?ff?ff?ff?00?05?5d?61?58?a8?08?06

ARP幀(?28字節)

0000:?00?01

0010:?08?00?06?04?00?01?00?05?5d?61?58?a8?c0?a8?00?37

0020:?00?00?00?00?00?00?c0?a8?00?0218

填充位(?字節)

0020:?00?77?31?d2?50?10

0030:?fd?78?41?d3?00?00?00?00?00?00?00?00

以太網首部:目的主機采用廣播地址,源主機的MAC地址是00:05:5d:61:58:a8,上層協議類型0x0806表示ARP

ARP幀:硬件類型0x0001表示以太網,協議類型0x0800表示IP協議,硬件地址(MAC地址)長度為6,協議地址(IP地址)長度為4op0x0001表示請求目的主機的MAC地址,源主機MAC地址為00:05:5d:61:58:a8,源主機IP地址為c0?a8?00?37192.168.0.55),目的主機MAC地址全0待填寫,目的主機IP地址為c0?a8?00?02192.168.0.2)。

由于以太網規定最小數據長度為46字節,?ARP幀長度只有28字節,因此有18字節填充位,填充位的內容沒有定義,與具體實現相關。


應答幀如下:

以太網首部

0000:?00?05?5d?61?58?a8?00?05?5d?a1?b8?40?08?06

ARP0000:?00?01

0010:?08?00?06?04?00?02?00?05?5d?a1?b8?40?c0?a8?00?02

0020:?00?05?5d?61?58?a8?c0?a8?00?37

填充位0020:?00?77?31?d2?50?100030:?fd?78?41?d3?00?00?00?00?00?00?00?00

以太網首部:目的主機的MAC地址是00:05:5d:61:58:a8,源主機的MAC地址是00:05:5d:a1:b8:40,上層協議類型0x0806表示ARP。

ARP幀:硬件類型0x0001表示以太網,協議類型0x0800表示IP協議,硬件地址(?MAC地址)長度為6,協議地址(?IP地址)長度為4op0x0002表示應答,源主機MAC地址為00:05:5d:a1:b8:40,源主機IP地址為c0?a8?00?02(?192.168.0.2),目的主機MAC地址為00:05:5d:61:58:a8,目的主機IP地址為c0?a8?00?37(?192.168.0.55)。


3數據報格式

? ? ? ? IP數據報的首部長度和數據長度都是可變長的,但總是4字節的整數倍。對于IPv44位版本字段是44位首部長度的數值是以4字節為單位的,最小值為5,也就是說首部長度最小是4x5=20字節,也就是不帶任何選項的IP首部,4位能表示的最大值是15,也就是說首部長度最大是60字節。8TOS字段有3個位用來指定IP數據報的優先級(目前已經廢棄不用),還有4個位表示可選的服務類型(最小延遲、最大呑吐量、最大可靠性、最小成本),還有一個位總是0??傞L度是整個數據報(包括IP首部和IPpayload)的字節數。每傳一個IP數據報,16位的標識加1,可用于分片和重新組裝數據報。3位標志和13位片偏移用于分片。?TTLTime?to?live)是這樣用的:源主機為數據包設定一個生存時間,比如64,每過一個路由器就把該值減1,如果減到0就表示路由已經太長了仍然找不到目的主機的網絡,就丟棄該包,因此這個生存時間的單位不是秒,而是跳(hop)。協議字段指示上層協議是TCP、UDP、ICMP還是IGMP。然后是校驗和,只校驗IP首部,數據的校驗由更高層協議負責。IPv4IP地址長度為32位。


4、IP地址

? ? ? ? IPv4IP地址長度為4字節,通常采用點分十進制表示法(dotted?decimal?representation)例如0xc0a80002表示為192.168.0.2。?Internet被各種路由器和網關設備分隔成很多網段,為了標識不同的網段,需要把32位的IP地址劃分成網絡號和主機號兩部分,網絡號相同的各主機位于同一網段,相互間可以直接通信,網絡號不同的主機之間通信則需要通過路由器轉發。

A類?0.0.0.0127.255.255.255

B類?128.0.0.0191.255.255.255

C類?192.0.0.0223.255.255.255

D類?224.0.0.0239.255.255.255

E類?240.0.0.0247.255.255.255

? ? ? ? 一個A類網絡可容納的地址數量最大,一個B類網絡的地址數量是65536,一個C類網絡的地址數量是256。?D類地址用作多播地址,?E類地址保留未用。

? ? ? ? 網絡號和主機號的劃分需要用一個額外的子網掩碼(subnet?mask)來表示,而不能由IP地址本身的數值決定,也就是說,網絡號和主機號的劃分與這個IP地址是A類、?B類還是C類無關,因此稱為Classless的。這樣,多個子網就可以匯總(summarize)成一個Internet上的網絡,例如,有8個站點都申請了C類網絡,本來網絡號是24位的,但是這8個站點通過同一個ISPInternet?serviceprovider)連到Internet上,它們網絡號的高21位是相同的,只有低三位不同,這8個站點就可以匯總,在Internet上只需要一個路由表項,數據包通過Internet上的路由器到達ISP,然后在ISP這邊再通過次級的路由器選路到某個站點。

例如:子網1


子網2

? ? ? ? IP地址與子網掩碼做與運算可以得到網絡號,主機號從全0到全1就是子網的地址范圍。IP地址和子網掩碼還有一種更簡潔的表示方法,例如140.252.20.68/24,表示IP地址為140.252.20.68,子網掩碼的高24位是1,也就是255.255.255.0。

? ? ? ? 如果一個組織內部組建局域網,?IP地址只用于局域網內的通信,而不直接連到Internet上,理論上使用任意的IP地址都可以,但是RFC?1918規定了用于組建局域網的私有IP地址,這些地址不會出現在Internet上,如下表所示。

10.*,前8位是網絡號,共16,777,216個地址

172.16.*172.31.*,前12位是網絡號,共1,048,576個地址

192.168.*,前16位是網絡號,共65,536個地址

? ? ? ? 127.*IP地址用于本機環回(loop?back)測試,通常是127.0.0.1loopback是系統中一種特殊的網絡設備,如果發送數據包的目的地址是環回地址,或者與本機其它網絡設備的IP地址相同,則數據包不會發送到網絡介質上,而是通過環回設備再發回給上層協議和應用程序,主要用于測試。

總結

以上是生活随笔為你收集整理的Linux C高级编程——网络编程之以太网(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。