為什么TCP/IP的接收方需要在ACK和seq上加一?

作者:車小胖
鏈接:https://www.zhihu.com/question/34400902/answer/191928024
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

TCP是一個有狀態(tài)協(xié)議,A與B之間有一個TCP連接,C想搞破壞,于是想偽造A的IP給B發(fā)一個Reset,要分兩種情景:情景一:C處于A與B之間流量的路徑上C可以捕獲到A、B的IP包,偽造是小菜一碟,比如大防火墻reset用戶連接情景二:C不在A與B之間流量的路徑上C可以在世界的任何角落,偽造一個合法TCP報文,最關鍵是TCP字段里的sequence number 、acknowledged number,只要這兩項位于接收者滑動窗口內,就是合法的,對方可以接收并Reset A、B之間的TCP連接。而TCP握手采用隨機序列號(不完全隨機,而是隨著時間流逝而線性增長,到了2^32盡頭再回滾),為的就是讓攻擊者更難以猜測sequence number,因為偽造的sequence number不在合法范圍內,而被接收方丟棄,增加安全性。至于加一,不知道你說的是SYN標志位占據(jù)sequence的一個序號,還是對方確認加一?如果是前者,那是因為SYN是建立連接的關鍵字段,而為了確保對方接收到,使用超時重傳機制,TCP規(guī)定,只為有數(shù)據(jù)的TCP報文重傳,SYN占據(jù)一個序號(可以認為只有一個字節(jié)數(shù)據(jù)的報文),所以TCP會重傳SYN報文。如果是后者,對方接收到數(shù)據(jù),比如sequence number = 1000,TCP Payload = 1000,數(shù)據(jù)第一個字節(jié)編號為1000,最后一個為1999對方會回應一個確認報文,確認號為2000,意味著編號2000前的字節(jié)接收完成,準備接收編號為2000及更多的數(shù)據(jù)。這里的加一表現(xiàn)為 1999 + 1 = 2000。

暫時還是沒搞太清楚,以后再說。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容