1. 程式人生 > >TCP連線關閉過程筆記

TCP連線關閉過程筆記

作者:fbysss
msn:[email protected] 
blog:blog.csdn.net/fbysss
宣告:本文由fbysss原創,轉載請註明出處
關鍵字:TCP協議 關閉連線
前言:
TCP協議的連線是全雙工連線,一個TCP連線存在雙向的讀寫通道。 
簡單說來是 “先關讀,後關寫”,一共需要四個階段。以客戶機發起關閉連線為例:
1.伺服器讀通道關閉
2.客戶機寫通道關閉
3.客戶機讀通道關閉
4.伺服器寫通道關閉
關閉行為是在發起方資料傳送完畢之後,給對方發出一個FIN(finish)資料段。直到接收到對方傳送的FIN,且對方收到了接收確認ACK之後,雙方的資料通訊完全結束,過程中每次接收都需要返回確認資料段ACK。
詳細過程:
    第一階段
   客戶機發送完資料之後,向伺服器傳送一個FIN資料段,序列號為i
    1.伺服器收到FIN(i)後,返回確認段ACK,序列號為i+1關閉伺服器讀通道
    2.客戶機收到ACK(i+1)後,關閉客戶機寫通道
   (此時,客戶機仍能通過讀通道讀取伺服器的資料,伺服器仍能通過寫通道寫資料)
    第二階段 伺服器傳送完資料之後,向客戶機發送一個FIN資料段,序列號為j;
    3.客戶機收到FIN(j)後,返回確認段ACK,序列號為j+1關閉客戶機讀通道
    4.伺服器收到ACK(j+1)後,關閉伺服器寫通道
這是標準的TCP關閉兩個階段,伺服器和客戶機都可以發起關閉,完全對稱。
FIN標識是通過傳送最後一塊資料時設定的,標準的例子中,伺服器還在傳送資料,所以要等到傳送完的時候,設定FIN(此時可稱為TCP連線處於半關閉狀態,
因為資料仍可從被動關閉一方向主動關閉方傳送)。如果在伺服器收到FIN(i)時,已經沒有資料需要傳送,可以在返回ACK(i+1)的時候就設定FIN(j)標識,這樣就相當於可以合併第二步和第三步。
讀《Linux網路程式設計》關閉TCP連線章節,作以下筆記:

相關推薦

TCP連線關閉過程筆記

作者:fbysssmsn:[email protected]  blog:blog.csdn.net/fbysss宣告:本文由fbysss原創,轉載請註明出處關鍵字:TCP協議 關閉連線前言:

建立與釋放TCP連線過程

首先給出標準的書上的概念,摘自 謝希仁著《計算機網路第6版》: 三次握手的全過程: 四次揮手的全過程: 以下是經過總結、提取後在筆試題和麵試題的回答: 三次握手: 1.客戶端傳送SYN請求,進入SYN-SEND(同步傳送狀態) 2.服務端收到請求,

TCP連線建立過程中為什麼需要“三次握手”

傳輸控制協議(Transmission Control Protocol, TCP)是一種面向連線的、可靠的、基於位元組流的運輸層(Transport layer)通訊協議。是專門為了在不可靠的網際網路絡上提供一個可靠的端到端位元組流而設計的。網際網路絡與單個網

HTTP請求的過程TCP連線過程

  http請求的詳細過程 HTTP是一個應用層的協議,在這個層的協議,是一種網路互動需要遵守的一種協議規範。 1、連線:當輸入一個請求時,首先建立一個socket連線,因為socket是通過ip和埠建立的,所以,之前則還有一個DNS解析過程。如把www.baidu.com變成一個ip,如果url不包含埠號

tcp連線關閉詳解和注意事項

