国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

日常記錄 - 5.1

2023-05-02 10:18 作者:劍離我離  | 我要投稿

重傳機(jī)制

  • 超時(shí)重傳:定時(shí)器超時(shí)后沒(méi)收到ACK 確認(rèn)應(yīng)答,則重發(fā)數(shù)據(jù)

  • 快速重傳:三次同樣的ACK ,就會(huì)觸發(fā)重傳機(jī)制。存在問(wèn)題:出現(xiàn)未收到時(shí),重傳一個(gè)包還是全部包各有利弊。若是多個(gè)包丟失,只重傳一個(gè)包的情況下,效率低。

  • SACK(選擇性確認(rèn)) : 需在TCP 頭部 【選項(xiàng)】字段加上SACK,可以將已收到的數(shù)據(jù)的信息發(fā)送給「發(fā)送方」,可以只重傳丟失的數(shù)據(jù)。

  • D-SACK:使用了SACK 來(lái)告訴 【發(fā)送方】有哪些數(shù)據(jù)被重復(fù)接收了。如ACK應(yīng)答丟失或是網(wǎng)絡(luò)延時(shí)場(chǎng)景,就可以知道哪些數(shù)據(jù)其實(shí)已經(jīng)成功接收的和出現(xiàn)了網(wǎng)絡(luò)延遲的問(wèn)題等。

滑動(dòng)窗口

發(fā)送方窗口

四個(gè)部分:已發(fā)送并收到ACK 確認(rèn)的數(shù)據(jù)、已發(fā)送但未收到ACK 確認(rèn)的數(shù)據(jù)、未發(fā)送但總大小在接收方處理范圍內(nèi)、未發(fā)送但總大小超過(guò)接收方處理范圍

  • SND.WND:表示發(fā)送窗口的大小(大小是由接收方指定的);

  • SND.UNASend Unacknoleged):是一個(gè)絕對(duì)指針,它指向的是已發(fā)送但未收到確認(rèn)的第一個(gè)字節(jié)的序列號(hào),也就是 #2 的第一個(gè)字節(jié)。

  • SND.NXT:也是一個(gè)絕對(duì)指針,它指向未發(fā)送但可發(fā)送范圍的第一個(gè)字節(jié)的序列號(hào),也就是 #3 的第一個(gè)字節(jié)。

  • 指向 #4 的第一個(gè)字節(jié)是個(gè)相對(duì)指針,它需要 SND.UNA 指針加上 SND.WND 大小的偏移量,就可以指向 #4 的第一個(gè)字節(jié)了。

那么可用窗口大小的計(jì)算就可以是:

可用窗口大小 = SND.WND -(SND.NXT - SND.UNA)

接收方窗口

分成三個(gè)部分:

  • #1 + #2 是已成功接收并確認(rèn)的數(shù)據(jù)(等待應(yīng)用進(jìn)程讀?。?/span>

  • #3 是未收到數(shù)據(jù)但可以接收的數(shù)據(jù);

  • #4 未收到數(shù)據(jù)并不可以接收的數(shù)據(jù);

使用兩個(gè)指針進(jìn)行劃分:

  • RCV.WND:表示接收窗口的大小,它會(huì)通告給發(fā)送方。

  • RCV.NXT:是一個(gè)指針,它指向期望從發(fā)送方發(fā)送來(lái)的下一個(gè)數(shù)據(jù)字節(jié)的序列號(hào),也就是 #3 的第一個(gè)字節(jié)。

  • 指向 #4 的第一個(gè)字節(jié)是個(gè)相對(duì)指針,它需要 RCV.NXT 指針加上 RCV.WND 大小的偏移量,就可以指向 #4 的第一個(gè)字節(jié)了。

接收窗口和發(fā)送窗口大小是相等的嗎?

約等于。

滑動(dòng)窗口并不是一成不變的。比如,當(dāng)接收方的應(yīng)用進(jìn)程讀取數(shù)據(jù)的速度非??斓脑?,接收窗口可以很快就空缺出來(lái),但新的接收窗口大小,是通過(guò)TCP 報(bào)文發(fā)給發(fā)送方的,存在延遲。

若引入擁塞窗口概念,則發(fā)送窗口的值是swnd = min(cwnd, rwnd),也就是擁塞窗口和接收窗口中的最小值。

糊涂窗口綜合征

窗口越來(lái)越小,發(fā)送的開銷(TCP/IP 頭部更大)大,浪費(fèi)資源。

原因:

  • 接收方可以通告一個(gè)小的窗口

  • 而發(fā)送方可以發(fā)送小數(shù)據(jù)

