天天看點

tcp 回顧總結

最近又要開始寫server,趁着周末有時間,重新翻了下tcp/ip第一卷,總結一下回顧翻到的一些東西。

arp

ip到鍊路位址的查詢

icmp

ping是利用icmp的回應要求和應答來實作

traceroute是利用icmp的ttl的逾時和端口不可用來,ttl逾時回包表還在中間路由器,端口不可用表已經到達主機

ttl從1開始增長

tcp為了保證可靠和最大利用網絡,做了很多優化,比如4個定時器,慢啟動,nagle算法等等。

4個定時器

逾時重傳定時器:用于逾時重傳

多久算逾時,通過rtt和rto

rtt計算是發包開始計時,如果一個計時過程未結束,其他發包就不計時了。

2msl定時器

用于time wait狀态,time wait狀态是為了保證最後一個發包被對方收到。

持續定時器

接收資料一方通知可用視窗為0後再通知不為0,如果視窗可用通知包被丢失,就會進入互相等待情況。

是以這個定時器用于定時查詢對方是否有視窗可用

保活定時器在應用程序選取了插口的SO_KEEPALIVE選項時生效。如果連接配接的連續空閑時間超過2小時,保活定時器逾時,向對端發送連接配接探測封包段,強迫對端響應。如果收到了期待的響應,TCP可确定對端主機正常工作,在該連接配接再次空閑超過2小時之前,TCP不會再進行保活測試。如果收到的是其他響應,TCP可确定對端主機已重新開機。如果連接配接若幹次保活測試都未收到響應,TCP就假定對端主機已崩潰,盡管它無法區分是主機故障(例如系統崩潰而尚未重新開機),還是連接配接故障(例如,中間的路由器發送故障或電話線斷了)。

tcp的backlog

1:backlog裡邊到連接配接是完成了3次握手到,就等着通知應用層到連接配接

2:backlog滿了後,server就會忽略之後的sync請求,但也不做任何處理,沒有reset回包,用戶端會看到sync逾時然後重試,如果server的backlog有空間了,就可以處理sync請求了

轉載于:https://blog.51cto.com/changshizhe/1558999

繼續閱讀