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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ppp协议pap验证过程状态转移图_电脑网络知识:TCP协议的高级特性,你所不知道的TCP...

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ppp协议pap验证过程状态转移图_电脑网络知识:TCP协议的高级特性,你所不知道的TCP... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. TCP狀態轉換 要清楚的掌握在連接建立、連接終止以及數據傳送時所發生的不同事件,TCP協議以有限狀態機的形式來實現。有限狀態機是能夠經歷有限數目狀態的一種機器。這個機器總是處于某一個狀態中。若沒有事件發生,這個機器就一直處于那個狀態。事件可使機器轉入到一個新的狀態,換言之,事件是加到狀態上的輸入。它可以改變這個狀態并產生輸出。下表給出了TCP的各種狀態。

表8-1 TCP的各種狀態

這些狀態都用橢圓表示。從一個狀態通過有向線可轉換到另一個狀態。每一條連線都注上用斜線隔開的兩個字符串。第一個字符串是TCP所收到的輸入。第二個字符串是TCP所發送的輸出。下圖給出了TCP協議的狀態轉換圖,這對客戶端和服務器端都適用。圖中的虛線表示服務器通常要經過轉換,實線表示客戶通常要經過的轉換。但是在某些情況下,服務器的轉換可以經過虛線,而客戶的轉換可以經過實線。

圖8-1 TCP狀態轉換圖

二. 傳輸控制塊

二. 傳輸控制塊 TCP是面向連接的傳輸協議。一個連接可以打開很長一段時間。為了控制連接,TCP使用一種結構來保持每一條連接的有關信息。這就叫做傳輸控制塊(TCB)。因為在同一時間內可能存在幾條TCP連接,TCP就以表的形式保存TCB。這個表的名稱也被稱作TCB。 一個TCB中包括許多字段,一些常用的字段如下表所示:

表8-2 TCB常用字段

三. TCP連接創建與釋放實現代碼解析四. TCP報文的上層投遞實現代碼解析五. 滑動窗口實現代碼解析

三. TCP連接創建與釋放實現代碼解析 本實驗中所編寫的代碼只是TCP協議的一個簡單處理過程,在編寫時同學們不需要考慮差錯控制和流量控制,只要能實現TCP協議的基本功能即可。 安裝目錄ExpCNSworkEXPcns_studentetproto_tcp_studentetproto_tcpconn_student下的 netproto_tcpconn_student.h和netproto_tcpconn_student.c這兩個文件完成了協議棧中TCP連接的創建與釋放功能。 netproto_tcpconn_student.h文件中的內容并不多,主要是定義了一個宏__TCP_HALF_CLOSE,這個宏用于控制TCP連接釋放的方式,如果該宏定義為0,則采用三次握手方式關閉TCP連接,反之,如果該宏所定義的值不為0,則采用四次握手方式釋放TCP連接。 netproto_tcpconn_shudent.c文件是協議棧中TCP連接的創建與釋放功能的實現部分,在連接的創建與釋放過程中沒有數據傳輸,即當TCP連接建立以后立即釋放。其中定義了3個函數。下面介紹這些協議棧的實現部分。 函數netp_tcpconn_init_student將會被主線程調用,用于初始化一個TCP連接。在該函數中主要進行一些初始化工作,例如選擇是作為TCP服務器角色進行連接還是作為TCP客戶端角色進行連接、源端口號和目的端口號等。值得注意的是,作為TCP服務器的時候,程序會在指定端口進行監聽。而作為TCP客戶端的時候,該函數會負責向TCP服務器發送一個TCP SYN數據報,從而開始TCP連接過程。該函數中的發送TCP SYN數據報功能需要學生完成。 當有數據到達本機網絡接口時,函數netp_tcpconn_input_student將被調用,并傳遞給這個函數原始數據。在該函數中,需要判斷一些條件值來確定接收到的數據包是否為TCP連接所感興趣的,如果是TCP連接感興趣的數據報,則提交給netp_tcp_input函數處理,如果不是,則返回NETP_PUSH_TO_LWIP交給協議棧繼續處理。 netp_tcp_input函數實現了TCP連接創建和釋放的核心功能。該函數會根據當前的連接狀態和收到的事件做相應的操作并切換到后續狀態。其狀態切換過程如TCP狀態轉換圖所示。四. TCP報文的上層投遞實現代碼解析 安裝目錄ExpCNSworkEXPcns_studentetproto_tcp_studentetproto_tcpif_student下的文件netproto_tcpif_student.h和文件netproto_tcpif_student.c實現了TCP對高層投遞的接口。在netproto_tcpif_student.c中定義了8個函數,其中函數netp_send_tcp、netp_tcp_connect、netp_tcp_listen、netp_tcp_close和is_conn_established為高層協議調用接口。 函數netp_tcp_listen用于創建一個TCP連接,并保持在監聽狀態,這時高層協議充當TCP服務器的角色,當在監聽狀態時,就可以接收TCP客戶端的連接請求。該函數有一個參數為指向用戶回調函數的指針,當連接建立并有數據到來時,用戶回調函數將被調用處理輸入的數據。 函數netp_tcp_connect用于連接到一個TCP服務器,即向TCP服務器發送一個TCP SYN報文用于與服務器三次握手。這時高層協議充當TCP客戶端的角色。該函數也接受一個用戶回調函數的指針參數,其作用與函數netp_tcp_listen的用戶回調函數參數作用相同。 在TCP連接建立以后,高層協議可以調用netp_send_tcp函數發送TCP數據。該函數使用已經建立好的TCP連接將數據發送給目的主機。 函數netp_tcp_close用于終止TCP連接。在調用該函數以后,TCP連接將被釋放,TCB的狀態將變為CLOSED。 netp_con_send_tcp、netp_tcpif_input_student和netp_tcp_input這三個函數不能被高層協議調用,他們的作用是維護TCP連接。 函數netp_tcpif_input_student和netp_tcp_input的作用與netproto_tcp_student.c文件中的netp_tcpif_input_student、netp_tcp_input函數作用類似,用于接受被更新TCP連接狀態。 netp_con_send_tcp函數發送指定類型的、不帶有負載的TCP數據報,用于建立和釋放TCP連接,或者發送確認報文。五. 滑動窗口實現代碼解析 安裝目錄ExpCNSworkEXPcns_studentetproto_tcp_studentetproto_tcpwindow_student下的文件netproto_tcpwindow_student.h和文件netproto_tcpwindow_student.c實現了TCP滑動窗口。在實現中,只對輸出緩沖區使用了滑動窗口機制,對輸入緩沖區并沒有使用滑動窗口機制。 netproto_tcpwindow_student.c中的內容與TCP報文的上層投遞實現中netproto_tcpif_student.c中的內容相近,不同之處在于netproto_tcpwindow_student.c的實現中增加了一個全局的發送緩沖區以及一些滑動窗口控制變量。 netp_send_buff是一個全局數組,類型為u8_t,長度為宏SEND_BUFF_SIZE所定義的數值,SEND_BUFF_SIZE是在一次TCP連接中能傳送的最大字節數。 全局變量wnd_left、wnd_right、wnd_next、recv_wnd_size和send_wnd_size共同維護TCP滑動窗口,wnd_left記錄滑動窗口左沿,wnd_right記錄滑動窗口右沿,wnd_next記錄下一個可發送的字節,recv_wnd_size記錄接收滑動窗口大小,send_wnd_size記錄發送滑動窗口大小。send_wnd_size的默認值為64,值得注意的是,在實際應用中,發送滑動窗口的大小會遠遠大于這個值,在這里使用一個較小的值是為了更方便的觀察滑動窗口的變化。 函數netp_send_tcp、netp_con_send_tcp、netp_tcp_connect、netp_tcp_listen、netp_tcp_close、netp_tcpwindow_input_student、netp_tcp_input、is_conn_established與netproto_tcpif_student.c文件即TCP報文的上層投遞實現中相應函數實現了類似的功能,這里就不再講述。 另外一個函數netp_set_wndsize用于設置接收窗口大小。