解決方法:接收方得滿足「不通告小窗口給發(fā)送方」+ 發(fā)送方開啟 Nagle 算法,才能避免糊涂窗口綜合癥。

  1. 讓接收方不通告小窗口給發(fā)送方 ;

接收方通常的策略如下:

當(dāng)「窗口大小」小于 min( MSS,緩存空間/2 ) 時(shí),就會(huì)向發(fā)送方通告窗口為 0,也就阻止了發(fā)送方再發(fā)數(shù)據(jù)過(guò)來(lái)。等窗口大小大于時(shí),才把窗口打開讓發(fā)送方發(fā)送數(shù)據(jù)。

  1. 讓發(fā)送方避免發(fā)送小數(shù)據(jù) ; 使用Nagle算法。

Nagle算法:滿足下列任意條件,才可以發(fā)送數(shù)據(jù)

  • 條件一:要等到窗口大小 >= MSS 并且 數(shù)據(jù)大小 >= MSS

  • 條件二:收到之前發(fā)送數(shù)據(jù)的 ack 回包;

注意,如果接收方不能滿足「不通告小窗口給發(fā)送方」,那么即使開了 Nagle 算法,也無(wú)法避免糊涂窗口綜合癥,因?yàn)槿绻麑?duì)端 ACK 回復(fù)很快的話(達(dá)到 Nagle 算法的條件二),Nagle 算法就不會(huì)拼接太多的數(shù)據(jù)包,這種情況下依然會(huì)有小數(shù)據(jù)包的傳輸,網(wǎng)絡(luò)總體的利用率依然很低。

擁塞控制

為什么要有擁塞控制? 避免 【發(fā)送方】 的數(shù)據(jù)填滿整個(gè)網(wǎng)絡(luò)。

什么是擁塞窗口?和發(fā)送窗口的關(guān)系?

擁塞窗口 cwnd是發(fā)送方維護(hù)的一個(gè)的狀態(tài)變量,它根據(jù)網(wǎng)絡(luò)的擁塞程度動(dòng)態(tài)變化。

發(fā)送窗口的值是swnd = min(cwnd, rwnd),也就是擁塞窗口和接收窗口中的最小值。

如何知道當(dāng)前網(wǎng)絡(luò)出現(xiàn)了擁塞?發(fā)生了超時(shí)重傳,就認(rèn)為網(wǎng)絡(luò)出現(xiàn)了擁塞。

擁塞控制有哪些控制算法?

  • 慢啟動(dòng)

  • 擁塞避免

  • 擁塞發(fā)生

  • 快速恢復(fù)

慢啟動(dòng)

當(dāng)發(fā)送方每收到一個(gè)ACK,擁塞窗口cwnd的大小就會(huì)加1。每次發(fā)送的包增加了,收到的ACK也增加了。發(fā)包個(gè)數(shù)是呈指數(shù)增長(zhǎng)的。

慢啟動(dòng)門限: ssthresh (slow start threshold)

  • 當(dāng) cwnd < ssthresh 時(shí),使用慢啟動(dòng)算法。

  • 當(dāng) cwnd >= ssthresh 時(shí),就會(huì)使用「擁塞避免算法」。

擁塞避免算法

每當(dāng)收到一個(gè) ACK 時(shí),cwnd 增加 1/cwnd。 把慢啟動(dòng)的指數(shù)增長(zhǎng)降到線性增長(zhǎng)。

擁塞發(fā)生

當(dāng)發(fā)生了「超時(shí)重傳」,則就會(huì)使用擁塞發(fā)生算法。

這個(gè)時(shí)候,ssthresh 和 cwnd 的值會(huì)發(fā)生變化:

  • ssthresh 設(shè)為 cwnd/2,

  • cwnd 重置為 1 (是恢復(fù)為 cwnd 初始化值,我這里假定 cwnd 初始化值 1)?

TCP 認(rèn)為這種情況不嚴(yán)重,因?yàn)榇蟛糠譀](méi)丟,只丟了一小部分,則 ssthresh cwnd 變化如下:

  • cwnd = cwnd/2 ,也就是設(shè)置為原來(lái)的一半;

  • ssthresh = cwnd;(也是設(shè)為原來(lái)cwnd的一半)

  • 進(jìn)入快速恢復(fù)算法

快速恢復(fù)

快速重傳和快速恢復(fù)算法一般同時(shí)使用,快速恢復(fù)算法是認(rèn)為,你還能收到 3 個(gè)重復(fù) ACK 說(shuō)明網(wǎng)絡(luò)也不那么糟糕,所以沒(méi)有必要像 RTO 超時(shí)那么強(qiáng)烈。

