mss(maximum segment size)只能出現在syn包中,通訊雙方在syn包和syn+ack包中互相通告各自能接收的mss
syn包不能攜帶data,占用seq
ack包能攜帶data,攜帶data時占用seq,不攜帶data時不占用seq
fin包能攜帶data,不論是否攜帶data都占用seq
即使視窗為0,也必須接收零視窗探測包、ack包、urg包
保活定時器(keeplive):每次收到包後啟動,到期(2小時)還沒收到包,傳送保活探測包
時間等待定時器(time_wait):進入time_wait後啟動,到期(2*msl)還沒收到fin包,終止連線
結束等待2定時器(fin_wait_2):進入fin_wait_2後啟動,到期(10m+75s)還沒收到fin包,終止連線
延遲確認定時器(delay ack):收到包後啟動,到期(200ms)還沒傳送包,傳送ack包
常用tcp選項:mss選項、視窗擴大(window scale)選項、時間戳(timestamp)選項、選擇確認(sack,selective ack)選項
傳送快取和視窗的左邊沿重合,接收快取和視窗的右邊沿重合
除了重傳報文,傳送報文一定是連續的,但是接收報文不一定是連續的,可能亂序
syn和fin包的data長度看作1,不攜帶data的ack包的data長度看作0
- 傳送報文的seq = 最近乙個非重傳傳送報文的seq + data長度
- 傳送報文的ack = 最近乙個非重傳連續接收報文的seq + data長度
方向包型別
synack
finseq
ackdata長度(位元組數)
c->s
syn100
x無效0s->c
syn+ack11
0yx+10
c->s
ack010
x+1y+1
0c->s
data01
0x+1
y+1m
c->s
data01
0x+m+1
y+1n
s->c
ack010
y+1x+m+n+1
0s->c
data01
0y+1
x+m+n+1
pc->s
ack010
x+m+n+1
y+p+1
0c->s
fin011
x+m+n+1
y+p+1
0s->c
ack010
y+p+1
x+m+n+2
0s->c
data01
0y+p+1
x+m+n+2
qc->s
ack010
x+m+n+2
y+p+q+1
0s->c
fin011
y+p+q+1
x+m+n+2
0c->s
ack010
x+m+n+2
y+p+q+2
0
TCP協議簡單總結
正常連線 客戶端 closed syn send established 伺服器 listen syn收到 established 正常關閉 客戶端 established fin wait 1 fin wait 2 time wait closed 服務端 established close wa...
TCP協議經典rfc主題總結
richard stevens的書雖好,但是他所要表達的是讓你知其然。對於想精通tcp的同學來說,光知其然是遠遠不夠的,你還需要更多的時間去了解其所以然,而翻閱rfc文件就是一種最好的方式,這樣你就明白tcp為何這麼設計了。這裡總結了一下tcp核心主題對應的rfc文件,方便自己和大家查閱。rfc序列...
網路程式設計筆記 TCP協議總結
tcp協議是傳輸層中的一種面向連線的,提供可靠服務的傳輸協議,是基於位元組流傳輸的。與udp相比,它會在通訊的雙方通過建立一些資料結構來保證連線的建立。特點如下 後文,再詳細說明tcp協議如何實現這些特點。視窗大小 用作流量控制,標識自己當前能否處理的能力 如果客戶端a和伺服器b想要通過tcp協議進...