在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù)纱兑,采用三次握手建立一個連接逼友。
第一次握手:建立連接時精肃,客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進入SYN_SEND狀態(tài)帜乞,等待服務(wù)器確認司抱;
第二次握手:服務(wù)器收到syn包,必須確認客戶的SYN(ack=j+1)黎烈,同時自己也發(fā)送一個SYN包(syn=k)习柠,即SYN+ACK包,此時服務(wù)器進入SYN_RECV狀態(tài)照棋;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包资溃,向服務(wù)器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢烈炭,客戶端和服務(wù)器進入ESTABLISHED狀態(tài)溶锭,完成三次握手。 完成三次握手符隙,客戶端與服務(wù)器開始傳送數(shù)據(jù).
四次揮手:
TCP協(xié)議是一種面向連接的趴捅、可靠的、基于字節(jié)流的運輸層通信協(xié)議膏执。TCP是全雙工 模式睡榆,這就意味著皮壁,當主機1發(fā)出FIN報文段時航罗,只是表示主機1已經(jīng)沒有數(shù)據(jù)要發(fā)送了抄罕,主機1告訴主機2, 它的數(shù)據(jù)已經(jīng)全部發(fā)送完畢了;但是征峦,這個時候主機1還是可以接受來自主機2的數(shù)據(jù);當主機2返回ACK報文 段時迟几,表示它已經(jīng)知道主機1沒有數(shù)據(jù)發(fā)送了,但是主機2還是可以發(fā)送數(shù)據(jù)到主機1的;當主機2也發(fā)送了FIN 報文段時栏笆,這個時候就表示主機2也沒有數(shù)據(jù)要發(fā)送了类腮,就會告訴主機1,我也沒有數(shù)據(jù)要發(fā)送了蛉加,之后彼此 就會愉快的中斷這次TCP連接蚜枢。如果要正確的理解四次揮手的原理缸逃,就需要了解四次揮手過程中的狀態(tài)變化。
ACK : TCP協(xié)議規(guī)定厂抽,只有ACK=1時有效需频,也規(guī)定連接建立后所有發(fā)送的報文的ACK必須為1。
FIN (finis)即完筷凤,終結(jié)的意思昭殉, 用來釋放一個連接。當 FIN = 1 時藐守,表明此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢挪丢,并要求釋放連接。
發(fā)送序列號:Sequence Number
確認序列號:Acknowledgment Number
FIN_WAIT_1:表示等待對方的FIN報文卢厂。當SOCKET在ESTABLISHED狀態(tài)時乾蓬,它想主動關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報文足淆,此時該SOCKET進入到FIN_WAIT_1 狀態(tài)
FIN_WAIT_2:也表示等待對方的FIN報文巢块。FIN_WAIT_2狀態(tài)下的SOCKET礁阁,表示半連接巧号,也即有一方要求close連接,但另外還告訴對方姥闭,我暫時還有點數(shù)據(jù)需要傳送給你丹鸿,稍后再關(guān)閉連接。
CLOSE_WAIT: 這種狀態(tài)的含義其實是表示在等待關(guān)閉棚品。你回復(fù)一個ACK給對方靠欢,并進入CLOSE_WAIT狀態(tài)。接下來就是查看你是否還有數(shù)據(jù)要發(fā)送給對方铜跑,如果沒有门怪,就可以close這個socket,并發(fā)送FIN給對方锅纺,即關(guān)閉連接掷空。
CLOSING:表示主機1給主機2發(fā)送FIN后,并沒有收到主機2回應(yīng)的ACK囤锉,而收到了主機2發(fā)送的FIN坦弟。表示雙方同時close一個socket,出現(xiàn)同時發(fā)送FIN現(xiàn)象官地。
LAST_ACK: 發(fā)送FIN報文后酿傍,等待對方的ACK報文,當收到ACK報文后驱入,進入到CLOSED狀態(tài)赤炒。
TIME_WAIT: 表示收到了對方的FIN報文氯析,并發(fā)送出了ACK確認,等2MSL后即可回到CLOSED可用狀態(tài)了莺褒。如果FIN_WAIT_1狀態(tài)下魄鸦,收到了對方同時帶FIN標志和ACK標志的報文時,可以直接進入到TIME_WAIT狀態(tài)癣朗。
第一次揮手:主機1向主機2拾因,發(fā)送FIN報文段,表示關(guān)閉數(shù)據(jù)傳送旷余,并主機1進入FIN_WAIT_1狀態(tài)绢记,表示沒有數(shù)據(jù)要傳輸了
第二次揮手:主機2收到FIN報文段后進入CLOSE_WAIT狀態(tài)(被動關(guān)閉),然后發(fā)送ACK確認正卧,表示同意你關(guān)閉請求了蠢熄,主機到主機的數(shù)據(jù)鏈路關(guān)閉,主機進入FIN_WAIT_2狀態(tài)
第三次揮手:主機2等待主機1發(fā)送完數(shù)據(jù)炉旷,發(fā)送FIN到主機1請求關(guān)閉签孔,主機2進入LAST_ACK狀態(tài)
第四次揮手:主機1收到主機2發(fā)送的FIN后,回復(fù)ACK確認到主機2窘行,主機1進入TIME_WAIT狀態(tài)饥追。主機2收到主機1的ACK后就關(guān)閉連接了,狀態(tài)為CLOSED罐盔。主機1等待2MSL但绕,仍然沒有收到主機2的回復(fù),說明主機2已經(jīng)正常關(guān)閉了惶看,主機1關(guān)閉連接捏顺。
網(wǎng)頁解析的全過程(輸入url到展示頁面):
1.用戶輸入網(wǎng)址,瀏覽器發(fā)起DNS查詢解析
2纬黎、建立TCP連接
3幅骄、瀏覽器向 web 服務(wù)器發(fā)送一個 HTTP 請求
4、服務(wù)器處理請求并返回HTTP報文
5本今、瀏覽器解析渲染頁面
6拆座、連接結(jié)束