0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TCP連接的建立與中止

麥辣雞腿堡 ? 來源:盼盼編程 ? 作者:盼盼編程 ? 2023-10-08 16:52 ? 次閱讀

TCP三次握手其實,網(wǎng)絡(luò)上的傳輸是沒有連接的, TCP 是一樣的 TCP 所謂的 “連接”,其實只不過是在通信的雙方維護一個“連接狀態(tài)”,讓它看上去好像有連接一樣 所以, TCP 的狀態(tài)變換是非常重要的 。

TCP 連接的建立可以簡單地稱為三次握手,而連接的中止則可以稱為四次揮手。

建立連接 TCP/IP 協(xié)議中, TCP 協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個連接。

第一次握手:建立連接時,客戶端發(fā)送 SYN 包到服務(wù)器,并進入 SYN_SEND 狀態(tài),等待服務(wù)器確認(rèn)。

第二次握手:服務(wù)器收到 SYN 包,必須確認(rèn)客戶的 SYN ,同時自己也發(fā)送一個 SYN 包,即 SYN+ACK 包,此時服務(wù)器進入 SYN_RECV 狀態(tài)。

第三次握手 :客戶端收到服務(wù)器的 SYN + ACK 包,向服務(wù)器發(fā)送確認(rèn)包 ACK,此包發(fā)送完畢,客戶端和服務(wù)器進入 ESTABLISHE 態(tài)。

完成 三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù),也就是 ESTABLISHED 狀態(tài)。

TCP四次揮手

TCP的連接斷開

TCP 一個特別的概念叫作半關(guān)閉,這個概念是說, TCP 的連接是全雙工(可以同時發(fā)送和接收)連接,因此在關(guān)閉連接的時候,必須關(guān)閉傳和送兩個方向上的連接。

客戶機給服務(wù)器 FIN 的 TCP 報文,然后服務(wù)器返回給客戶端一個確認(rèn) ACK 報文,并且發(fā)送一個FIN 報文,當(dāng)客戶機回復(fù) ACK 報文后( 四次握手),連接就結(jié)束了。

在建立連接的時候,通信的雙方要互相確認(rèn)對方的最大報文長度( MSS ),以便通信。

一般這個 SYN 長度是 MTU 減去固定 IP 首部和 TCP 首部長度。對于一個以太網(wǎng),一般可以達(dá) 1460 Byte 。當(dāng)然如果對于非本地的 IP ,這個 MSS 可能就只有 536 Byte ,而且,如果中間的傳輸網(wǎng)絡(luò)的 MSS 更加的小的話,這個值還會變得更小。

為什么建連接要三次握手,斷連接需要四次揮手?

對于建連接的三次握手,主要是要初始化 Sequence Number 的初始值。通信的雙方要互相通知對方自己的初始化的 Sequence Numbe,所以叫 SYN 。

這個號要作為以后的數(shù)據(jù)通信的序號,以保證應(yīng)用層接收到的數(shù)據(jù)不會因為網(wǎng)絡(luò)上的傳輸問題而亂序( TCP 會用這個序號來拼接數(shù)據(jù))。

對于四次揮手,其實仔細(xì)看則是兩次,因為 TCP 是全雙工的,所以,發(fā)送方和接收方都需要 FIN 和 ACK。

只不過,有一方是被動的,所以看上去就成了所謂的四次揮手 。如果兩邊同時斷連接,那就會就進入到 CLOSING 狀態(tài),接著就是TIME_WAIT 狀態(tài)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8700

    瀏覽量

    84537
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7387

    瀏覽量

    88208
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1324

    瀏覽量

    78755
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    287

    瀏覽量

    16604
