1.tcp相關
tcp網路故障模式。
1)永久或臨時網路中斷
應用程式和tcp/ip棧不會知道這種情況,傳送資料會超時重發。如果路由器返回主機不可達,那麼會斷開連線,並返回ehostunreach或enetunreach錯誤。
2)對等應用程式奔潰
果對等的應用程式只是奔潰或終止,那麼對等tcp會傳送乙個fin
3)執行對等應用程式主機奔潰
保持活躍機制和心跳訊號。
保持訊號機制會檢測死連線,它會在一段時間後傳送乙個特殊的段,以判斷連線的狀態。
1)在這個過程中,如果對等主機可達,但應用程式沒有執行,那麼會傳送乙個rst響應,並斷開連線,然後向應用程式返回乙個econnreset錯誤,這種原因通常為主機崩潰重啟。
2)如果對等的應用程式只是奔潰或終止,那麼對等tcp會傳送乙個fin。
3)如果對等主機沒有返回rst響應或ack響應,那麼保持訊號機制會一直傳送,知道認為可以停止為止。這時,會丟棄連線,並返回etimeout錯誤,如果路由器返回乙個icmp主機或網路不可達時,會向應用程式返回ehostunreach或enetunreach錯誤。
這個保持訊號機制一般會在2小時後傳送,一般會75秒後傳送一次,這種間隔根據不同系統可以修改和不同。
心跳訊號的兩種方式:1)如果有固定報文型別的報文頭,那麼可以增加乙個心跳報文型別。2)如果沒有固定報文型別的報文頭,那麼可以建立乙個單獨連線專門來傳送心跳訊號。
tcp立即傳送資料的情況:
1)緩衝區的資料可以構成乙個mss尺寸的段、
2)連線空閒,並且可以清空傳送緩衝區。
3)禁用nagle演算法,並且可以清空傳送緩衝區
4)有緊急資料需要傳送
5)有一小段「佔時」無法傳送的資料
6)對等實體接受視窗至少是半開著的
7)需要重傳乙個段
8)需要為對等實體返回乙個ack
9)需要發布乙個視窗更新
等待時間time_wait為2msl.
rst可能會打斷time_wait。(兩個情況可能傳送rst,一些自然情況,或者設定so_linger選項的l_linger為0)
可以使用so_reuseaddr將tcp繫結到已經使用的埠上,這可以解決time_wait等待問題。
可以使用套接字選項tcp_nodealy來禁用nagle演算法。、
將sockaddr_in清零
不要忘記網路序列
不要講ip位址和埠號直接放入程式。
對於TCP IP協議的一些總結
曾經對三次握手的一些疑惑 最後形成的幀在網路中是如何傳遞的 參考鏈結 最近不知道怎麼回事跟網路幹上了,就是想弄明白資料在網路中到底是怎麼傳輸 雖然想這些問題想的腦袋疼,但隨著思考的深入離真相越來越近,對這些問題也越來越清晰。為了不讓千千萬的腦細胞白白犧牲,就在此做個記錄方便以後悼念他們。tcp和ip...
HTML中最重要內容之一 表單
表單的用處有很多隨處可見,例如,在進行使用者註冊時,就必須通過表單來填寫使用者的相關資訊。我們首先介紹表單的概念和用途,然後介紹form屬性 含義action 表單的處理程式,也就是表單收集到的資料將要提交的程式位址 name 為了防止表單資訊在提交到後台處理程式時出現混亂而設定的名稱 method...
一些開源協議
gpl 如果使用他人的遵循gpl協議的軟體整合到你自己的軟體中,你自己的軟體自動遵循gpl協議,必須允許任何人免費使用你的軟體。對於你自己的程式源 你可以免費散發,也可以收取一定的費用。lgpl 主要用於一些庫函式,設計它的初衷是想讓它可以被一些商業軟體所使用,擴大它的應用範圍。可以設計使用遵循lg...