日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UNIX网络编程笔记(1):TCP简介

發布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNIX网络编程笔记(1):TCP简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、簡介

TCP(Transmission Control Protocol),即傳輸控制協議,是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。TCP協議有以下幾個特點:

  • TCP提供客戶與服務器之間的連接:TCP客戶先與某個服務器建立連接,跨過連接傳輸數據,然后斷開連接;
  • TCP提供了可靠性:包括超時重傳、RTT(round-trip time往返時間)估計等;
  • TCP提供了流量控制:包括通知窗口、慢啟動等;
  • TCP是雙全工的:在一個連接上可以在任何時刻在進出兩個方向上發送與接收數據;
  • 2、TCP連接的建立

    TCP建立連接就是大家熟知的三次握手:


    通常發生以下幾個步驟:

  • 服務器必須準備好接收外來的連接,通常通過調用socket、bind和listen函數完成,稱為被動打開;
  • 客戶通過調用connect函數發起主動打開,導致客戶TCP發送一個SYN分節,它告訴服務器客戶將在連接中發送的數據的初始序列號;
  • 服務器必須確認(ACK)客戶的SYN,同時自己也發送一個SYN分節,包含服務器將在同一個連接中發送的數據的初始序列號。服務器在單個分節中發送自己的SYN和對客戶SYN的ACK;
  • 客戶必須確認服務器的SYN;
  • 也就是說,對于客戶和服務器來說,每個人都有一個初始序列號SYN,每個人對對端的確認都是在對端SYN的基礎上加1。比如:客戶發送SYN為j,那么服務器發送的對客戶SYN的ACK就是j+1;同理,如果服務器給客戶的SYN是k,那么客戶發送給服務器的ACK就是k+1。下圖展示了TCP的三次握手的具體過程:


    由圖可知,ACK中的確認號就是發送這個ACK的一端所期待的下一個序列號。

    3、TCP連接的終止

    終止一個TCP連接需要四個分節,因為這里涉及到數據的傳輸。

    下面是TCP連接終止的步驟:

  • 某個應用進程首先調用close函數,稱該端執行主動關閉,于是發送一個FIN分節,表示數據發送完畢;
  • 接收到這個FIN分節的對端執行被動關閉,這個FIN由TCP確認,它的接收也作為一個文件描述符傳輸給接收端應用進程,因為FIN的接收意味著接收端應用進程在相應連接上再無額外數據可接受;
  • 一段時間后,接收到這個文件結束符的應用進程將調用close函數關閉它的套接字。導致TCP也發送一個FIN;
  • 接收這個最終FIN的原發送端(即執行主動關閉的一端)確認這個FIN;
  • 連接的兩端每一端都需要一個FIN和ACK,因此需要四個分節。不過也有可能不是四個。比如,執行主動關閉的一端的FIN可以隨數據一起發送,還有,執行被動關閉的一端的ACK和自己的FIN有可能一起發送。下圖展示了關閉連接的過程:


    和TCP建立連接一樣,這里的ACK是FIN+1。

    圖中給出的是客戶端執行主動關閉,不過可以由服務器端執行主動關閉。

    4、TCP狀態轉換圖

    由于TCP連接的建立涉及到三次握手,終止連接需要四次握手,因此TCP連接的狀態在一次完整的連接與終止中可能達到多個。實際上,一個TCP連接的狀態可以有11種,這些狀態可以由具體的操作連接起來,形成一個狀態轉換圖。

    下圖就是TCP狀態轉換圖,圖中用粗實線表示通常的客戶狀態轉換,用粗虛線表示通常的服務器狀態轉換:


    5、一個完整的TCP連接

    下圖展示了一個完整的TCP連接,包括建立連接、數據傳輸與連接終止三個過程:


    6、套接字對

    一個TCP連接的套接字對(socket pair)是一個定義該連接的兩個端點的四元組:本地IP地址、本地TCP端口號。外地IP地址、外地TCP端口號。套接字對唯一標識一個網絡上的每個TCP連接。

    標識每個端點的兩個值(IP地址和端口號)通常稱為一個套接字。

    總結

    以上是生活随笔為你收集整理的UNIX网络编程笔记(1):TCP简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。