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;
|