TCP header的封包較為複雜,且TCP有保證可靠傳輸的機制,所以花兩小節來講,第一小節先講理論,TCP是怎麼保證可靠傳輸、壅塞控制等等。
TCP是基於bytes stream的協議,意思是為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回一個相應的確認信息(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設為已丟失並進行重傳。
UDP只管傳出去就對了,TCP比較複雜,有三個階段,分別為連接創建,封包傳輸和連接終止
為什麼要三次交握呢?設想一下當你打電話給朋友,剛接通的瞬間就是要確認連結
A: 喂,有聽到我的聲音嗎?
B: 有,那你有聽到我的聲音嗎?
A: 有,….(開始聊天)
封包傳輸:TCP在封包傳輸上有壅塞控制和滿開始的機制,一開始不會一次發大量的封包,而是少少的發,越來越多,之道能塞滿頻寬,並且會對每次的封包加一個序號,使用ACK來判定是否為同個connection,如果封包掉了會重傳,Server收到封包後也會通知client收到了,否則client會重傳
連接終止:用四向揮手終止連接
下一篇,我們會對TCP的header解碼並且print出來,看連結的建立、封包的傳輸、連結的終止過程
系列的成果將會放在這:https://github.com/kaichiachen/pytcpdump
文章配合著程式碼有助於學習 :)