我正在C#上開發一個服務器(使用*異步方法)。一切正常,直到一方違反協議(例如服務器攻擊)。協議錯誤套接字服務器
以下結構的客戶端和服務器交換消息:
- 前4個字節定義以字節
- 消息體的長度(N)以下的N個字節定義消息體
如果有人發送錯誤的長度 - 此客戶端和服務器之間的所有通信變得不可預測。
所以這個想法是創建一個最簡單的方法自同步協議。
我正在使用TCP協議,所以我的想法是將消息分解成數據包,並且沒有兩個消息應該共享相同的數據包 - 這樣我就可以忽略協議違規並恢復通信,如果有的話出錯。
我想爲此使用TCP,因此數據包將與TCP段相同。但也有少數漁獲:
- 的MTU(其定義了MSS)可能會有所不同,並沒有爲緩衝區大小沒有規定值I可以使用(糾正我,如果我錯了)
- 我不能」 t找到直接處理TCP段的方法(沒有「流」抽象)
我是socket服務器編程的新手,所以我需要幫助。也許有人可以共享這個問題的常見解決方案(防故障協議),或者描述常見的陷阱,或者提供有用的鏈接。
我在.NET下開發,如果可以避免,我不想使用任何P/Invokes。
好的,如果有人在傳輸中插入幾個破碎的字節,我應該怎麼做。例如,在「方法索引」和「消息長度」之間 – dipyalov
除非你打算進行比CRC校驗更奇妙的事情(例如[錯誤檢測和校正編碼](http://en.wikipedia.org/wiki/) Error_detection_and_correction)),那麼我不知道如何檢測插入的字節不是預期的消息索引或消息長度。 –