因为已经很久没有在学习tcp传输这块,这次简单的记录下来,提醒自己。
tcp 传输图 :
主要以分析 tcp包中Sequence Number , ack 。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)全称Synchronize Sequence Numbers。
** seq: 序列号用于 对对数包的排序
ack : 用于确认对端发送的数据包**
这是用 wireshark 简单抓取的一份分析tcp的图:
握手阶段:
(序列号相对)
client server
seq=0 ===>
seq=0, ack=1 <===
seq=1, ack=1 ===>
完成后 client 通过ack 验证 对端 seq=1 的数据包; server 通过 ack 验证 对端 seq=1的数据包。
数据传输:
client server
seq=1, ack=1, len=3 ==>
<=== seq=1,ack=4
seq=4, ack=1, len=3 ==>
<== seq=7,ack=1
在数据传输的过程, server 端的ack 根据len的长度而在变化, 所以一直变化的值是 client 的seq (对端的ack值) 和server 的ack 。 而 client 的ack 和server 的 seq 一直都是1 , 这也说明 ack 验证的是对端 seq。
4次结束连接: client server
seq=7, ack=1 ====>
<== seq=1, ack=8
seq=8,ack=2 ===>
结束连接需要4次, 因为两端都需要 fin和 ack确认。 上述将server 的 seq 和ack 都放在一起,收到 fin标志时与 syn一样, ack对应需要+1 ,最终 client seq=8, ack=1和 server端的 ack=8, seq=1。
资料来源 TCP 的那些事儿(1)