注:tcp關閉連線不區分客戶端和服務端,哪一埠可以主動發起關閉連線請求。所以為了描述方便,描述中的“主動方”表示主動發起關閉連線一方,“被動方”表示被動關閉連線一方。 1. tcp關閉連線狀態轉換   上圖是tcp連線主動關閉端的狀態轉換圖: (1)應用層呼叫close函式發起關閉連線請求 (2

TCP連線關閉狀態轉換圖

主要部分,四次握手: 斷開連線其實從我的角度看不區分客戶端和伺服器端,任何一方都可以呼叫close(or closesocket)之類 的函式開始主動終止一個連線。這裡先暫時說正常情況。當呼叫close函式斷開一個連線時,主動斷開的 一方傳送FIN(finish報文

TCP連線關閉—close和shutdown

先從最右邊的分支說說關閉監聽socket的那些事。用於listen的監聽控制代碼也是使用close關閉,關閉這樣的控制代碼含義當然很不同,它本身並不對應著某個TCP連線,但是,附著在它之上的卻可能有半成品連線。什麼意思呢?之前說過TCP是雙工的,它的開啟需要三次握手,三次握手也就是3個步驟,其含義為:客戶端

TCP連線關閉過程

轉載的連結處:TCP連線和關閉 建立連線:三次握手 在 TCP/IP 協議中,TCP 協議提供可靠的連線服務,採用三次握手建立一個連線,如圖1所示。 圖1 TCP三次握手建立連線的過程 客戶端 A 傳送 SYN 包(SYN=j)到伺服器 B,並進入SYN_SEND 狀態

TCP建立/關閉連線時握手過程中的狀態情況

一句話總結:深入理解握手中的狀態情況 建立連線的3次握手和關閉連線的4次握手: 狀態轉換: 注:下面狀態轉換說明以客戶端主動關閉為例。 close:表示初始狀態 listen:伺服器端某個socket處於監聽狀態,可以接受客戶端連線 SYN_SENT:客戶端執行c

TCP連線、Socket連線、Http連線的區別、三次TCP握手過程

轉載自:https://blog.csdn.net/ituling/article/details/52541545?utm_source=blogxgwz0 首先一定要明白: HTTP協議:簡單物件訪問協議,對應於應用層,HTTP協議是基於TCP連線的 tcp協議: 對應於傳輸層

TCP/IP學習筆記(10)--TCP連線的建立與終止

TCP連線的建立可以簡單的稱為三次握手,而連線的中止則可以叫做四次握手。   TCP是一個面向連線的協議,所以在連線雙方傳送資料之前,都需要首先建立一條連線。這和前面講到的協議完全不同。前面講的所有協議都只是傳送資料而已,大多數都不關心傳送的資料是不是送到,UDP尤其明顯,從

TCP四次揮手客戶端連線關閉連結為什麼要等待2MSL?

MSL(maximun segment Lifetime): 報文的最大生存時間, 是任何報文在網路上生存的最大時間。 如果client直接closed, 那麼由於IP協議的不可靠性或者是其它的網路原因, 導致Server沒有收到客戶端最後回覆的ACK。那麼伺服器就會在超時

TCP/IP學習筆記(10)-tcp連線的建立與終止

TCP連線的建立可以簡單的稱為三次握手,而連線的中止則可以叫做四次握手。        TCP是一個面向連線的協議,所以在連線雙方傳送資料之前,都需要首先建立一條連線。這和前面講到的協議完全不同。前面講的所有協議都只是傳送資料而已,大多數都不關心

TCP連線的建立和關閉

TCP通過三次握手建立連線,通過四次揮手揮手關閉連線 1、三次握手                                            第一個TCP報文段包含SYN標誌,因此它是一個同步報文段,即ernest -lapyop(客戶端)向Kongmin

TCP連線的狀態與關閉方式,及其對Server與Client的影響

1. TCP連線的狀態   首先介紹一下TCP連線建立與關閉過程中的狀態。TCP連線過程是狀態的轉換,促使狀態發生轉換的因素包括使用者呼叫、特定資料包以及超時等,具體狀態如下所示: CLOSED:初始狀態,表示沒有任何連線。 LISTEN:Server端的某個Socket正在監聽來自遠

TCP / IP學習筆記(10)-TCP連線的建立與終止

前面曾經講述過UDP的伺服器設計,可以發現UDP的伺服器完全不需要所謂的併發機制,它只要建立一個數據輸入佇列就可以。但是TCP不同,TCP伺服器對於每一個連線都需要建立一個獨立的程序(或者是輕量級的,執行緒),來保證對話的獨立性。所以TCP伺服器是併發的。而且TCP還需要配備一個呼入連線請求佇列(UDP伺服器

python獲取tcp連線數,新增連線數,繪圖(用於效能測試過程中監控)

本指令碼可以用於有效能測試監控需求的人使用,用於tcp連線數的監控# -*- coding: UTF-8 -*- # author=baird_xiang import os import sys import time import re import copy new_

TCP建立連線過程

   在可靠的TCP網路通訊中,客戶端和伺服器端通訊建立連線的過程可簡單表述為三次握手(建立連線的階段)和四次揮手(釋放連線階段),下圖是這兩個階段的一個完整的表述:   其狀態圖可以表示為, 在TCP連線建立的時候,存在一個如下的有限狀態機:        在狀態轉化

Golang Socket Tcp 連線優雅關閉

主要是利用 系統監聽Interrupt 訊號,並且提前關閉伺服器 監聽,並且等待先前連線處理完畢後在退出程式。 Server 程式碼: package main import ( "net" "os" "os/signal" "strings" "sync"

golang的垃圾回收與Finalizer——tcp連線是如何被自動關閉

      最近在做一個golang的連線池。測試過程中發現一個有趣的現象,獲取的連線沒有歸還給連線池,那麼過一段時間後該連線會自動關閉掉。猜測這跟連線池應該是沒有關係的,於是再用普通的連線做了實驗,即dial一個tcp連線,傳送請求,然後程式進入sleep,一段時間後該連