最近看完了大部頭著作
《http權威指南》
,對於此類指南類、手冊類圖書,往往讓我們聯想到的就是枯燥無味的使用講解、技術指標講解......使人頭大。但是這本書卻讓我覺得讀起來很「清新」,一方面作者用了淺顯易懂的語言和大量的圖示讓我們很容易知所以然,另一方面應該是我一直以來對網路程式設計的興趣和此書的內容有很大的契合點,今天要講的內容也是與自己的興趣有關的http協議中有關tcp的部分,是從書中第四章——」連線管理「的部分內容總結而來。
《構建高效能服務的考量》。
建立一條新的tcp連線時,tcp兩端之間會交換一系列的ip分組,如果連線只是用來傳送少量的資料,相比而這種建立連線的過程會大大影響http的效能。
我們都知道網際網路自身是無法保證可靠的分組傳輸的,所以tcp實現了自己的確認機制來確保資料的傳輸成功。在這種確認機制中使用的就是確認報文,由於確認報文很小,於是tcp將要返回的確認資訊與輸出的資料分組結合在一起傳送可以更有效的利用網路。為了增加確認報文找到同向傳輸資料分組的可能性,很多tcp協議棧都實現了一種「延遲確認」演算法——在乙個特定的視窗時間(通常是100-200毫秒)內將輸出確認放在緩衝區中,以尋找能夠捎帶它的輸出資料分組,否則超出這個時段就將確認資料單獨傳送。
為了更好的保護網路,tcp慢啟動限制了乙個tcp端點在任意時刻可以傳輸的分組數。tcp資料傳輸起初會限制傳輸速度(傳輸分組數),如果資料成功傳輸,會隨著時間的推移提高傳輸速度(傳輸分組數)。如果某個http事務有大量資料要傳送,是不能一次將所有分組都傳送出去的。必須依賴慢啟動逐漸的開啟擁塞視窗。
如果tcp連線總是傳送大量包含少量資料的分組,網路的效能就會嚴重下降。nagle演算法就是試圖在傳送乙個分組之前,將大量tcp資料繫結在一起傳送(鼓勵傳送全尺寸的段,比如乙太網上的段大小是1500位元組,否則就進行快取,要麼當所有其他分組都被確認之後,nagle演算法才允許傳送非全尺寸的分組),以提高網路效率。
關於time_wait狀態的解釋請看我的這篇博文
《網路程式設計釋疑之:tcp的time_wait狀態在伺服器開發中的影響?》
,之前time_wait時間的設定為2分種之多是因為早期路由器的處理速度還比較慢,但是現在高速路由器的使用已經大大弱化了這個問題,所以對於web伺服器來說可以通過作業系統設定來減小time_wait狀態的持續時間,否則如果伺服器存在大量的time_wait狀態會大大影響伺服器的效能。至於埠耗盡的情況則是針對少量客戶端主機對web伺服器進行基準測試時可能出現的問題,與tcp連線四元組有關。
參考書籍:
《http權威指南》
yaocoder
HTTP事務的延遲 TCP的影響
最近看完了大部頭著作 http權威指南 對於此類指南類 手冊類圖書,往往讓我們聯想到的就是枯燥無味的使用講解 技術指標講解.使人頭大。但是這本書卻讓我覺得讀起來很 清新 一方面作者用了淺顯易懂的語言和大量的圖示讓我們很容易知所以然,另一方面應該是我一直以來對網路程式設計的興趣和此書的內容有很大的契合...
摘抄 影響HTTP軟體的TCP時延
建立一條新的tcp連線時,甚至是在傳送任意資料之前,tcp軟體之間都會交換一系列的ip分組,對連線的有關引數進行溝通。如果連線只用來傳送少量資料,這些交換過程就會嚴重降低http的效能。通常http事務都不會交換太多資料,此時,syn syn ack握手會產生乙個可測量的時延。tcp連線的ack分組...
try catch對Spring事務的影響
一 spring 的預設事務機制,當出現unchecked異常時候回滾,checked異常的時候不會回滾。異常中unchecked異常包括error和runtime異常。需要try catch或向上丟擲的異常,為checked異常比如ioexception,也就是說程式丟擲runtime異常的時候才...