1. 程式人生 > >[TCP/IP] TCP建立與終止

[TCP/IP] TCP建立與終止

自己的 str color 了解 span 出現 數據包 傳輸層 它的

三次握手與四次揮手  

  TCP提供一種可靠面向連接字節流傳輸層的服務。TCP是一種面向連接的單播協議
  一個TCP連接由一個4元組構成,它們分別是源IP地址和源端口號,目的IP地址和目的端口號。更準確的說,一個TCP連接是由一對端點或套接字構成,其中通信的每一端都由一對(IP地址,端口號)所唯一標識。
  一個TCP連接通常分為3個階段:啟動、數據傳輸和退出。
  為了建立一個TCP連接,需要完成以下步驟:
  1.客戶端發送一個SYN報文段,並指明自己想要連接的端口號和它的客戶端初始序列號(記為ISN(c))。通常客戶端還會借此發送1個或多個選項。客戶端發送的這個SYN報文段稱作段1。
  2.服務器也發送自己的SYN報文段作為響應

,並包含了它的初始序列號(記為ISN(s)),該段稱為段2。此外,為了確認客戶端的SYN,服務器將包含的ISN(c)數值加1後作為返回的ACK數值。因此,每發送一個SYN,序列號都會自動加1。這樣如果出現丟失的情況,該SYN段將會重傳。
  3.為了確認服務器的SYN,客戶端將ISN(s)的值加1後作為返回的ACK數值。這稱為段3。
  通過發送上述3個報文段就能夠完成一個TCP連接的建立。它們也常稱作三次握手
  三次握手的目的不僅在於讓通信雙方了解一個連接正在建立,還在於利用數據包的選項來承載特殊的信息,交換初始序列號。
  TCP協議規定通過發送一個FIN段來發起關閉操作。只有當連接雙方都完成關閉操作後,才構成一個完整關閉:
  1.連接的主動關閉者發送一個FIN段
指明接收者希望看到的自己當前序列號(K)。FIN段還包含了一個ACK段用於確認對方最近一個發來的數據(L)。
  2.連接的被動關閉者將K的數值加1作為響應的ACK值,以表面它以及成功接收到主動關閉者發送的FIN。此時,上層的應用程序會被告知連接的另一端已經提出了關閉的請求,通常,這將導致應用程序發起自己的關閉操作。接著,被動關閉者將身份變為主動關閉者,並發送自己的FIN。該報文段的序列號為L。
  3.為了完成連續的關閉,最後發送的報文段還包含一個ACK用於確認上一個FIN。值得註意的是,如果出現FIN丟失的情況,那麽發送方將重新傳輸直到接收到一個ACK確認為止。
  綜上所述,建立一個TCP連接需要3個報文段,而關閉一個TCP連接需要4個報文段。

[TCP/IP] TCP建立與終止