TCP三次握手
总所周知tcp的中文名叫传输控制协议,属于传输层 主要目的是给用户提供可靠的传输服务
三次握手是tcp用来建立端到端之间connection(连接)的方式
首先由发送端(发送端可以是pc机也可以是服务器)发送请求报文
pc1——————-————————————————>server
>>>>seq(序列号)=x(随机值),ack=0(确认号)
>>>>flag:
syn(请求连接)=1
,ACK=0(ack无效)
此时的ack(确认号)=0
pc1<——————-————————————————server
<<<<seq=随机值,ack=b
(ack=seq+1)
<<<<flag:
syn=1(答应了pc1的请求)
,ACK=1(此时ack确认号有效)
pc1——————-————————————————>server
>>>>seq=x+1,ack=b+1
>>>>flag:syn=0
(已经完成三次握手不在请求)
,ACK=1
数据传输
单个传输
传输数据时序列号等于上个报文的确认号
确认号等于上个报文的序列号+数据大小
pc1——————-————————————————>server
传输一个100字节大的数据
>>>>seq=x+1,ack=b+1
>>>>flag:syn=0,ACK=1;date=100
pc1<——————-————————————————server
<<<<seq=b+1,ack=x+1+100
<<<<flag:syn=0,ACK=1;
批量传输
pc1——————-————————————————>server
传输一个200字节大的数据
>>>>seq=x+1+100,ack=b+1+0
>>>>flag:syn=0,ACK=1;date=200
pc1——————-————————————————>server
传输一个150字节大的数据
>>>>seq=x+1+100,ack=b+1+0
>>>>flag:syn=0,ACK=1;date=150
pc1——————-————————————————>server
传输一个100字节大的数据
>>>>seq=x+1+100,ack=b+1+0
>>>>flag:syn=0,ACK=1;date=100
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
pc1<——————-————————————————server
<<<<seq=b+1+0,ack=x+1+100+450
<<<<flag:syn=0,ACK=1;
pc1<——————-————————————————server
<<<<seq=b+1+0,ack=x+1+100+450
<<<<flag:syn=0,ACK=1;
pc1<——————-————————————————server
<<<<seq=b+1+0,ack=x+1+100+450
<<<<flag:syn=0,ACK=1;
四次分手
pc1——————-————————————————>server
>>>>seq=x+1+100+450,ack=b+1+0
>>>>flag:syn=0,FIN=1(释放连接),ACK=1;
pc1<——————-————————————————server
<<<<seq=b+1+0,ack=x+1+100+450
<<<<flag:syn=0,FIN=0,ACK=1;
pc1<——————-————————————————server
<<<<seq=b+1+0,ack=x+1+100+450
<<<<flag:syn=0,FIN=1,ACK=1;
pc1——————-————————————————>server
>>>>seq=x+1+100+450,ack=b+1+0+1
>>>>flag:syn=0,FIN=0(完全释放连接),ACK=1;