在tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。
第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。
如下圖所示:
圖1-1 三次握手示意圖
完成三次握手,客戶端與伺服器開始傳送資料,在上述過程中,還有一些重要的概念:
未連線佇列:在三次握手協議中,伺服器維護乙個未連線佇列,該隊列為每個客戶端的syn包(syn=j)開設乙個條目,該條目表明伺服器已收到syn包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連線在伺服器處於syn_recv狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入established狀態。
backlog引數:表示未連線佇列的最大容納數目。
syn-ack 重傳次數 伺服器傳送完syn-ack包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連線資訊從半連線佇列中刪除。注意,每次重傳等待的時間不一定相同。
w32中c++程式設計,若使用到網路程式設計,需#include ,然後在配置屬性->輸入->附加依賴項中加入ws2_32.lib,這樣,實際的工程中才能使用網路通訊的api。
wsastartup():為了在應用程式當中呼叫任何乙個winsock api函式,首先第一件事情就是必須通過wsastartup函式完成對winsock服務的初始化,因此需要呼叫wsastartup函式。
wsacleanup():當完成了windows sockets的使用後,應用程式或dll必須呼叫wsacleanup()將其從windows sockets的實現中登出,並且該實現釋放為應用程式或dll分配的任何資源.
1、初始化
2、建立socket
3、繫結到本地
4、進行偵聽
5、等待連線
6、進行通訊
7、關閉連線
8、清理資源
1、初始化
2、建立socket
3、連線
4、進行通訊
5、關閉通訊
6、清理資源
附**:
基於UDP的網路通訊程式
我們知道tcp ip協議是至今發展最為成功的協議之一,也是整個網際網路的基礎。它在傳輸層有兩個不同的協議 tcp和udp,用途都很廣泛,下面我就udp做乙個示例程式。整個例子有兩個程式組成,乙個傳送資料,另乙個程式接收資料後,完成繪圖工作。本文程式執行效果圖如下 一 傳送程式 首先建立資料傳送程式 ...
socket實現UDP網路通訊程式
首先回顧socket套接字程式設計 socket就是一套網路程式設計介面 上層使用者通過這些介面簡單地完成網路通訊傳輸不需要關心內部實現 類似中介軟體 五元組 源ip位址,源埠,目的ip位址,目的埠,協議 用於標識資料,每個網路中資料都會包含 套接字程式設計 使用socket介面實現通訊 網路通訊 ...
華為網路通訊基一
2.網路通訊的簡述原理 1 應用程式生成需要傳遞的資訊。2 應用程式將資料打包成原始的 資料載荷 3 在原始的資料載荷的前後分別加上 頭部 和 尾部 形成 報文 報文頭部中最重要的資訊是接受者的資訊,亦即 目的位址 在乙個資訊單元的基礎上,增加一些新的資訊段,使其形成乙個新的資訊單元,這個過程稱為 ...