第1章 緒論
1.1 引言
1.2 ipv6和kame的簡史
1.3 kame發行版概述
1.3.1 源代碼樹結構
1.3.2 構建過程
1.4 bsd網絡實現概述
1.5 源代碼描述
1.5.1 排版約定
1.5.2 源代碼描述示例
1.5.3 預處理器變量
1.5.4 網絡設備與體係結構假設
1.6 mbuf與ipv6
1.6.1 常見的mbuf操縱宏和函數
1.6.2 mbuf標簽
1.6.3 ipv6的mbuf要求
1.6.4 診斷mbuf鏈
第2章 ipv6編址體係結構
2.1 引言
2.2 ipv6地址
2.3 ipv6地址的文本錶示
2.4 地址範圍
2.4.1 範圍區域
2.4.2 區域索引
2.4.3 範圍受限地址的文本錶示
2.4.4 單播站點本地地址的廢棄
2.5 ipv6地址格式
2.5.1 接口標識符的産生
2.5.2 有關地址格式的注解
2.5.3 多播地址格式
2.6 節點地址要求
2.7 ipv6地址空間管理
2.8 代碼介紹
2.8.1 ipv6地址結構:in6_addr{}與sockaddr_in6{}
2.8.2 宏與變量
2.9 對範圍區域的處理
2.9.1 範圍區域的初始化
2.9.2 範圍區域id
2.9.3 地址結構中的區域id
2.9.4 與範圍相關的實用函數
2.10 接口地址結構
2.10.1 ifaddr{}和in6_ifaddr{}結構
2.10.2 in6_ifreq{}和in6_aliasreq{}結構
2.10.3 多播地址結構
2.11 ipv6前綴結構
2.12 地址操縱程序概述
2.13 ipv6的接口初始化
2.13.1 in6_if_up()函數
2.13.2 in6_ifattach()函數
2.13.3 in6_ifattach_loopback{}函數
2.13.4 in6_ifattach_linklocal()函數
2.13.5 get_ifid()函數
2.13.6 get_hw_ifid()函數
2.13.7 get_rand_ifid()函數
2.13.8 in6if_do_dad()函數
2.14 ipv6接口地址配置
2.14.1 in6_control()函數
2.14.2 in6_update_ifa()函數
2.14.3 in6_joingroup()和in6_leavegroup()函數
2.14.4 in6_addmulti()和in6_delmulti()函數
2.14.5 in6_ifinit()函數
2.14.6 in6_ifaddloop()和in6_ ifloop_request()函數
2.15 刪除ipv6地址
2.15.1 in6_purgeaddr()函數
2.15.2 in6_ifremloop()函數
2.15.3 in6_unlink_ifa()函數
2.16 用地址配置工具進行的操作
第3章 ipv6
3.1 引言
3.2 ipv6首部格式
3.3 ipv6擴展首部
3.3.1 擴展首部的順序
3.3.2 逐跳選項首部
3.3.3 目的選項首部
3.3.4 路由首部
3.3.5 片首部
3.3.6 ipv6選項
3.4 源地址選擇
3.4.1 默認地址選擇
3.4.2 源地址選擇
3.4.3 目的地址選擇
3.5 代碼介紹
3.5.1 統計數據
3.5.2 首部結構
3.5.3 ip6protosw{}結構
3.6 mbuf中的ipv6分組地址信息
3.6.1 ip6_setdstifaddr()函數
3.6.2 ip6_getdstifaddr()函數
3.6.3 ip6_setpktaddrs()函數
3.6.4 ip6_getpktaddrs()函數
3.7 輸入處理:ip6_input()函數
3.8 逐跳選項首部的處理:ip6_hopopts_input()函數
3.8.1 對每個選項進行處理:ip6_ process_hopopts()函數
3.8.2 處理未知選項:ip6_unknown_opt()函數
3.9 對目的選項首部的處理:dest6_input()函數
3.10 已分片分組的重裝
3.10.1 用於分組重裝的結構
3.10.2 frag6_input()函數
3.11 對路由首部的處理:route6_input()函數
3.12 轉發:ip6_forward()函數
3.13 輸齣處理
3.13.1 源地址選擇:in6_selectsrc()函數
3.13.2 路由選擇:ip6_selectroute()函數
3.13.3 ip6_output()函數
3.13.4 構建擴展首部:ip6_copyexthdr()函數
3.13.5 分割首部:ip6_splithdr()函數
3.13.6 插入特大淨荷選項:ip6_insert_jumboopt()函數
3.13.7 分片:ip6_insertfraghdr()函數
3.13.8 路徑mtu判斷:ip6_getpmtu()函數
3.13.9 多播環迴:ip6_mloopback()函數
第4章 icmpv6
4.1 引言
4.2 icmpv6報文
4.2.1 目的不可達報文
4.2.2 分組太長報文
4.2.3 超時報文
4.2.4 參數問題報文
4.2.5 迴送請求報文
4.2.6 迴送應答報文
4.2.7 icmpv6報文處理規則
4.3 pmtu發現機製
4.4 節點信息查詢
4.4.1 節點信息報文的格式
4.4.2 noop查詢
4.4.3 支持的qtype查詢
4.4.4 節點名查詢
4.4.5 節點地址查詢
4.4.6 ipv4地址查詢
4.5 代碼介紹
4.5.1 統計數據
4.5.2 icmpv6首部
4.6 icmpv6輸入處理
4.6.1 icmp6_input()函數
4.6.2 錯誤通知:icmp6_notify_error()函數
4.7 pmtu發現的實現
4.8 icmpv6輸齣處理
4.8.1 發送錯誤:icmp6_error()函數
4.8.2 錯誤速率限製:icmp6_ratelimit()函數
4.8.3 icmp6_reflect()函數
4.9 節點信息查詢的實現
4.9.1 類型和變量
4.9.2 ping6命令:發送查詢
4.9.3 ping6命令:接收應答
4.9.4 ping6命令:打印支持的qtype
4.9.5 ping6命令:打印節點地址
4.9.6 查詢處理:ni6_input()函數
4.9.7 節點名的操作
4.9.8 創建節點地址應答:ni6_store_addrs()函數
4.10 節點信息操作
第5章 鄰居發現和無狀態地址自動配置
5.1 引言
5.2 鄰居發現協議概述
5.3 無狀態地址自動配置概述
5.4 鄰居發現協議報文
5.5 鄰居發現協議報文的交換示例
5.6 鄰居發現協議分組類型及格式
5.6.1 路由器請求報文
5.6.2 路由器廣告報文
5.6.3 鄰居請求報文
5.6.4 鄰居廣告報文
5.6.5 重定嚮報文
5.7 鄰居發現選項類型及格式
5.7.1 鏈路層地址選項
5.7.2 前綴信息選項
5.7.3 重定嚮首部選項
5.7.4 mtu選項
5.7.5 路由信息選項
5.8 下一跳判定和地址解析
5.9 鄰居不可達檢測算法
5.10 無狀態地址自動配置
5.10.1 地址的構成和地址狀態
5.10.2 重復地址檢測算法
5.10.3 處理路由器廣告
5.10.4 隱私擴展
5.11 路由器特有的操作
5.11.1 發送未經請求的路由器廣告
5.11.2 處理路由器請求
5.11.3 處理路由器廣告
5.12 主機特有的操作
5.12.1 發送路由器請求
5.12.2 處理路由器廣告
5.12.3 默認路由器選項
5.13 代碼介紹
5.13.1 鄰居發現報文定義
5.13.2 鄰居緩存:llinfo_nd6{}結構
5.13.3 操作變量:nd_ifinfo{}結構
5.13.4 默認路由器:nd_defrouter{}結構
5.13.5 前綴:nd_prefix{}結構
5.13.6 前綴控製:nd_prefixctl{}結構
5.13.7 鄰居發現報文選項:nd_opts{}結構
5.13.8 dad隊列條目:dadq{}結構
5.13.9 ipv6地址:in6_ifaddr{}結構
5.13.10 目的地緩存
5.13.11 操作常量
5.14 初始化函數
5.14.1 nd6_init()函數
5.14.2 nd6_ifattach()函數
5.15 鄰居緩存管理函數
5.15.1 nd6_rtrequest()函數
5.15.2 nd6_cache_lladdr()函數
5.15.3 nd6_lookup()函數
5.15.4 nd6_free()函數
5.15.5 nd6_timer函數
5.16 鄰居發現協議報文處理函數
5.16.1 nd6_ns_output()函數
5.16.2 nd6_ns_input()函數
5.16.3 nd6_na_input()函數
5.16.4 nd6_na_output()函數
5.16.5 nd6_rs_input()函數
5.16.6 nd6_ra_input()函數
5.16.7 icmp6_redirect_input()函數
5.16.8 icmp6_redirect_output()函數
5.17 鄰居發現協議報文選項處理函數
5.17.1 nd6_option_init()函數
5.17.2 nd6_option()函數
5.17.3 nd6_options()函數
5.18 默認路由器管理函數
5.18.1 defrouter_addreq()函數
5.18.2 defrouter_delreq()函數
5.18.3 defrouter_addifreq()函數
5.18.4 defrouter_delifreq()函數
5.18.5 defrouter_lookup()函數
5.18.6 defrouter_select()函數
5.18.7 defrtrlist_del()函數
5.18.8 defrtrlist_update()函數
5.19 前綴管理函數
5.19.1 nd6_prelist_add()函數
5.19.2 prelist_remove()函數
5.19.3 prelist_update()函數
5.19.4 find_pfxlist_reachable_router()函數
5.19.5 與在鏈條件有關的前綴和地址狀態
5.19.6 pfxlist_onlink_check()函數
5.19.7 nd6_prefix_onlink()函數
5.19.8 nd6_prefix_offlink()函數
5.20 無狀態地址自動配置函數
5.20.1 in6_ifadd()函數
5.20.2 in6_tmpifadd()函數
5.20.3 regen_tmpaddr()函數
5.21 重復地址檢測函數
5.21.1 nd6_dad_find()函數
5.21.2 nd6_dad_starttimer()函數
5.21.3 nd6_dad_stoptimer()函數
5.21.4 nd6_dad_start()函數
5.21.5 nd6_dad_stop()函數
5.21.6 nd6_dad_timer()函數
5.21.7 nd6_dad_duplicated()函數
5.21.8 nd6_dad_ns_output()函數
5.21.9 nd6_dad_ns_input()函數
5.21.10 nd6_dad_na_input()函數
5.22 其他函數
5.22.1 nd6_is_addr_neighbor()函數
5.22.2 nd6_output()函數
5.22.3 rt6_flush()函數
5.22.4 nd6_rtmsg()函數
第6章 傳輸層的實現
6.1 簡介
6.2 ipv6上的tcp和udp
6.3 ipv6的僞首部
6.4 ipv4校驗和與ipv6校驗和的區彆
6.5 ipv4映射的ipv6地址的用法
6.6 代碼介紹
6.7 對pcb和套接字的一般操作
6.7.1 ipv6 pcb的分配:in_pcballoc()函數
6.7.2 綁定本地地址:in6_pcbbind()函數
6.7.3 固定遠程地址:in6_pcbconnect()函數
6.7.4 in6_pcbladdr()函數
6.7.5 搜索pcb條目:in6_ pcblookup_local()函數
6.7.6 搜索ipv4映射的pcb:in_pcblookup_local()函數
6.7.7 搜索pcb條目:in6_pcblookup_hash()函數
6.7.8 搜索ipv4映射的pcb:in_pcblookup_hash()函數
6.7.9 分離一個ipv6 pcb:in6_pcbdetach()函數
6.7.10 控製報文信令:in6_pcbnotify()函數
6.7.11 清空pcb緩存路由:in6_rtchange()函數
6.7.12 獲取對等實體地址:in6_setpeeraddr()函數
6.7.13 獲取本地地址:in6_setsockaddr()函數
6.8 ipv6上的tcp
6.8.1 ip6protosw{}的ipv6上的tcp實例
6.8.2 tcp輸齣
6.8.3 初始化首部:tcp_fillheaders()函數
6.8.4 tcp輸入:tcp6_input()和tcp_input()函數
6.8.5 tcp控製輸入:tcp6_ctlinput()函數
6.8.6 tcp用戶請求
6.9 ipv6上的udp
6.9.1 ip6protosw{}的ipv6上的udp實例
6.9.2 udp輸齣:udp6_output()函數
6.9.3 udp輸入:udp6_input()函數
6.9.4 udp控製輸入:udp6_ctlinput()函數
6.9.5 udp用戶請求的處理
6.10 原始ipv6
6.10.1 原始ipv6統計數據
6.10.2 原始ipv6輸齣:rip6_output()函數
6.10.3 原始ipv6輸入:rip6_input()函數
6.10.4 icmpv6輸入:icmp6_rip6_input()函數
6.10.5 原始ipv6控製輸入:rip6_ctlinput()函數
6.10.6 原始ipv6控製輸齣:rip6_ctloutput()函數
6.10.7 原始ipv6用戶請求處理
6.11 對ipv4映射的ipv6地址操作的總結
6.12 用netstat查看ipv6連接
6.13 配置ipv4映射的ipv6地址支持
第7章 套接字api擴展
7.1 簡介
7.2 基本套接字api
7.2.1 基本定義
7.2.2 接口標識
7.2.3 在af_inet6套接字上進行ipv4通信
7.2.4 地址和名字轉換函數
7.2.5 基本套接字選項
7.3 高級套接字api——[rfc3542]
7.3.1 一些高級的定義
7.3.2 ipv6原始套接字
7.3.3 輔助數據介紹
7.3.4 ipv6分組信息
7.3.5 處理ipv6擴展首部
7.3.6 路徑mtu的api
7.3.7 用於一批“r”命令的套接字擴展
7.3.8 列錶總結套接字選項
7.4 ipv6套接字api的內核實現
7.4.1 代碼介紹
7.4.2 ip6_pktopts{}結構
7.4.3 ipv6套接字選項處理:ip6_ctloutput()函數
7.4.4 獲取套接字選項:ip6_getpcbopt()函數
7.4.5 設置套接字選項與輔助數據
7.4.6 清理:ip6_freepcbopts()函數
7.4.7 ipv6多播套接字選項
7.4.8 ipv6原始套接字選項:ip6_raw_ctloutput()函數
7.4.9 icmpv6套接字選項:rip6_ctloutput()函數
7.4.10 傳送輸入信息:ip6_savecontrol()函數
7.5 套接字選項與輔助數據示例
7.5.1 發送路徑示例
7.5.2 接收路徑示例
7.6 庫函數的實現:libinet6
7.6.1 inet_pton()函數和inet_pton6()函數
7.6.2 inet_ntop()函數和inet_ntop6()函數
7.6.3 getaddrinfo()函數
7.6.4 地址排序示例
7.6.5 freeaddrinfo()函數
7.6.6 gai_strerror()函數
7.6.7 getnameinfo()函數
7.6.8 其他庫函數
參考文獻
索引
· · · · · · (
收起)