2017-08-28 85 views
8

爲了學習的目的,我正在實現TCP(現在只是RFC 793),但我沒有 想法如何測試它。大多數互聯網上的TUN/TAP內容已過時(例如, Linux API調用不再有效),並且不足以解釋。另外,I 感覺就像創建一個設備,並且轉發包等不是用於學習目的的最佳方式 。舉例來說,我寧願只覆蓋socket()listen()connect()accept()send()recv()等的程序,而不是 轉發所有以太網流量的設備/程序負責 bookeeping整個系統,而比一個單一的節目。如何測試Linux上的自定義TCP實現?

我想知道這是否可能。如果不是,我想知道在Linux上測試TCP實現的最簡單方法。

因爲我遵循RFC 793,如果我的應用程序中可以有一個IP(RFC中提到的互聯網 協議)API,那就太好了。這是可能的或做 我必須弄亂TUN/TAP的東西?

謝謝..

+0

我想更好地瞭解你的問題。你有一個你已經實現的TCP協議棧,你希望能夠測試它嗎?至少有兩種方法可以,你想測試你的TCP棧作爲服務器,然後連接任何'標準'客戶端(比如telnet到它)。一些繁重的工作你必須做的是 - 能夠在TCP堆棧上自己實現監聽和接受功能 - 但這是一個起點 - 假設 - 你得到輸入IP數據報。另一種方法是首先將其作爲客戶端進行測試。 – gabhijit

回答

0

所有你需要的是有位(SYN,ACK,FIN等),您的申請已發送,看它是否正常工作,攔截所有的TCP數據包:

enter image description here

它可以簡單地用wireshark或其他嗅探器來完成。測試時,您將看到所有包含您發送的位的TCP數據包。

enter image description here

爲了你想看到你的應用在呼喚,你可以使用GDB或任何其他調試器的Linux系統調用。

1

你可以嘗試設置了兩個同行,一個使用RAW套接字,另一個使用TCP套接字。

如果他們能夠進行通信並且數據包以與TCP相同的方式實際傳遞/恢復,那麼您知道您的自定義實現是成功的。

C sockets

C RAW sockets

C TCP implementation