六. 實驗中涉及的結構體、宏和函數

六. 實驗中涉及的結構體、宏和函數 在編碼過程中可能會涉及到一些結構體、宏和函數,下表是對他們進行和介紹:

表8-3 實驗涉及的結構體、宏和函數

TCP連接建立和釋放

各主機打開工具區的"拓撲驗證工具",選擇相應的網絡結構,配置網卡后,進行拓撲驗證,如果通過拓撲驗證,關閉工具繼續進行實驗,如果沒有通過,請檢查網絡連接。 本練習將主機A和B作為一組,主機C和D作為一組,主機E和F作為一組。現僅以主機A、B所在組為例,其它組的操作參考主機A、B所在組的操作。實驗開始前,先單擊"初始環境"。 在實驗中,主機A將新接口的IP地址設置為172.16.0.11、主機B使用處于連接狀態的物理接口,將新接口的IP設置為172.16.0.12、主機C將新接口的IP地址設置為172.16.0.13、主機D使用處于連接狀態的物理接口,將新接口的IP地址設置為172.16.0.14、主機E使用處于連接狀態的物理接口,將新接口的IP地址設置為172.16.0.15、主機F將新接口的IP地址設置為172.16.0.16。所有主機使用子網掩碼255.255.255.0,默認網關設置為0.0.0.0。1. 閱讀已存在代碼 TCP協議的實現相對比較復雜,因此在編寫實現代碼之前,請同學們根據TCP狀態轉換圖所示的TCP狀態轉換關系閱讀已經存在的代碼,尤其是函數netp_tcp_input的實現代碼,理解TCP協議的工作機制。2. 設置TCP連接終止方式 各主機打開安裝目錄ExpCNSworkEXPcns_studentetproto_tcp_studentetproto_tcpconn_student下的netproto_tcpconn_student.h文件,將宏__TCP_HALF_CLOSE所定義的值修改為1,從而設定TCP連接采用四次握手方式終止。3. 編碼實現TCP SYN報文的發送 (1)當已經存在的代碼閱讀完畢以后,各主機打開安裝目錄ExpCNSworkEXPcns_studentetproto_tcp_studentetproto_tcpconn_student下的netproto_tcpconn_student.c文件,在函數netp_tcpconn_init_student中添加TCP SYN報文的發送。 (2)構造TCP報頭結構。注意,確認號設置為0,標識為TCP_FLAG_SYN。 (3)構造TCP偽首部結構。長度字段值為htons(TCP_HEADER_LEN)。 (4)計算TCP校驗和。使用inet_chksum函數計算TCP校驗和。4. 所有主機打開協議分析器,開始捕獲數據5. 所有主機調試并運行程序 主機A充當TCP服務器角色,主機B充當TCP客戶端角色,同組同學協商端口號進行連接。6. 各主機停止數據捕獲,觀察實驗現象7. 各主機將__TCP_HALF_CLOSE所定義的值修改為0,重新進行實驗 ● 兩次連接斷開時的方式有什么不同?8. 發送TCP SYN報文的參考代碼如下:

