面向連線,可靠傳輸,面向位元組流
tcp協議
面向連線
accept:獲取新連線
1.當呼叫accept之後,核心就會為新連線建立乙個套接字描述符,服務端使用該套接字描述符進行和客戶端進行資料通訊
2.連線建立之後,雙方都可以傳送資料
確認msg1:確認的行為是傳輸層tcp協議的行為,不是應用層的行為,當確認之後,確認的資料就快取在tcp的接收緩衝區
應用層可以呼叫recv函式從接收緩衝區中拷貝資料
msl:最大報文段生存時間,指的是傳送方認為tcp報文在網路中的最大生存時間
2msl = 丟失ack的msl + 重傳fin的msl
位址復用問題
如果乙個tcp服務端程式需要立即重啟乙個服務端程式,再重啟的過程需要繫結埠。由於連線狀態並沒有變成closed,伺服器斷開連線,就會產生time_wait狀態,在2msl時間裡,核心會拿著埠,等待2msl這個行為是tcp行為,即使程式退 出,核心還占用著對應埠。
解決方法:int setsockopt(int sock, int level, int optname, const void* optval, socklen_t len)
目的埠:接收方在進行資料分用的時候,傳輸層tcp協議通過埠,可以將資料提交給指定偵聽的應用層程式,傳輸層在通過目的埠來區分資料屬於那乙個程序
32位序號:標識tcp源端向tcp目的端傳送資料位元組流
注意:
1.在tcp通訊過程中,客戶端和服務端各維護一套序號
2.在訊息接收方需要確認接收的資料進行確認,在確認的時候,需要組織確認序號,確認序號是期望對方傳送的下乙個序號
3.在tcp資料傳輸過程當中,ack資料報並不會消耗序號
對於一次三次握手而言,雙方在傳送第乙個資料報的時候,是在協商彼此的起始序號的位置,對於每乙個連線雙方而言,自己管理的序號不一定是從0開始
對於傳送資料而言,整體消耗的序號 = 起始序號 + 資料長度 -1,確認序號 = 起始序號+資料長度
4位首部長度
0000~1111(0x00~0xf)
首部長度位元組大小 = 4*15 = 60 --》tcp協議頭部最大位元組60位元組
6為保留位
6個標誌位
urg緊急標誌位:配合緊急指標來使用
ack標誌位:表示確認資料
phs標誌位:表示傳送資料
rst標誌位:重置連線
syn:發起連線
fin:斷開連線
16位視窗大小:2位元組資料,視窗範圍(0-2^16)
16位校驗和:檢驗資料是否完成
16位緊急指標:和urg標誌位一起使用,如果urg標誌位為1,則緊急指標指向的資料有效
傳輸層 TCP協議
1 序號 在乙個tcp連線中傳送的位元組流中的每乙個位元組都按順序編號,本欄位表示本報文段所傳送資料的第乙個位元組的序號。2 確認號 期望收到對方下乙個報文段的第乙個資料位元組的序號。若確認號為n,則證明到序號n 1為止的所有資料都已正確收到。即採用累計確認 3 資料偏移 首部長度 tcp 報文段的...
傳輸層協議TCP
部分埠號 第二次握手 伺服器應用程序被動開啟。若同意客戶端的請求,則發回確認報文,其首部中 syn 1,ack 1,ack x 1,seq y。第三次握手 客戶端收到確認報文之後,通知上層應用程序連線已建立,並向伺服器發出確認報文,其首部 ack 1,ack y 1。當伺服器收到客戶端的確認報文之後...
傳輸層 TCP 協議
tcp 和 udp 處在同一層 運輸層,但是它們有很多的不同。tcp 是 tcp ip 系列協議中最複雜的部分,它具有以下特點 tcp 是面向位元組流的,而 tcp 傳輸資料的單元是報文段。乙個 tcp 報文段可分為兩部分 報頭和資料部分。資料部分是上層應用交付的資料,而報頭則是 tcp 功能的關鍵...