www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 1. IP介紹IP是TCP/IP協(xié)議族中最為核心的協(xié)議。大家,如TCP、UDP、ICMP及IGMP數(shù)據(jù),都是在IP數(shù)據(jù)報(bào)格式基礎(chǔ)上再封裝一層再來傳輸?shù)模ㄒ妶D1 - 4)。不可靠(unreliable)的意思是它不能保證 IP數(shù)據(jù)報(bào)能成

1. IP介紹

IP是TCP/IP協(xié)議族中最為核心的協(xié)議。大家,如TCP、UDP、ICMP及IGMP數(shù)據(jù),都是在IP數(shù)據(jù)報(bào)格式基礎(chǔ)上再封裝一層再來傳輸?shù)模ㄒ妶D1 - 4)。


不可靠(unreliable)的意思是它不能保證 IP數(shù)據(jù)報(bào)能成功地到達(dá)目的地。 IP僅提供最好的傳輸服務(wù)。如果發(fā)生某種錯(cuò)誤時(shí),如某個(gè)路由器暫時(shí)用完了緩沖區(qū), IP有一個(gè)簡單的錯(cuò)誤處理算法:丟棄該數(shù)據(jù)報(bào),然后發(fā)送 ICMP消息報(bào)給信源端。任何要求的可靠性必須由上層來提供(如TCP) 。

無連接(connectionless)這個(gè)術(shù)語的意思是I P并不維護(hù)任何關(guān)于后續(xù)數(shù)據(jù)報(bào)的狀態(tài)信息。每個(gè)數(shù)據(jù)報(bào)的處理是相互獨(dú)立的。這也說明, IP數(shù)據(jù)報(bào)可以不按發(fā)送順序接收。如果一信源向相同的信宿發(fā)送兩個(gè)連續(xù)的數(shù)據(jù)報(bào)(先是 A,然后是B) ,每個(gè)數(shù)據(jù)報(bào)都是獨(dú)立地進(jìn)行路由選擇,可能選擇不同的路線,因此B可能在A到達(dá)之前先到達(dá)。

2. IP首部

I P數(shù)據(jù)報(bào)的格式如圖3 - 1所示。普通的IP首部長為20個(gè)字節(jié),除非含有選項(xiàng)字段。


分析圖3 - 1中的首部。最高位在左邊,記為0 bit;最低位在右邊,記為31 bit。4個(gè)字節(jié)的32 bit值以下面的次序傳輸:首先是0~7 bit,其次8~15 bit,然后1 6~23 bit,最后是24~31 bit。這種傳輸次序稱作big endian字節(jié)序。由于TCP/IP首部中所有的二進(jìn)制整數(shù)在網(wǎng)絡(luò)中傳輸時(shí)都要求以這種次序,因此它又稱作網(wǎng)絡(luò)字節(jié)序。

目前的協(xié)議版本號是4,因此IP有時(shí)也稱作IPv4。

服務(wù)類型(TOS)字段包括一個(gè)3 bit的優(yōu)先權(quán)子字段(現(xiàn)在已被忽略) ,4 bit的TO S子字段和1 bit未用位但必須置0。4 bit的TO S分別代表:最小時(shí)延、最大吞吐量、最高可靠性和最小費(fèi)用。

總長度字段是指整個(gè)I P數(shù)據(jù)報(bào)的長度,以字節(jié)為單位。

標(biāo)識字段唯一地標(biāo)識主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。通常每發(fā)送一份報(bào)文它的值就會加 1。在大多數(shù)從伯克利派生出來的系統(tǒng)中,每發(fā)送一個(gè)I P數(shù)據(jù)報(bào),I P層都要把一個(gè)內(nèi)核變量的值加1,不管交給IP的數(shù)據(jù)來自哪一層。內(nèi)核變量的初始值根據(jù)系統(tǒng)引導(dǎo)時(shí)的時(shí)間來設(shè)置。

TTL(time-to-live)生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過的最多路由器數(shù)。TTL的初始值由源主機(jī)設(shè)置(通常為3 2或6 4) ,一旦經(jīng)過一個(gè)處理它的路由器,它的值就減去1。當(dāng)該字段的值為0時(shí),數(shù)據(jù)報(bào)就被丟棄,并發(fā)送 ICMP報(bào)文通知源主機(jī)。

