提供程序間通訊,host to host,路由器與交換機無法干涉。
埠號範圍:
0-65535 16位 0-1023周知埠號
埠號列表:
tcp 25埠:smtp 25仔
tcp 110埠:pop3 報警110 police
不可靠,非面向連線,速率不可調節
二元組(源埠,目的埠)
報文結構
16bits length 頭和資料總和
16bits checksum 所有16bits相加,溢位忽略,得到最終值進行反碼運算
在服務端檢測只需全相加為 全一
應用好處:
應用層能更好控制傳送的資料和傳送時間
資料將會立刻被打包成報文段,傳到網路層
適合實時傳輸的應用,容忍小錯誤
tcp的擁塞機制減慢速度
無需建立連線
tcp三次握手耗時
無連線狀態
無需維持連線狀態
tcp需要提供可靠資料連線與擁塞機制
分組頭部開銷小
可靠,面向連線,相當於gbn+sr
累計確認:
tcp只確認資料流至第乙個丟失位元組為止的位元組
快速重傳:
收到3個重複ack,重新傳送
四元組(源ip位址,源埠,目的ip,目的埠)
報文結構:
seq num: 32bits 按位元組為單位標註
ack num: 32bits 【為客戶端發過來的seq+1】
header length: 4bits 僅記錄報文頭部的大小,單位為word(32bits)
flag field: (以下均1bit)
1)urg 緊急傳輸使用
2)ack 檢驗ack合法性
3)psh 需要盡快傳輸到應用層
4)rst 在三次握手時,告訴請求方沒有相應的埠號
5)syn 在三次握手時,請求發問接收方存在不存在
6)fin 四次揮手時,來告訴對方我要釋放資源啦,其實有一段緩衝時間等接受到才正式釋放資源的
receive window: 16bits 接受視窗大小,跟擁塞控制有很大關係
checksum: 16bits
urgent data pointer: 緊急資料指標,直接指向緊急資料開始處(byte計算)
流量控制vs擁塞控制
流量控制:對於傳送的資料報的速率
根據buffer來控制傳送速率,以及接受速率
已傳送-已經ack <= rwnd
已接收-已經交付給上層 <= rwnd
rwnd = buffer - data in buffer
【注意,當rwnd為0時,客戶端也是需要不斷傳送請求,以確保收到ack來更新客戶端的buffer狀態】
擁塞控制:對於window size變化來說
慢啟動:
乙個transmission time翻倍,1→2→4→8→16【16為闕值,達到就進入擁塞避免】
擁塞避免:16→17→18→19→20
當dupack>=3
快速恢復:
tcp reno: 20→20/2+3=13→擁塞避免
tcp tahoe: 20→1→慢啟動
三次握手
在麼在麼
我在,我準備好咯,你呢【準備資源中,如果沒3,則可能是syn泛洪攻擊】
ok,我們可以通訊啦
四次揮手
a:我要跟你分手了噢
b:我還沒充分準備,請接受我的道歉信,a:婆婆媽媽的,我先看一下道歉信,哼
b:我已經盡力了,只能跟你分了
a:就知道是這個結果,趕緊定個鬧鐘睡覺,明天又是完美的一天
b:已死心。。
stop and wait:
rdt1.0 天真無邪,只有等待or傳送
rdt2.0 需要得到確認,引入ack nak 和checksum 稱為「停-等」協議
實現 自動重傳請求協議:
1. 差錯檢測
2. 接收方反饋
3. 重傳
rdt2.1 針對nak ack分組受損
引入 sequence number,1bit 標識狀態
rdt2.2 移去nak,直接使用ack就能判斷了
rdt3.0 引入timer,不用通過重複ack回傳資訊,直接time over重傳
流水線協議:
gbn(go-back-n)
遇到超時的包直接重傳window內的所有包,接收方對seq進行校對,若沒滿足連續,則會丟棄不交付給上層,但會傳送上一次傳送的ack,計時器是對全域性使用的,且接收方不用快取任何分組,都屬於一次**付
sr(selective-repeat)
每個分組有自己的定時器,傳送方接收方均有window,接收方具有快取機制,分組可以連續交付【斷→buffer的】。
window size <= size of seq num space/2;
注意:tcp兩者都兼有
可靠性資料傳輸機制:
checksum: 用於檢測位元數目
timer: 計時器,用來檢測超時並重傳
seq num: 標識有序的packet
ack num: 確認已經收到的packet
nck num: 確認未收到
window,pipeling: 提高傳輸速率
套接字:(socket)
程序上的資料
多路分解:(demultiplexing) 服務端
報文段資料→套接字
多路復用:(multiplexing) 客戶端
套接字→報文段
計算機網路之傳輸層
明天就考計算機網路,暫時先簡單的寫一寫 tcp 協議,日後再繼續寫完這一層吧。實際的傳輸通道總是不夠理想的,不可避免的會發生一些差錯,這就需要我們制定一些規則來使得傳輸變得可靠,tcp 協議就這樣應運而出。這是 tcp 協議中採用的最簡單的一種實現可靠傳輸的協議。如下圖,停止等待 就是傳送端傳送乙個...
計算機網路之傳輸層
網路層只把分組傳送到目的主機,但是真正通訊的並不是主機而是主機中的程序。傳輸層提供了程序間的邏輯通訊,傳輸層向高層使用者遮蔽了下面網路層的核心細節,使應用程式看起來像是在兩個傳輸層實體之間有一條端到端的邏輯通訊通道。向兩個主機中程序間的通訊提供通用資料傳輸服務 區別 首部字段只有 8 個位元組,包括...
計算機網路 傳輸層
為什麼要劃分傳輸層?既然網路層已經能把源主機上發出的資料傳送給目的主機,那麼為什麼還需要加上乙個傳輸層呢?這就需要我們理解主機使用者應用層通訊的主體,位於兩台網路主機中真正的資料通訊主體並不是這兩台主機,而是兩台主機中的各種網路應用程序.同一時間一台主機上可能有多個程序同時執行,這時候就需要為應用程...