TCP協議疑難問題集錦6

2021-06-23 03:16:50 字數 1309 閱讀 5469

疑難雜症21:路由器和tcp的互動

雖然有了5.2.4節介紹的主動的擁塞檢測,那麼路由器能不能做點什麼幫助檢測擁塞呢?這種對路由器的擴充套件是必要的,要知道,每天有無數的tcp要通過路由器,雖然路由器不管tcp協議的任何事(當然排除連線跟蹤之類的,這裡所說的是標準的ip路由器),但是它卻能以一種很簡單的方式告訴tcp的兩端ip網路發生了擁堵,這種方式就是當路由器檢測到自己發生輕微擁堵的時候隨機的丟包,隨機丟包而不是連續丟包對於tcp而言是有重大意義的,隨機丟包會使tcp發現丟棄了個別的分段而後續的分段仍然會到達接收端,這樣tcp傳送端就會接收到3個冗餘ack,然後進入快速重傳/快速恢復而不是慢啟動。

這就是路由器能幫tcp做的事。

6.其它

疑難雜症22:如何學習tcp

很多人發帖問tcp相關的內容,接下來稀里嘩啦的就是讓看《tcp/ip詳解》和《unix網路程式設計》裡面的特定章節,我覺得這種回答很不負責任。因為我並不認為這兩本書有多大的幫助,寫得確實很不錯,然而可以看出richard stevens是乙個實用主義者,他喜歡用例項來解釋一切,《詳解》通篇都是用tcpdump的輸出來講述的,這種方式只是適合於已經對tcp很理解的人,然而大多數的人是看不明白的。

如果想從設計的角度來說,這兩本書都很爛。我覺得應該先看點入門的,比如wiki之類的,然後看rfc文件,793,896,1122等),這樣你就明白tcp為何這麼設計了,而這些你永遠都不能在richard stevens的書中得到。最後,如果你想,那麼就看一點richard stevens的書,最重要的還是寫點**或者敲點命令,然後抓包自己去分析。

疑難雜症23:linux,windows和網路程式設計

我覺得在linux上寫點tcp的**是很不錯的,如果有bsd那就更好了。不推薦用winsock學習tcp。雖然微軟聲稱自己的api都是為了讓事情更簡單,但實際上事情卻更複雜了,如果你用winsock學習,你就要花大量的時候去掌握一些和網路程式設計無關但是windows平台上卻少不了的東西

6.1.總結

tcp協議是乙個端到端的協議,雖然話說它是乙個帶流量控制,擁塞控制的協議,然而正是因為這些所謂的控制才導致了tcp變得複雜。同時這些特性是互相雜糅的,流量控制帶來了很多問題,解決這些問題的方案最終又帶來了新的問題,這些問題在解決的時候都只考慮了端到端的意義,但實際上tcp需要盡力而為的ip提供的網路,因此擁塞成了最終的結症,擁塞控制演算法的改進也成了乙個單獨的領域。

在學習tcp的過程中,切忌一鍋粥一盤棋的方式,一定要分清楚每乙個演算法到底是解決什麼問題的,每乙個問題和其他問題到底有什麼關聯,這些問題的解決方案之間有什麼關聯,另外tcp的發展歷史也最好了解一下,這些都搞明白了,tcp協議就徹底被你掌控了。接下來你就可以學習socket api了,然後高效的tcp程式出自你手!

MS SQL Server 疑難問題

有一表a id date name 1 2007 01 01 ccc 1 2007 01 01 ddd 1 2007 01 01 vv 1 2007 02 01 ttttt 2 2007 01 01 gg 3 2007 01 02 ccc 3 2007 01 01 ccc 4 2007 01 04 ...

python疑難問題

python的列表之間有關係嗎?group queue for in range 2 各組的子佇列 queue queue 組佇列,控制組與組之間的執行順序,因為每個組的專案要一起執行 group queue 6 5 for i in range len group queue print queu...

C 疑難問題 const static

關鍵字const 指定用其宣告的內容保持不變 1.標識變數 代替 define來宣告常量 const doble pi 3.14159 2.標識方法 標識類方法,可以防止方法修改類中不可變的資料成員 class.h class a class.cpp int getvalue const 3.con...