一、目錄
(最近復(fù)習(xí)了網(wǎng)絡(luò)相關(guān)的知識(shí)吨灭,在這進(jìn)行一次總結(jié),后續(xù)會(huì)有更新刑巧。)
二喧兄、網(wǎng)絡(luò)基礎(chǔ)
OSI七層協(xié)議,從下往上
(1)物理層
(2)數(shù)據(jù)鏈路層
(3)網(wǎng)絡(luò)層
(4)傳輸層
(5)會(huì)話層
(6)表示層
(7)應(yīng)用層
三啊楚、TCP的三次握手
1吠冤、TCP的三次握手
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù)恭理,采用三次握手建立一個(gè)連接拯辙。
第一次握手:建立連接時(shí),客戶端發(fā)送SYN包(seq = x)到服務(wù)器颜价,并進(jìn)入SYN_SEND狀態(tài)涯保,等待服務(wù)器確認(rèn)诉濒;
第二次握手:服務(wù)器收到SYN包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(seq=y),即SYN+ACK包夕春,此時(shí)服務(wù)器進(jìn)入SYN+RECV狀態(tài)未荒;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1)撇他,此包發(fā)送完畢茄猫,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手困肩。
2划纽、為什么需要三次握手才能建立起連接
為了初始化Sequence Number的初始值。
3锌畸、首次握手的隱患--SYN超時(shí)
(1)勇劣、問題起因分析:
a、Server收到Client的SYN潭枣,回復(fù)SYN-ACK的時(shí)候未收到ACK確認(rèn)比默。
b、Server不斷重試直至超時(shí)盆犁,Linux默認(rèn)等待63秒才斷開連接命咐。(5次)
(2)針對(duì)SYN Flood的防護(hù)措施
a、SYN隊(duì)列滿后谐岁,通過tcp_syncookies參數(shù)回發(fā)SYN Cookie
b醋奠、若為正常連接則Client會(huì)回發(fā)SYN Cookie,直接建立連接
4伊佃、建立連接后窜司,Client出現(xiàn)故障怎么辦
保活機(jī)制
(1)向?qū)Ψ桨l(fā)送焙饺啵活探測(cè)報(bào)文塞祈,如果未收到響應(yīng)則繼續(xù)發(fā)送
(2)嘗試次數(shù)達(dá)到包活探測(cè)數(shù)仍未收到響應(yīng)則中斷連接
四、TCP的四次揮手
TCP采用四次揮手來釋放連接:
第一次揮手:Client發(fā)送一個(gè)FIN帅涂,用來關(guān)閉Client到Server的數(shù)據(jù)傳送议薪,Client進(jìn)入FIN_WAIT_1狀態(tài);
第二次揮手:Server收到FIN后媳友,發(fā)送一個(gè)ACK給Client斯议,確認(rèn)序號(hào)為收到序號(hào)+1(與SYN相同,一個(gè)FIN占用一個(gè)序號(hào))庆锦,Server進(jìn)入CLOSE_WAIT狀態(tài)捅位;
第三次揮手:Server發(fā)送一個(gè)FIN轧葛,用來關(guān)閉Server到Client的數(shù)據(jù)傳送搂抒,Server進(jìn)入LAST_ACK狀態(tài)艇搀;
第四次揮手:Client收到FIN后,Client進(jìn)入TIME_WAIT狀態(tài)求晶,接著發(fā)送一個(gè)ACK給Server焰雕,確認(rèn)序號(hào)為序號(hào)+1,Server進(jìn)入CLOSED狀態(tài)芳杏,完成四次揮手矩屁;
五、TCP和UDP
1爵赵、UDP的特點(diǎn)
(1)面向非連接
傳輸數(shù)據(jù)之前源端和終端不建立連接吝秕,當(dāng)它想傳送時(shí)就簡(jiǎn)單的去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快的把它扔到網(wǎng)絡(luò)上空幻,在發(fā)送端UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度烁峭,計(jì)算機(jī)的能力和傳輸帶寬的限制,在接收端UDP把每個(gè)消息段放在隊(duì)列中秕铛,應(yīng)用程序每次從隊(duì)列中讀取一個(gè)消息段约郁。
(2)不維護(hù)連接狀態(tài),支持同時(shí)向多個(gè)客戶端傳輸相同的消息
(3)數(shù)據(jù)包報(bào)頭只有8個(gè)字節(jié)但两,額外開銷較小
(TCP20個(gè))
(4)吞吐量只受限于數(shù)據(jù)生成速率鬓梅、傳輸速率以及機(jī)器性能
(5)盡最大努力交付,不保證可靠交付谨湘,不需要維持復(fù)雜的鏈接狀態(tài)表
(6)面向報(bào)文绽快,不對(duì)應(yīng)用程序提交的報(bào)文信息進(jìn)行拆分或者合并
2、TCP和UDP的區(qū)別
(1)面向連接 VS 無連接
(2)可靠性
(3)有序性
(4)速度
(5)量級(jí)
六悲关、TCP的滑窗
1谎僻、RTT和RTO
(1)RTT:發(fā)送一個(gè)數(shù)據(jù)包到收到對(duì)應(yīng)的ACK,所花費(fèi)的時(shí)間寓辱;
(2)RTO:(Retransmission timeout)重傳時(shí)間間隔
TCP在發(fā)送一個(gè)數(shù)據(jù)包之后艘绍,會(huì)啟動(dòng)一個(gè)重傳定時(shí)器,而RTO就是這個(gè)定時(shí)器的重傳時(shí)間
2秫筏、TCP的滑動(dòng)窗口
TCP使用滑動(dòng)窗口做流量控制與亂序重排
(1)保證TCP的可靠性
(2)保證TCP的流控特性
七诱鞠、總結(jié)
本文先復(fù)習(xí)了TCP的相關(guān)知識(shí),有關(guān)HTTP和Socket的知識(shí)會(huì)在后面的文章繼續(xù)復(fù)習(xí)这敬。