免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

【lwip】10-ICMP協(xié)議&源碼分析( 三 )


【lwip】10-ICMP協(xié)議&源碼分析

文章插圖
在以下情況下,網(wǎng)關(guān)會(huì)向主機(jī)發(fā)送重定向消息 。
網(wǎng)關(guān)Gl從網(wǎng)關(guān)所連接的網(wǎng)絡(luò)上的主機(jī)接收互聯(lián)網(wǎng)數(shù)據(jù)報(bào),然后檢查自己的路由表,得到數(shù)據(jù)報(bào)internet目的網(wǎng)絡(luò)X的路由上的下一個(gè)網(wǎng)關(guān)G2的地址 。
如果G2與數(shù)據(jù)報(bào)internet源地址標(biāo)識(shí)的主機(jī)在同一網(wǎng)絡(luò)上,則向該主機(jī)發(fā)送重定向消息 。
重定向消息建議主機(jī)將其網(wǎng)絡(luò)X的流量直接發(fā)送到網(wǎng)關(guān)G2,因?yàn)檫@是到達(dá)目的地的較短路徑 。
網(wǎng)關(guān)將原始數(shù)據(jù)報(bào)的數(shù)據(jù)轉(zhuǎn)發(fā)到其internet目的地 。
對(duì)于帶有IP源路由選項(xiàng)和目的地址字段中網(wǎng)關(guān)地址的數(shù)據(jù)報(bào),即使到達(dá)最終目的地的路由比源路由中的下一個(gè)地址有更好的路由,也不發(fā)送重定向消息 。
可以從網(wǎng)關(guān)接收編碼0、1、2和3 。
10.3.4 超時(shí)類型代碼描述查詢差錯(cuò)11超時(shí):0傳輸期間TTL為0√1分片數(shù)據(jù)報(bào)重裝超時(shí)√10.3.5 參數(shù)錯(cuò)誤類型代碼描述查詢差錯(cuò)12參數(shù)問題:0IP首部異?!?缺少必須的選項(xiàng)√IP 數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中傳輸?shù)臅r(shí)候,都是根據(jù)其首部進(jìn)行識(shí)別的,如果首部出現(xiàn)錯(cuò)誤,那么就會(huì)產(chǎn)生嚴(yán)重的問題,因此如果 IP 數(shù)據(jù)報(bào)首部出現(xiàn)錯(cuò)誤就會(huì)丟棄數(shù)據(jù)報(bào),并且向源主機(jī)返回一個(gè) ICMP參數(shù)錯(cuò)誤報(bào)文 。
10.4 ICMP查詢報(bào)文常見的ICMP查詢報(bào)文:
  1. 回顯請(qǐng)求或回答 。
  2. 路由器查詢和通告 。
  3. 時(shí)間戳請(qǐng)求或回答 。
  4. 信息請(qǐng)求或回答 。
  5. 地址掩碼請(qǐng)求或回答 。
10.4.1 回顯這是當(dāng)前l(fā)wip唯一實(shí)現(xiàn)的ICMP查詢報(bào)文 。
類型代碼描述查詢差錯(cuò)00回顯應(yīng)答(如ping應(yīng)答)√80請(qǐng)求回顯(如ping請(qǐng)求)√報(bào)文格式:
【lwip】10-ICMP協(xié)議&源碼分析

文章插圖
標(biāo)識(shí)符和序列號(hào)沒有具體范圍要求,符合字節(jié)限制即可 。發(fā)送方可以自由使用這兩個(gè)字段 。
如該標(biāo)識(shí)符可能被用作TCP或UDP中的端口來標(biāo)識(shí)會(huì)話,而序列號(hào)可能會(huì)在每次發(fā)送回顯請(qǐng)求時(shí)遞增 。
數(shù)據(jù)字段可選,但是在請(qǐng)求回顯消息中接收到的數(shù)據(jù)必須在回顯應(yīng)答消息中返回 。(即是同一對(duì)回顯的數(shù)據(jù)必須一致)
10.5 ICMP數(shù)據(jù)結(jié)構(gòu)lwip支持的icmp數(shù)據(jù)結(jié)構(gòu)在icmp.h文件中 。
10.5.1 ICMP數(shù)據(jù)報(bào)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu):
/** This is the standard ICMP header only that the u32_t data *is split to two u16_t like ICMP echo needs it. *This header is also used for other ICMP types that do not *use the data part. */PACK_STRUCT_BEGINstruct icmp_echo_hdr {PACK_STRUCT_FLD_8(u8_t type);// 類型字段PACK_STRUCT_FLD_8(u8_t code);// 代碼字段PACK_STRUCT_FIELD(u16_t chksum); // 校驗(yàn)和字段PACK_STRUCT_FIELD(u16_t id);// 標(biāo)識(shí)符字段PACK_STRUCT_FIELD(u16_t seqno);// 序號(hào)字段} PACK_STRUCT_STRUCT;PACK_STRUCT_END操作:
#define ICMPH_TYPE(hdr) ((hdr)->type) // 讀取類型字段#define ICMPH_CODE(hdr) ((hdr)->code) // 讀取代碼字段#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) // 設(shè)置類型字段#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) // 設(shè)置代碼字段10.5.2 ICMP類型字段#define ICMP_ER0/* 回顯回答 */#define ICMP_DUR3/* 目的不可達(dá) */#define ICMP_SQ4/* 源站抑制 */#define ICMP_RD5/* 重定向 */#define ICMP_ECHO 8/* 回顯請(qǐng)求 */#define ICMP_TE11/* 數(shù)據(jù)報(bào)超時(shí) */#define ICMP_PP12/* 數(shù)據(jù)報(bào)參數(shù)錯(cuò)誤 */#define ICMP_TS13/* 時(shí)間戳請(qǐng)求 */#define ICMP_TSR 14/* 時(shí)間戳回答 */#define ICMP_IRQ 15/* 信息請(qǐng)求 */#define ICMP_IR16/* 信息回答 */#define ICMP_AM17/* 地址掩碼請(qǐng)求 */#define ICMP_AMR 18/* 地址掩碼回答 */10.5.3 目的不可達(dá)代碼字段/** ICMP目的不可達(dá)代碼字段 */enum icmp_dur_type {/** 網(wǎng)絡(luò)不可達(dá) */ICMP_DUR_NET= 0,/** 主機(jī)不可達(dá) */ICMP_DUR_HOST= 1,/** 協(xié)議不可達(dá) */ICMP_DUR_PROTO = 2,/** 端口不可達(dá) */ICMP_DUR_PORT= 3,/** 需要分片但不分片置位 */ICMP_DUR_FRAG= 4,/** 源路由失敗 */ICMP_DUR_SR= 5};

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