收藏 人收藏

    評論

    相關(guān)推薦

    TCP和UDP建立連接的差異和可靠性的差異

    TCP 建立連接需要經(jīng)過三次握手,同時 TCP 斷開連接需要經(jīng)過四次揮手,這也表示 TCP 是一
    發(fā)表于 09-02 16:10 ?693次閱讀

    如何標(biāo)識一個TCP連接

    tcp應(yīng)用中,server事先在某個固定端口監(jiān)聽,client主動發(fā)起連接,經(jīng)過三路握手后建立tcp連接。那么對單機,其最大并發(fā)
    的頭像 發(fā)表于 10-10 10:33 ?2753次閱讀

    STM32H7+FREERTOS+LWIP建立TCP連接,連接不穩(wěn)定怎么解決?

    利用ST的Demo建立TCP連接,但是當(dāng)建立TCP連接超過4個時,
    發(fā)表于 04-25 06:05

    為什么建立TCP連接有時成功有時失???

    時開發(fā)板自帶的里程改的,TCP這部分基本沒有改,只是增加了自己的應(yīng)用進去。首次使用以太網(wǎng)接口,還不太清楚建立連接的機理,有了解這塊的朋友嗎,請問建立
    發(fā)表于 09-19 04:36

    CH9121配置成TCP Client/Server,無法和電腦建立TCP連接怎么解決?

    9121配置成TCP Client/Server,無法和電腦建立TCP連接
    發(fā)表于 10-12 08:18

    建立TCP/IP連接后可以發(fā)送json數(shù)據(jù)嗎?

    建立TCP/IP連接后,可以發(fā)送json數(shù)據(jù)嗎?
    發(fā)表于 10-18 06:05

    建立TCP/IP連接之后可以發(fā)送json的數(shù)據(jù)嗎?

    建立TCP/IP連接之后,可以發(fā)送json的數(shù)據(jù)嗎??
    發(fā)表于 10-20 06:02

    TCP連接建立與終止

    學(xué)習(xí)TCP-IP的很好的書。TCP-IP詳解卷1。
    發(fā)表于 05-10 15:44 ?0次下載

    大神告訴你TCP建立連接為什么是三次握手

    所謂三次握手(Three-Way Handshake)即建立TCP連接,是指建立一個TCP連接
    的頭像 發(fā)表于 04-16 11:43 ?1w次閱讀
    大神告訴你<b class='flag-5'>TCP</b><b class='flag-5'>建立</b><b class='flag-5'>連接</b>為什么是三次握手

    TCP通信通過網(wǎng)絡(luò)調(diào)試助手與S7-1200建立TCP連接

    S7-1200 V4.5 版本開始支持網(wǎng)絡(luò)視圖組態(tài)開放式用戶通信連接,不需要在程序中調(diào)用 TCON 等建立連接指令,只需要調(diào)用發(fā)送接收指令即可實現(xiàn)數(shù)據(jù)的收發(fā)。下面以 TCP 通信為例,
    的頭像 發(fā)表于 07-06 15:39 ?1.1w次閱讀

    要是沒有一端進行監(jiān)聽是否可以建立TCP連接呢?

    TCP 網(wǎng)絡(luò)通信過程中,我們都是先有 server 端調(diào)用 listen 監(jiān)聽某個端口號,然后 client 向 server 發(fā)起連接請求,最終建立連接。
    的頭像 發(fā)表于 11-16 17:42 ?2076次閱讀
    要是沒有一端進行監(jiān)聽是否可以<b class='flag-5'>建立</b>起<b class='flag-5'>TCP</b><b class='flag-5'>連接</b>呢?

    如何使用Netcat命令建立和測試TCP和UDP連接

    Netcat或nc是一個命令行程序,它使用TCP或UDP協(xié)議通過網(wǎng)絡(luò)連接讀取和寫入數(shù)據(jù)。
    的頭像 發(fā)表于 12-12 17:39 ?7307次閱讀

    什么是Socket連接?Socket與TCP連接的關(guān)系

    主機 A 的應(yīng)用程序必須通過 Socket 建立連接才能與主機B的應(yīng)用程序通信,而建立 Socket 連接需要底層 TCP/IP 協(xié)議來
    發(fā)表于 03-31 15:10 ?960次閱讀

    TCP連接建立中的異常

    ? ? 建連接時SYN超時問題 如果 server 端因為某種情況沒有收到 client 回來的 ACK,那么,這個連接處還處于一個未建立的狀態(tài)。于是,server端如果在一定時間內(nèi)沒有收到,則
    的頭像 發(fā)表于 10-08 17:01 ?701次閱讀

    TCP的長連接和短連接

    TCP在真正開始進行數(shù)據(jù)傳輸之前,Server 和 Client 之間必須建立一個連接。當(dāng)數(shù)據(jù)傳輸完成后,雙方不再需要這個連接時,就可以釋放這個連接
    的頭像 發(fā)表于 11-13 10:46 ?852次閱讀