摘要:建立連接次握手次握手的目的同步連接雙方的序列號(hào)和確認(rèn)號(hào)交換窗口大小信息。客戶端狀態(tài)建立連接三次握手服務(wù)端狀態(tài)第一次握手建立連接。計(jì)算規(guī)則為序列號(hào)為應(yīng)答碼對(duì)方上次的首次發(fā)送時(shí)為系統(tǒng)隨機(jī)生成對(duì)方的無數(shù)據(jù)傳輸時(shí)或者報(bào)文數(shù)據(jù)的長(zhǎng)度
OSI7層網(wǎng)絡(luò)模型閱讀時(shí)間:8min
閱讀目標(biāo):掌握TCP連接過程
學(xué)會(huì)計(jì)算seq、ack碼
TCP 協(xié)議是HTTP協(xié)議的重要基礎(chǔ),充分理解TCP協(xié)議的連接及端口,有助于我們深入理解網(wǎng)絡(luò)請(qǐng)求和連接。今天就來看圖學(xué)習(xí)TCP請(qǐng)求的連接、數(shù)據(jù)傳輸及端口連接。
OSI是Open System Interconnection的縮寫,國際標(biāo)準(zhǔn)化組織(ISO)制定了OSI模型,該模型定義了不同計(jì)算機(jī)互聯(lián)的標(biāo)準(zhǔn),是設(shè)計(jì)和描述計(jì)算機(jī)網(wǎng)絡(luò)通信的基本框架。
參考模型(從上至下) | 各層含義 |
---|---|
應(yīng)用層 | 為應(yīng)用程序提供服務(wù),如HTTP、FTP、SMTP、POP3等 |
表示層 | 數(shù)據(jù)格式轉(zhuǎn)換翻譯、數(shù)據(jù)加密解密、壓縮解壓縮 |
會(huì)話層 | 不同機(jī)器之間的用戶建立及管理會(huì)話 |
傳輸層 | 建立管理和維護(hù)端到端的連接,TCP、UDP |
網(wǎng)絡(luò)層 | IP地址及路由選擇 |
數(shù)據(jù)鏈路層 | 物理尋址,將原始比特流轉(zhuǎn)化為邏輯傳輸線路 |
物理層 | 機(jī)械、電子、定時(shí)接口通信信道上上的原始比特流傳輸 |
接受上一次的數(shù)據(jù),將數(shù)據(jù)進(jìn)行分割,保證數(shù)據(jù)準(zhǔn)確到達(dá)對(duì)端。2. TCP
TCP是面向連接的無狀態(tài)的協(xié)議。為了連接的可靠性,每次連接的建立都需要3次握手。2.1 建立連接(3次握手)
3次握手的目的:
同步連接雙方的序列號(hào)和確認(rèn)號(hào);
交換TCP窗口大小信息。
客戶端(狀態(tài)) | 建立連接(三次握手) | 服務(wù)端(狀態(tài)) |
---|---|---|
CLOSED | LISTEN | |
SYN seq=0 ==》 | ||
SYN_SENT | ||
《== SYN ACK ack=1,seq=0 | ||
SYN_RCVD | ||
ACK ack=1,seq=1 ==》 | ||
ESTABLISHED | ESTABLISHED |
第一次握手: 建立連接。客戶端發(fā)送連接請(qǐng)求,發(fā)送SYN報(bào)文,隨機(jī)生成seq,本例默認(rèn)為0。然后,客戶端進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器的確認(rèn)。
第二次握手: 服務(wù)器收到客戶端的SYN報(bào)文段。需要對(duì)這個(gè)SYN報(bào)文段進(jìn)行確認(rèn),發(fā)送ACK報(bào)文,將ack設(shè)置為1(ack值為對(duì)方seq+1或者seq+L(數(shù)據(jù)長(zhǎng)度L))。同時(shí),自己還要發(fā)送SYN請(qǐng)求信息,將seq為0。服務(wù)器端將上述所有信息一并發(fā)送給客戶端,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。
第三次握手: 客戶端收到服務(wù)器的ACK和SYN報(bào)文后,進(jìn)行確認(rèn),然后將ack設(shè)置為1,seq設(shè)置為1,向服務(wù)器發(fā)送ACK報(bào)文段,這個(gè)報(bào)文段發(fā)送完畢以后,客戶端和服務(wù)器端都進(jìn)入ESTABLISHED狀態(tài),完成TCP三次握手。
2.2 數(shù)據(jù)傳輸客戶端 | 數(shù)據(jù)傳輸 | 服務(wù)端 |
---|---|---|
PSH seq=1, ACK ack=1(segmentLen = 99) ==》 | ||
《== PSH seq=1, ACK ack=100 (segmentLen = 119) | ||
ACK ack=120,seq=100 ==》 |
客戶端先向服務(wù)器發(fā)送數(shù)據(jù),該數(shù)據(jù)報(bào)是長(zhǎng)度為99的數(shù)據(jù)。
服務(wù)器收到報(bào)文后, 也向客戶端發(fā)送了一個(gè)數(shù)據(jù)進(jìn)行確認(rèn)(ACK),并且返回客戶端要請(qǐng)求的數(shù)據(jù),數(shù)據(jù)的長(zhǎng)度為111,將seq設(shè)置為1,ack設(shè)置為120(1 + 119)。
客戶端收到服務(wù)器返回的數(shù)據(jù)后進(jìn)行確認(rèn)(ACK),將seq設(shè)置為100, ack設(shè)置為112(1 + 111)。
2.3 斷開鏈接(4次揮手)客戶端(狀態(tài)) | 斷開連接 | 服務(wù)端(狀態(tài)) | |
---|---|---|---|
FIN ACK ack=120,seq=100 ==》 | |||
FIN_WAIT_1 | |||
《== ACK ack=101,seq=120 | |||
FIN_WAIT_2 | CLOSE_WAIT | ||
《== ACK ack=101,seq=120 | |||
LAST_ACK | |||
ACK ack=121,seq=101 ==》 | |||
TIME_WAIT | CLOSE |
第一次揮手:客戶端向服務(wù)器發(fā)送一個(gè)FIN報(bào)文段,將設(shè)置seq為100和ack為120,;此時(shí),客戶端進(jìn)入 FIN_WAIT_1狀態(tài),這表示客戶端沒有數(shù)據(jù)要發(fā)送服務(wù)器了,請(qǐng)求關(guān)閉連接;
第二次揮手:服務(wù)器收到了客戶端發(fā)送的FIN報(bào)文段,向客戶端回一個(gè)ACK報(bào)文段,ack設(shè)置為101,seq設(shè)置為120;服務(wù)器進(jìn)入了CLOSE_WAIT狀態(tài),客戶端收到服務(wù)器返回的ACK報(bào)文后,進(jìn)入FIN_WAIT_2狀態(tài);
第三次揮手:服務(wù)器會(huì)觀察自己是否還有數(shù)據(jù)沒有發(fā)送給客戶端,如果有,先把數(shù)據(jù)發(fā)送給客戶端,再發(fā)送FIN報(bào)文;如果沒有,那么服務(wù)器直接發(fā)送FIN報(bào)文給客戶端。請(qǐng)求關(guān)閉連接,同時(shí)服務(wù)器進(jìn)入LAST_ACK狀態(tài);
第四次揮手:客戶端收到服務(wù)器發(fā)送的FIN報(bào)文段,向服務(wù)器發(fā)送ACK報(bào)文段,將seq設(shè)置為101,將ack設(shè)置為121,然后客戶端進(jìn)入TIME_WAIT狀態(tài);服務(wù)器收到客戶端的ACK報(bào)文段以后,就關(guān)閉連接;此時(shí),客戶端等待2MSL后依然沒有收到回復(fù),則證明Server端已正常關(guān)閉,客戶端也可以關(guān)閉連接了。
計(jì)算規(guī)則:
seq 為序列號(hào)
ack 為應(yīng)答碼
seq = 對(duì)方上次的ack;(首次發(fā)送時(shí)seq為系統(tǒng)隨機(jī)生成)
ack = 對(duì)方的seq+1(無數(shù)據(jù)傳輸時(shí)) 或者 seq+L(報(bào)文數(shù)據(jù)的長(zhǎng)度L)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/94010.html
摘要:很多人都知道協(xié)議是基于協(xié)議創(chuàng)造出來的采用文本方式傳輸非二進(jìn)制傳輸?shù)膽?yīng)用層協(xié)議,協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而應(yīng)用層協(xié)議,主要解決如何包裝和規(guī)范數(shù)據(jù)。你也可以自己定義應(yīng)用層協(xié)議,只不過所有配套的東西都要自己重新造輪子。 從問題切入能幫我們更好地理解晦澀難懂的概念。很多人都知道http協(xié)議是基于Tcp協(xié)議創(chuàng)造出來的采用文本方式傳輸(非二進(jìn)制傳輸)的應(yīng)用層協(xié)議,TPC/I...
摘要:很多人都知道協(xié)議是基于協(xié)議創(chuàng)造出來的采用文本方式傳輸非二進(jìn)制傳輸?shù)膽?yīng)用層協(xié)議,協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而應(yīng)用層協(xié)議,主要解決如何包裝和規(guī)范數(shù)據(jù)。你也可以自己定義應(yīng)用層協(xié)議,只不過所有配套的東西都要自己重新造輪子。 從問題切入能幫我們更好地理解晦澀難懂的概念。很多人都知道http協(xié)議是基于Tcp協(xié)議創(chuàng)造出來的采用文本方式傳輸(非二進(jìn)制傳輸)的應(yīng)用層協(xié)議,TPC/I...
摘要:三次握手和四次揮手的問題在面試中是最為常見的考點(diǎn)之一。上面有一個(gè)非常特殊的狀態(tài),它是主動(dòng)關(guān)閉的一方在回復(fù)完對(duì)方的揮手后進(jìn)入的一個(gè)長(zhǎng)期狀態(tài),這個(gè)狀態(tài)標(biāo)準(zhǔn)的持續(xù)時(shí)間是分鐘,分鐘后才會(huì)進(jìn)入到狀態(tài),釋放套接字資源。 showImg(https://segmentfault.com/img/remote/1460000018918991); TCP三次握手和四次揮手的問題在面試中是最為常見的考點(diǎn)...
閱讀 3197·2019-08-30 15:55
閱讀 2956·2019-08-30 13:46
閱讀 1456·2019-08-29 17:29
閱讀 3527·2019-08-29 11:08
閱讀 3450·2019-08-29 11:04
閱讀 1097·2019-08-28 18:20
閱讀 555·2019-08-26 13:37
閱讀 1341·2019-08-26 11:49