Linux核心分析

來源:互聯網
上載者:User

核心版本:2.6.34

在發送報文時,可以調用函數setsockopt()來設定相應的選項,本文主要分析IP選項的產生,發送以及 接收所執行的流程,選取了LSRR為例子進行說明,主要分為選項的產生、選項的轉寄、選項的接收三部分。

先看一個來源站點路 由選項的例子,下文的說明都將以此為例。

主機IP:192.168.1.99

源路由:192.168.1.1 192.168.1.2 192.168.1.100 [dest ip]

來源站點路由選項在各個主機上的情況:

該圖與<TCP/IP卷一>上的樣本不同,因為這裡的選項[#R1, R2, D]是以實際傳輸中的形式標註的,下圖是來源站點路由選項在此過程 中的具體形式:

建立socket時, 可以使用setsockopt()來設定建立socket的各種屬性,setsockopt()最終調用系統介面sys_setsockopt()。

sys_setsockopt ()

level(層級)指定系統中解釋選項的代碼:通用的套介面代碼,或某個特定協議的代碼。level==SOL_SOCKET是通用的套接 口選項,即不是針對於某個協議的套介面的,使用通過函數sock_setsockopt()來設定選項;level其它值:IPPROTO_IP, IPPROTO_ICMPV6, IPPROTO_IPV6則是特定協議套介面的,使用sock->ops->setsockopt(通訊端特定函數)來設定選項。

if (level == SOL_SOCKET)      err = sock_setsockopt(sock, level, optname, optval, optlen);     else err = sock->ops->setsockopt(sock, level, optname, optval, optlen);

下面具體說明這個例子,產生選項 - 使用setsockopt()可以設定IP選項,形式如下:

setsockopt(fd, IPPROTO_IP, IP_OPTIONS, &opt, optlen);

其中傳入的opt格式如下:

無論是何種報文(對應不同的sock),設定IP選項最終都會調用ip_setsockopt()。比如建立 的UDP socket,則調用流程為:sock->ops->setsockopt() => udp_setsockopt()  -> ip_setsockopt()。而 處理IP選項的主要是由do_ip_setsockopt()來完成的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.