TCP概念
TCP是一種面向連接、可靠地滨溉、基于字節(jié)流的傳輸層通信協(xié)議什湘。
- 面向連接是指在傳輸前长赞,會(huì)先在傳輸信息前,建立一對(duì)一的連接闽撤。這里的連接不是物理上的得哆,而是軟件層面的,是一種狀態(tài)哟旗。
- 可靠是指不論網(wǎng)絡(luò)鏈路出現(xiàn)怎么樣的鏈路變化贩据,都能保證報(bào)文的完整性,有序性闸餐。
- 字節(jié)流:表示傳輸?shù)男畔⒋笮]有邊界饱亮,可以傳輸任意大的信息。
TCP連接
用于保證可靠性和流量控制的一組狀態(tài)信息的組合舍沙,包括socket近上、序列號(hào)、窗口大小
通過socket(套接字)來確定一個(gè)TCP連接拂铡。
socke包含:源地址壹无、目標(biāo)地址、源端口感帅、目標(biāo)端口
TCP和UDP的區(qū)別:
- 連接:TCP需要建立一對(duì)一的連接斗锭,UDP不需要建立連接,使用廣播的方式直接發(fā)送數(shù)據(jù)失球。
- 可靠性:TCP能保證數(shù)據(jù)傳輸?shù)耐暾院陀行蛐葬牵鳸DP只是負(fù)責(zé)把數(shù)據(jù)傳輸出去 不管接收方是否收到
- 流量控制:TCP有流量控制機(jī)制,能保證數(shù)據(jù)傳輸安全性
TCP的三次握手
為什么需要三次握手
- 保證不會(huì)建立重復(fù)連接
- 保證傳輸?shù)目煽啃运龋匠跏蓟蛄?/li>
三次握手的過程:
建立TCP連接不是真實(shí)的物理連接璧微,而是軟件層面的連接作箍,其實(shí)是狀態(tài)同步硬梁。
沒有建立連接前客戶端和服務(wù)器都處于closed狀態(tài),服務(wù)器端主動(dòng)監(jiān)聽端口胞得。
- 客戶端向服務(wù)器端發(fā)出第一次請(qǐng)求, 報(bào)文包含一個(gè)隨機(jī)數(shù)作為序列號(hào)起始值荧止,syn為1,表示為syn報(bào)文阶剑,此時(shí)客戶端狀態(tài)為SYN_SENT
- 服務(wù)器端收到請(qǐng)求后返回一個(gè)報(bào)文跃巡,ack為1,生成一個(gè)隨機(jī)數(shù)作為服務(wù)器端序列號(hào)起始值牧愁,將客戶端序列號(hào)+1放入確認(rèn)應(yīng)答序列號(hào)內(nèi)素邪。此時(shí)服務(wù)器端狀態(tài)為SYN_RCVD
- 客戶端收到響應(yīng)后,再次發(fā)送請(qǐng)求猪半,報(bào)文的ack為1兔朦,確認(rèn)應(yīng)該序列號(hào)的值為響應(yīng)報(bào)文的序列號(hào)+1偷线。客戶端發(fā)送后狀態(tài)為ESTABLISHED沽甥,服務(wù)器端收到請(qǐng)求后声邦,狀態(tài)為ESTABLISHED。三次握手中只有第三次能夠攜帶數(shù)據(jù)摆舟、
如果第三次握手的ack包丟失了怎么辦亥曹?
如果第三次包丟失了,服務(wù)器端沒有收到應(yīng)答恨诱,在一定周期后會(huì)重發(fā)響應(yīng)媳瞪。
這是客戶端其實(shí)已經(jīng)是建立連接狀態(tài),如果給服務(wù)器發(fā)送數(shù)據(jù)照宝,服務(wù)器端收到以后經(jīng)過檢查是沒有建立連接的材失,會(huì)發(fā)送reset報(bào)文
四次揮手
當(dāng)要關(guān)閉連接的時(shí)候,想需要經(jīng)歷四次揮手:硫豆、
- 客戶端發(fā)送FIN報(bào)文龙巨,F(xiàn)IN為1,客戶端進(jìn)入FIN_wait1狀態(tài)
- 服務(wù)器端收到FIN報(bào)文后熊响,發(fā)送出響應(yīng)報(bào)文旨别,ack為1,F(xiàn)IN為1汗茄,進(jìn)入CLOSE_WAIT狀態(tài)秸弛,客戶端收到報(bào)文后進(jìn)入FIN_Wait2狀態(tài),等待服務(wù)器端關(guān)閉
3.服務(wù)器端做好關(guān)閉準(zhǔn)備后洪碳,發(fā)送FIN報(bào)文進(jìn)入LAST_ACK狀態(tài)递览, - 客戶端收到服務(wù)器的FIN報(bào)文,返回ack報(bào)瞳腌,進(jìn)入time——wait狀態(tài)绞铃。服務(wù)器端收到以后進(jìn)入closed狀態(tài),而客戶端等待一段時(shí)間后嫂侍,才進(jìn)入close狀態(tài)儿捧。
TCP長(zhǎng)連接保活機(jī)制:
原理:
當(dāng)一個(gè)tcp連接建立后挑宠,一段時(shí)間內(nèi)沒有請(qǐng)求菲盾,服務(wù)器端會(huì)發(fā)送一個(gè)探測(cè)包檢查客戶端是否有響應(yīng),如果有則服務(wù)器端繼續(xù)保持連接各淀,如果沒有則關(guān)閉當(dāng)前連接懒鉴。
空閑時(shí)間:多久沒有通信開始發(fā)起探測(cè)包
探測(cè)次數(shù):最多探測(cè)幾次
探測(cè)間隔
作用:從保活機(jī)制的實(shí)現(xiàn)來看碎浇,只有服務(wù)器端發(fā)送探測(cè)包临谱,當(dāng)探測(cè)失敗后服務(wù)器端會(huì)做出處理咆畏,所以和客戶端無關(guān),主要是為了避免服務(wù)器端無效連接的存在吴裤,節(jié)省服務(wù)器資源旧找。