協(xié)議字段可以識別是哪個(gè)協(xié)議向I P傳送數(shù)據(jù)。

首部檢驗(yàn)和字段是根據(jù)IP首部計(jì)算的檢驗(yàn)和碼。它不對首部后面的數(shù)據(jù)進(jìn)行計(jì)算。 ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時(shí)覆蓋首部和數(shù)據(jù)檢驗(yàn)和碼。

目前,這些任選項(xiàng)定義如下:

? 安全和處理限制(用于軍事領(lǐng)域,詳細(xì)內(nèi)容參見 RFC 1108[Kent 1991])

? 記錄路徑(讓每個(gè)路由器都記下它的IP地址,見7 . 3節(jié))

? 時(shí)間戳(讓每個(gè)路由器都記下它的IP地址和時(shí)間,見7 . 4節(jié))

? 寬松的源站選路(為數(shù)據(jù)報(bào)指定一系列必須經(jīng)過的 IP地址,見8 . 5節(jié))

? 嚴(yán)格的源站選路(與寬松的源站選路類似,但是要求只能經(jīng)過指定的這些地址,不能經(jīng)過其他的地址) 。

------------------------------------------以上內(nèi)容整理于《TCP/IP協(xié)議詳解:卷1》--------------------------------------

------------------------------------------以下內(nèi)容產(chǎn)生于代碼及分析--------------------------------------

3. IP宏定義實(shí)現(xiàn)

 C++ Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


//*******IP*******
//IP首部長度
#defineIP_HEADER_LEN20

//IP版本號位置以太網(wǎng)首部2+6+6,與下面那個(gè)在用的時(shí)候上區(qū)別下
#defineIP_HEADER_LEN_VER_P0xe

//IP版本號位置以太網(wǎng)首部2+6+6
#defineIP_P0xe
//IP16位標(biāo)志位置
#defineIP_FLAGS_P0x14
//IP生存時(shí)間位置
#defineIP_TTL_P0x16
//IP協(xié)議類型位置,如ICMP,TCP,UDP1個(gè)字節(jié)
#defineIP_PROTO_P0x17
//首部校驗(yàn)和
#defineIP_CHECKSUM_P0x18
//IP源地址位置14+12
#defineIP_SRC_P0x1a
//IP目標(biāo)地址位置14+12+4
#defineIP_DST_P0x1e

//IP總長度
#defineIP_TOTLEN_H_P0x10
#defineIP_TOTLEN_L_P0x11

//協(xié)議類型
#defineIP_PROTO_ICMP_V0x01
#defineIP_PROTO_TCP_V0x06
#defineIP_PROTO_UDP_V0x11


4. IP函數(shù)實(shí)現(xiàn)

以太網(wǎng)的header在IP的header之前,很簡單的,介紹先。

配置以太網(wǎng)的頭,為14字節(jié):6字節(jié)目的mac地址+6字節(jié)源mac地址+2字節(jié)協(xié)議類型

1
2
3
4
5
6
7
8
9
10
11
12
13