進(jìn)入快速恢復(fù)算法如下:

  • 擁塞窗口 cwnd = ssthresh + 3 ( 3 的意思是快速重傳機(jī)制收到的3個(gè)重復(fù)ACK);

  • 重傳丟失的數(shù)據(jù)包;

  • 如果再收到重復(fù)的 ACK,那么 cwnd 增加 1;

  • 如果收到新數(shù)據(jù)的 ACK 后,把 cwnd 設(shè)置為第一步中的 ssthresh 的值(即原cwnd/2),原因是該 ACK 確認(rèn)了新的數(shù)據(jù),說(shuō)明從 duplicated ACK 時(shí)的數(shù)據(jù)都已收到,該恢復(fù)過(guò)程已經(jīng)結(jié)束,可以回到恢復(fù)之前的狀態(tài)了,也即再次進(jìn)入擁塞避免狀態(tài);

快速恢復(fù)算法的變化過(guò)程如下圖:

發(fā)送窗口大小 = cwnd * MSS

快速恢復(fù)算法過(guò)程中,為什么收到新的數(shù)據(jù)后,cwnd 設(shè)置回了 ssthresh ?

首先,快速恢復(fù)是擁塞發(fā)生后慢啟動(dòng)的優(yōu)化,其首要目的仍然是降低 cwnd 來(lái)減緩擁塞,所以必然會(huì)出現(xiàn) cwnd 從大到小的改變。

其次,過(guò)程2(cwnd逐漸加1)的存在是為了盡快將丟失的數(shù)據(jù)包發(fā)給目標(biāo),從而解決擁塞的根本問(wèn)題(三次相同的 ACK 導(dǎo)致的快速重傳),所以這一過(guò)程中 cwnd 反而是逐漸增大的。

抓包工具

1. tcpdump 在linux下的使用

TCP Fast Open

在第一次連接時(shí),服務(wù)端在第二次握手時(shí)產(chǎn)生一個(gè)加密的Cookie并隨SYN-ACK 包一起發(fā)給客戶端??蛻舳司彺妫?dāng)下次需要建立請(qǐng)求時(shí)(或直接是數(shù)據(jù),如HTTP GET ),同時(shí)攜帶Cookie,可以提前跳過(guò)三次握手的過(guò)程。

在linux下如何打開Fast Open功能? net.ipv4.tcp_fastopen ;0:關(guān)閉 ;1:作為客戶端開啟 ;2:作為服務(wù)端開啟;3:都開啟。

TCP 流量控制

發(fā)送窗口的分析

發(fā)送方在一個(gè)窗口發(fā)出 n 個(gè)包,是不是需要 n 個(gè) ACK 確認(rèn)報(bào)文?

不一定,因?yàn)?TCP 有累計(jì)確認(rèn)機(jī)制,所以當(dāng)收到多個(gè)數(shù)據(jù)包時(shí),只需要應(yīng)答最后一個(gè)數(shù)據(jù)包的 ACK 報(bào)文就可以了。

mysql

619.只出現(xiàn)一次的最大數(shù)字

我的寫法: 輸出錯(cuò)誤,仿佛max聚合函數(shù)失效

這段代碼中的 max聚合函數(shù)并沒(méi)有失效。它會(huì)返回每個(gè)組中 num 列的最大值。但是,由于你在查詢中使用了 group by num,每個(gè)組都只包含一個(gè)唯一的 num 值,因此 max(num) 就等于該組中唯一的 num 值。此外,由于你在查詢中使用了 having count(*) = 1,只有那些只包含一個(gè)行的組才會(huì)被返回。因此,這個(gè)查詢實(shí)際上返回了那些在 MyNumbers 表中只出現(xiàn)一次的 num 值。

正確寫法:

group by 可以接多列

610 判斷三角形

if語(yǔ)句/case語(yǔ)句的應(yīng)用:

使用單獨(dú)的if語(yǔ)句:IF(expr1,expr2,expr3)如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL), 則 IF() 的返回值為 expr2;否則返回值則為 expr3。IF() 的返回值為數(shù)字值或字符串值,具體情況視其所在語(yǔ)境而定


日常記錄 - 5.1的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
新野县| 肥东县| 佛冈县| 乌海市| 沁水县| 滨海县| 瑞金市| 新营市| 焦作市| 台山市| 梁平县| 赫章县| 南华县| 曲水县| 绿春县| 民丰县| 怀柔区| 博爱县| 梁河县| 娄底市| 邢台县| 东乡县| 岱山县| 中西区| 连南| 乌审旗| 丰城市| 丰都县| 讷河市| 望谟县| 萨迦县| 科尔| 德兴市| 江永县| 大城县| 金门县| 桃园市| 长泰县| 苍梧县| 台东县| 金寨县|