tcp/ip詳解之tcp交互和成塊數據流

最近複習了下tcp/ip的東西,作點記錄吧。算法

1、交互數據流緩存

一、經受時延的確認網絡

tcp在接收到數據包的時候一般並不當即發送ack,而是等待一個時延,在此期間若是有數據要發送就將ack與要發送的數據一塊兒發送,若是沒有,就單獨發送ack。在第一次接收到數據包時設立一個定時器,超時時延通常爲200ms,這樣有助於減小線路上的ack數量。
tcp

二、Nagle算法ide

在交互環境中,小數據包會有不少,在一個網絡環境不是很好的狀況下,會阻塞網絡。Nagle算法能夠減小網絡上的小數據包的數量。算法規定,在一個tcp鏈接中未經確認的小數據包只能有一個,即第一個數據包發送出去以後,必須等它的確認到達以後才能繼續發送數據包,在此期間,待發送的小數據包組成一個大的數據包,等ack到達以後發送出去。進程

三、通告窗口ip

通告窗口是指接收方通告的窗口大小,表示發送方最大可發送的數據量,在tcp/ip中多指tcp接收緩存的大小,書中所說的到達指的是到達接收方的ip緩衝區,並不是指到達接收方tcp緩存。it

2、成塊數據流class

一、滑動窗口定時器

滑動窗口是由發送方維護的,接收方通告的窗口總大小減去未經確認的字節數即爲可發送的數據字節數。見《tcp/ip詳解》P212。

二、PUSH標誌

tcp報文中有一個標誌字段是PUSH,當接受方接收到這樣報文時,會將緩存中的全部數據提交上層進程。

三、慢啓動

若是沒有慢啓動設置,發送方一開始便向網絡發送多個報文段,直至達到接收方通告的敞口大小爲止,但這種方式會嚴重下降tcp鏈接的吞吐量。慢啓動爲發送方增長了另外一個窗口:擁塞窗口(cwnd)。擁塞窗口被初始化爲一個最大報文段(MSS),此後,每收到一個ACK,擁塞窗口就增長一個報文段,發送方取擁塞窗口與通告窗口中的最小值爲發送上限。擁塞窗口是發送方使用的流量控制,通告窗口是接收方使用的流量控制。(通告窗口決定滑動窗口大小,和擁塞窗口一塊兒進行流量控制)。

四、帶寬時延的乘積

通道容量計算方法:

通道容量(bit)= 帶寬(b/s) * RTT(s)

例題:a、b兩地之間有一個128ms時延,速率爲256000b/s的鏈路吞吐量爲120000b/s,問此時的窗口大小爲多少?此線路的帶寬時延乘積爲0.128*256000 = 32768bit,也就是說,在第一個報文的ack到達以前,發送方能夠發送4096byte的報文,可是如今只發送了0.128*120000 = 1920byte的報文,因此接收方窗口大小是1920byte。

相關文章
相關標籤/搜索