ABC類網(wǎng)絡(luò)地址:
- A彤灶,第一個(gè)字節(jié)為網(wǎng)絡(luò)號(hào),后面三個(gè)字節(jié)為主機(jī)號(hào)幌陕,網(wǎng)絡(luò)號(hào)的第一位必須為0;
- B搏熄,前兩個(gè)字節(jié)為網(wǎng)絡(luò)號(hào)暇赤,后面兩個(gè)字節(jié)為主機(jī)號(hào)宵凌,網(wǎng)絡(luò)號(hào)的前兩位必須為10;
- C瞎惫,前三個(gè)字節(jié)為網(wǎng)絡(luò)號(hào),后面一個(gè)字節(jié)為主機(jī)號(hào)瓜喇,網(wǎng)絡(luò)號(hào)的前三位必須為110;
滑動(dòng)窗口
發(fā)送方會(huì)有一個(gè)滑動(dòng)窗口乘寒,這個(gè)滑動(dòng)窗口的大小,是對(duì)方發(fā)來的肃续,對(duì)方的每個(gè)數(shù)據(jù)包中都帶了一個(gè)滑動(dòng)窗口大小。
滑動(dòng)窗口的左邊始锚,表示發(fā)送了,且已經(jīng)被確認(rèn)的字節(jié)瞧捌。滑動(dòng)窗口的右邊姐呐,是還沒發(fā)送的字節(jié)∈锷埃滑動(dòng)窗口中,包含了發(fā)送已確認(rèn)的字節(jié)鸠澈,和發(fā)送未確認(rèn)的字節(jié)。
當(dāng)有數(shù)據(jù)包被確認(rèn)時(shí)笑陈,窗口左邊沿會(huì)向右合攏。
當(dāng)對(duì)端收到數(shù)據(jù)包乖菱,并釋放了接收的緩存的時(shí)候,發(fā)送端的右邊沿可以向右擴(kuò)大窒所。
這個(gè)窗口是接收方的流量控制。
超時(shí)重傳
TCP在發(fā)送一個(gè)數(shù)據(jù)的時(shí)候墩新,會(huì)設(shè)置一個(gè)定時(shí)器,若在定時(shí)范圍內(nèi)海渊,沒有收到這個(gè)數(shù)據(jù)包的ack,就會(huì)重傳臣疑。重傳的間隔時(shí)間以倍數(shù)增加。發(fā)送方最后會(huì)放棄讯沈,并會(huì)發(fā)送一個(gè)RST。
慢啟動(dòng)
發(fā)送方有一個(gè)擁塞窗口缺狠,擁塞窗口是發(fā)送方來控制發(fā)送流量的。發(fā)送方每次取擁塞窗口和通告窗口的最小值來作為發(fā)送的上限挤茄。
開始時(shí),擁塞窗口的大小為一個(gè)報(bào)文段大小穷劈。當(dāng)收到對(duì)方的ACK之后,就變?yōu)閮杀缎眨⒉粩嘣黾印_@就是慢啟動(dòng)的過程评凝。
發(fā)送方有一個(gè) 慢啟動(dòng)門限 。當(dāng)擁塞窗口大于了慢啟動(dòng)門限的時(shí)候肥哎。則進(jìn)入擁塞避免階段疾渣。
擁塞避免
當(dāng)數(shù)據(jù)包發(fā)送了丟失(發(fā)生超時(shí))篡诽。當(dāng)TCP進(jìn)入了擁塞避免狀態(tài)杈女,表示當(dāng)前連接處于擁塞狀態(tài),要減少進(jìn)入TCP連接的數(shù)據(jù)包达椰。是一種發(fā)送方的流量控制。
過程是:
1.當(dāng)擁塞發(fā)生時(shí)啰劲,將門限設(shè)置為當(dāng)前窗口(擁塞和通告的最小值)大小的一半(減小門限)。
2.將cwnd設(shè)置為1蝇裤。
3.重新開始慢啟動(dòng)。
快速重傳
就是當(dāng)接收方栓辜,收到了亂序的包的時(shí)候,會(huì)立即發(fā)送期望丟失包的ACK藕甩。當(dāng)接收方連續(xù)接收到三個(gè)重復(fù)ACK的時(shí)候,就開始快速重傳狭莱,而不等待發(fā)送超時(shí)。
- 將門限設(shè)置為窗口大小的一半腋妙。
- 將擁塞窗口設(shè)置為門限+3。
- 重新進(jìn)入擁塞避免辉阶。
快速恢復(fù)
1.當(dāng)收到三個(gè)重復(fù)的ACK的時(shí)候,將門限設(shè)置為cwnd的一半谆甜,重傳丟失的報(bào)文。設(shè)置cwnd為門限+3的大小规辱。
- 每次收到另一個(gè)重復(fù)的ACK的時(shí)候,就把cwnd+1罕袋,并發(fā)送一個(gè)分組。
- 當(dāng)下一個(gè)確認(rèn)新數(shù)據(jù)的ack到達(dá)的時(shí)候浴讯,將cwnd設(shè)置為原來的門限,繼續(xù)擁塞避免榆纽。
sack
如果只是使用快速重傳效率不高捏肢,
CP收到亂序數(shù)據(jù)后,會(huì)將其放入亂序隊(duì)列中鸵赫,然后發(fā)送重復(fù)ACK給對(duì)端。對(duì)端收到多個(gè)重復(fù)的ACK后辩棒,就會(huì)推測到可能發(fā)生了數(shù)據(jù)丟失,再重傳數(shù)據(jù)盗温。如果亂序的數(shù)據(jù)比較零散,則這種機(jī)制的效率會(huì)很低卖局。使用SACK選項(xiàng)可以告知發(fā)包方收到了哪些數(shù)據(jù),發(fā)包方收到這些信息后就會(huì)知道哪些數(shù)據(jù)丟失砚偶,然后立即重傳缺失部分即可。這就大大提高了數(shù)據(jù)重傳的速度染坯。