TCP報文的上層投遞的設計與實現

本練習將主機A和B作為一組,主機C和D作為一組,主機E和F作為一組。現僅以主機A、B所在組為例,其它組的操作參考主機A、B所在組的操作。實驗開始前,先單擊"初始環境"。 在實驗中,主機A將新接口的IP地址設置為172.16.0.11、主機B使用處于連接狀態的物理接口,將新接口的IP設置為172.16.0.12、主機C將新接口的IP地址設置為172.16.0.13、主機D使用處于連接狀態的物理接口,將新接口的IP地址設置為172.16.0.14、主機E使用處于連接狀態的物理接口,將新接口的IP地址設置為172.16.0.15、主機F將新接口的IP地址設置為172.16.0.16。所有主機使用子網掩碼255.255.255.0,默認網關設置為0.0.0.0。1. 閱讀已存在代碼 同學們根據TCP狀態轉換圖所示的TCP狀態轉換關系閱讀已經存在的代碼。 分析函數netp_tcp_input的實現代碼與練習一中的函數netp_tcp_input相比較有什么不同之處。2. 構造TCP頭結構 各主機使用已經定義的變量tcp_header編碼構造TCP頭結構,可以在tcp_conn_pcb中查找相應的數值。3. 構造TCP偽首部 各主機使用已經定義的變量tcp_pseudo構造TCP偽首部。在偽首部中,總長度字段值應該為htons(TCP_HEADER_LEN+buff_len)。4. 計算TCP校驗和 各主機編碼實現TCP校驗和的計算,可以使用inet_chksum函數。5. 所有主機打開協議分析器,開始捕獲數據6. 所有主機調試并運行程序 (1)主機A充當TCP服務器角色,主機B充當TCP客戶端角色,同組同學協商端口號進行連接。 (2)當TCP連接建立以后,雙方發送消息。 ● 你收到的信息是什么? (3)輸入quit關閉TCP連接。7. 各主機停止數據捕獲,觀察實驗現象8. 函數netp_send_tcp的參考代碼如下:

TCP滑動窗口協議的設計與實現

本練習將主機A和B作為一組,主機C和D作為一組,主機E和F作為一組。現僅以主機A、B所在組為例,其它組的操作參考主機A、B所在組的操作。實驗開始前,先單擊"初始環境"。 在實驗中,主機A將新接口的IP地址設置為172.16.0.11、主機B使用處于連接狀態的物理接口,將新接口的IP設置為172.16.0.12、主機C將新接口的IP地址設置為172.16.0.13、主機D使用處于連接狀態的物理接口,將新接口的IP地址設置為172.16.0.14、主機E使用處于連接狀態的物理接口,將新接口的IP地址設置為172.16.0.15、主機F將新接口的IP地址設置為172.16.0.16。所有主機使用子網掩碼255.255.255.0,默認網關設置為0.0.0.0。1. 閱讀已存在代碼 同學們根據TCP狀態轉換圖所示的TCP狀態轉換關系和TCP滑動窗口的相關原理,閱讀已經存在的代碼。2. 更新TCP滑動窗口 各主機打開安裝目錄ExpCNSworkEXPcns_studentetproto_tcp_studentetproto_tcpwindow_student下的netproto_tcpwindow_student.c文件在函數netp_update_wnd中進行編輯。根據接收到的ACK報文內容和當前滑動窗口信息,編寫代碼實現TCP滑動窗口的更新。3. 所有主機打開協議分析器,開始捕獲數據4. 所有主機調試并運行程序 (1)主機A充當TCP服務器角色,主機B充當TCP客戶端角色,同組同學協商端口號進行連接。 (2)主機A、B設置接收窗口大小值,這個值應該比較小。 (3)當TCP連接建立以后,雙方發送消息。 ● 你收到的信息是什么? ● 你的發送窗口大小是什么?這個值是由誰決定的? (4)輸入quit關閉TCP連接。5. 各主機停止數據捕獲,觀察實驗現象6. 函數netp_update_wnd的參考代碼如下:

11

總結

以上是生活随笔為你收集整理的ppp协议pap验证过程状态转移图_电脑网络知识:TCP协议的高级特性,你所不知道的TCP...的全部內容,希望文章能夠幫你解決所遇到的問題。

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