傳輸層TCP協議

2021-10-07 04:23:30 字數 2023 閱讀 5977

面向連線,可靠傳輸,面向位元組流

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 功能的關鍵...