//makeareturnethheaderfromareceivedethpacket
voidmake_eth(unsignedchar*buf)
{
unsignedchari=0;

//copythedestinationmacfromthesourceandfillmymacintosrc
while(i{
buf[ETH_DST_MAC+i]=buf[ETH_SRC_MAC+i];
buf[ETH_SRC_MAC+i]=macaddr[i];
i++;
}
}


展開之后如下所示,其在以太網(wǎng)幀中的位置與之前的宏定義是一一對應(yīng)的。


IP與ARP一樣,需要判定是不是發(fā)給本機(jī)的(eth_type_is_ip_and_my_ip函數(shù)),還有與填充make_eth 函數(shù)一樣需要填充函數(shù)(make_ip函數(shù)),此外還有填充其他雜七雜八和16位首部校驗(yàn)和函數(shù)(fill_ip_hdr_checksum函數(shù))

C++ Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66


//判定過程與eth_type_is_arp_and_my_ip類似
unsignedchareth_type_is_ip_and_my_ip(unsignedchar*buf,unsignedintlen)
{
unsignedchari=0;

//eth+ip+udpheaderis42
if(len{
return(0);
}

if(buf[ETH_TYPE_H_P]!=ETHTYPE_IP_H_V||buf[ETH_TYPE_L_P]!=ETHTYPE_IP_L_V)
{
return(0);
}

if(buf[IP_HEADER_LEN_VER_P]!=0x45)
{
//mustbeIPV4and20byteheader
return(0);
}

while(i{
if(buf[IP_DST_P+i]!=ipaddr[i])
{
return(0);
}

i++;
}

return(1);
}
//下面那個(gè)ip填充函數(shù)調(diào)用它,主要是補(bǔ)充填充和校驗(yàn)和
voidfill_ip_hdr_checksum(unsignedchar*buf)
{
unsignedintck;
//clearthe2bytechecksum
buf[IP_CHECKSUM_P]=0;
buf[IP_CHECKSUM_P+1]=0;
buf[IP_FLAGS_P]=0x40;//don'tfragment
buf[IP_FLAGS_P+1]=0;//fragementoffset
buf[IP_TTL_P]=64;//ttl
//calculatethechecksum:
//校驗(yàn)和計(jì)算,在下下面那個(gè)函數(shù)里面,輸入?yún)?shù)的含義下面看就曉得了
ck=checksum(&buf[IP_P],IP_HEADER_LEN,0);
buf[IP_CHECKSUM_P]=ck>>8;
buf[IP_CHECKSUM_P+1]=ck&0xff;
}

//makeareturnipheaderfromareceivedippacket
//與以太網(wǎng)填充函數(shù)類似,填充ip地址
voidmake_ip(unsignedchar*buf)
{
unsignedchari=0;

while(i{
buf[IP_DST_P+i]=buf[IP_SRC_P+i];
buf[IP_SRC_P+i]=ipaddr[i];
i++;
}

fill_ip_hdr_checksum(buf);
}

5. IP校驗(yàn)和實(shí)現(xiàn)

校驗(yàn)和函數(shù)式如何得出校驗(yàn)和值的呢?看《TCP/IP協(xié)議詳解:卷1》里面咋說的吧。

”為了計(jì)算一份數(shù)據(jù)報(bào)的 IP檢驗(yàn)和,首先把檢驗(yàn)和字段置為 0。然后,對首部中每個(gè) 16 bit進(jìn)行二進(jìn)制反碼求和(整個(gè)首部看成是由一串 16 bit的字組成) ,結(jié)果存在檢驗(yàn)和字段中。當(dāng)收到一份I P數(shù)據(jù)報(bào)后,同樣對首部中每個(gè)16 bit進(jìn)行二進(jìn)制反碼的求和。由于接收方在計(jì)算過程中包含了發(fā)送方存在首部中的檢驗(yàn)和,因此,如果首部在傳輸過程中

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在人工智能飛速發(fā)展的當(dāng)下,大模型展現(xiàn)出了強(qiáng)大的語言理解與生成能力。然而,要讓這些模型真正在實(shí)際場景中發(fā)揮作用,與外部豐富的工具及數(shù)據(jù)源順暢交互至關(guān)重要。在此背景下,Model Context Protocol(MCP),...

關(guān)鍵字: 人工智能 大模型 協(xié)議

在智能汽車飛速發(fā)展的當(dāng)下,汽車內(nèi)各種電氣設(shè)備之間的數(shù)據(jù)交互愈發(fā)頻繁和復(fù)雜。車載以太網(wǎng)作為連接這些設(shè)備的關(guān)鍵物理網(wǎng)絡(luò),正扮演著日益重要的角色。它基于傳統(tǒng)以太網(wǎng)協(xié)議,對物理接口電氣特性進(jìn)行了改造,并依據(jù)車載網(wǎng)絡(luò)需求制定了新標(biāo)...

關(guān)鍵字: 以太網(wǎng) 車載網(wǎng)絡(luò) 協(xié)議

I2C 總線的起始條件和終止條件通常由主機(jī)產(chǎn)生。起始條件是在 SCL 高電平時(shí),SDA 從高電平轉(zhuǎn)為低電平;而終止條件則是當(dāng) SCL 高電平時(shí),SDA 從低電平轉(zhuǎn)化為高電平。這兩個(gè)條件的準(zhǔn)確識別對于 I2C 通信的正確啟...

關(guān)鍵字: I2C 總線 數(shù)據(jù) 協(xié)議

在當(dāng)今數(shù)字化時(shí)代,互聯(lián)網(wǎng)已經(jīng)成為人們生活和工作中不可或缺的一部分。從瀏覽網(wǎng)頁、發(fā)送電子郵件,到視頻通話、在線購物,每一項(xiàng)網(wǎng)絡(luò)活動的背后都離不開一套復(fù)雜而精妙的協(xié)議體系 ——TCP/IP 協(xié)議族。作為支撐現(xiàn)代互聯(lián)網(wǎng)運(yùn)行的基...

關(guān)鍵字: 協(xié)議 互聯(lián)網(wǎng) TCP/IP 協(xié)議

串口:串口是一個(gè)泛稱,UART、TTL、RS232、RS485都遵循類似的通信時(shí)序協(xié)議,因此都被通稱為串口。串口通訊應(yīng)用是工控人必須掌握的一個(gè)技能,幾乎在每一個(gè)項(xiàng)目中都會用到,今天我們就來詳細(xì)比較一下它們究竟有何區(qū)別。

關(guān)鍵字: 串口 協(xié)議

隨著社會經(jīng)濟(jì)的不斷發(fā)展進(jìn)步,科技的不斷飛升,在新時(shí)代的背景下網(wǎng)絡(luò)通信已經(jīng)成了人們最為常 用的科學(xué)技術(shù)產(chǎn)品之一,由于生活水平得到了提高人們在日常的追求上也發(fā)生著變化,而對于通信 的產(chǎn)品可以說是有著日新月異的變化,人們在網(wǎng)絡(luò)...

關(guān)鍵字: 通信 協(xié)議 控制

新一代人工智能的發(fā)展,是國家層面的戰(zhàn)略大協(xié)作。由科技部主導(dǎo),共15個(gè)國家部門構(gòu)成的新一代人工智能發(fā)展規(guī)劃推進(jìn)辦公室,著力推進(jìn)項(xiàng)目、基地、人才統(tǒng)籌布局,打造國家級專家?guī)?,成立新一代人工智能?zhàn)略咨詢委員會。很多時(shí)候企業(yè)擁有重...

關(guān)鍵字: 人工智能 自動化 平臺

沒想到一家半導(dǎo)體公司創(chuàng)始人的經(jīng)歷可以如此傳奇,從大屠殺中活了下來,他就是威世(Vishay)創(chuàng)始人費(fèi)利克斯·贊德曼(Felix Zandman)。本以為世界級半導(dǎo)體公司的創(chuàng)始人都是從小理科天賦過人、名校背景,成長故事如同...

關(guān)鍵字: 半導(dǎo)體 平臺 公司

據(jù)路透社等海外媒體報(bào)道,美國商務(wù)部官員Wilbur Ross在4月16日透露,因未履行和解協(xié)定中的部分協(xié)議,美國商務(wù)部將禁止美國企業(yè)向中興通訊銷售元器件,時(shí)間有可能長達(dá)7年。該消息公布之后,國內(nèi)部分產(chǎn)業(yè)人士認(rèn)為是假消息,...

關(guān)鍵字: 協(xié)議 元器件 中興通訊

顯然這是目前存在的現(xiàn)狀,藍(lán)牙Mesh、Zigbee等一些標(biāo)準(zhǔn)共存于物聯(lián)網(wǎng)智能家居江湖,但又誰也取代不了誰。正如周巍所說:“沒有任何一個(gè)標(biāo)準(zhǔn)能在一個(gè)應(yīng)用層壟斷,盡管小米阿里在主推藍(lán)牙Mesh,華為在推Zigbee,但未來遲...

關(guān)鍵字: 物聯(lián)網(wǎng) 協(xié)議 通訊
關(guān)閉