面向連線
傳送端傳送次數與接收方接收次數無關;send將資料發入傳送緩衝區(recv同理接收至接收緩衝區);傳輸與接收的資料不會因send次數分開,資料是乙個整體,是乙個位元組流
tcp報頭結構
保證能到達 – 應答確認、超時重傳
保證不亂序
保證不失真
滑動視窗,擁塞控制(待完善,不要做參考)
零視窗零視窗探測報文段
糊塗視窗
報頭四十位元組,視窗空出幾位元組空間就進行小量資料的傳送,浪費資源(但在現實中有些互動場景需要小報文進行傳送這裡不做針對),對小視窗不作回應
nagle演算法,預設開啟
擁塞控制
慢啟動擁塞避免
快速重傳
快速恢復
程式設計流程
tcp網路程式設計是分伺服器端和客戶端的,先說一下服務端的大體程式設計流程
三次握手是在listen之後accept之前
客戶端
socket、bind、send、recv、close和伺服器端同樣方法,下述**僅示例伺服器端
#include
#include
#include
#include
#include
#include
#include
//**
#include
//**
#include
//**
#include
//**
intmain()
while(1
)//迴圈互動
;int n =
recv
(c , buff,
127,0)
;// 如果沒有資料會阻塞
if(n <=0)
//資料小於0互動結束
printf
("%d: %s\n"
,c,buff)
; n =
send
(c,"ok",2
,0);
if(n <=0)
break;}
close
(c);
//關閉連線
}close
(listenfd)
;//關閉監聽
}
TCP協議通訊流程
伺服器呼叫socket bind listen 完成初始化後,呼叫accept 阻塞等待,處於監聽埠的狀態,客戶端呼叫socket 初始化後,呼叫connect 發出syn段並阻塞等待伺服器應答,伺服器應答乙個syn ack段,客戶端收到後從connect 返回,同時應答乙個ack段,伺服器收到後從...
TCP程式設計流程
tcp是傳輸控制協議的簡稱,是tcp ip體系中的面向連線的傳輸層協議,在網路中提供全雙工的 可靠的服務。在上一章節中可知,tcp通訊是通過套接字通訊機制實現的,具體為流式套接字,用來實現乙個面向連線,可靠的資料傳輸服務。目前較為流行的網路程式設計模型是客戶端 伺服器的通訊模式。伺服器和客戶端使用t...
socket程式設計流程(使用TCP協議為例)
先來簡單回憶一下上一次說到的tcp協議 tcp協議 面向連線 可靠的 流式服務 udp協議 無連線的 不可靠的 資料報服務 會發現udp協議和tcp協議恰好相反,但是既然有了可靠的tcp協議,為什麼又要另外乙個不可靠的udp協議呢?因為udp有它自己的優點udp協議是無連線方式的協議,它的效率高,速...