TCP

传输层,可靠

tcp三次握手:

1.client发送【SYN】到 service
2.service返回【SYN+ACK】到client
3.client 发送【ACK】到service

tcp四次挥手:

1.client发送【FIN】 到service
2.service发送【ACK 】到client
3.service 发送【FIN】到client
4.client发送【ACK】到servcie
原因:因为tcp是双向
在三次握手的时候是syn+ack一起,四次的时候是分开发的。因为发送ack的时候不能确定service的数据是发送完毕了的。

为什么说tcp是可靠的

1.三次握手时有 【seq+ack+mss】来作为基础,校验和
2.超时重传:超过时间没有收到相应,自动重新传送
3.分包编号:TCP有专门的序列号SN字段,可提供数据re-order
4.流量控制:调节缓冲空间大小
5.拥塞控制:网络拥塞的时候减少发送量

丢包重传

丢包的原因:
1.并发 2.逻辑错误 3.缓冲区溢出
解决方式:心跳机制
重传的原因:
1.超时重传
2.快重传:就是说在发送端一连收到4个ack报文,其中3个重复报文时,就立即重传相应的报文而不等到定时器超时。
3.SACK方法:记录哪些数据到达了

TCP半连接队列和全连接

三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复syn+ack给client(第二步);
第三步的时候server收到client的ack,如果这时全连接队列没满,那么从半连接队列拿出相关信息放入到全连接队列中,否则按tcp_abort_on_overflow指示的执行。

TCP_第1张图片
image.png

(图片来源: http://www.cnxct.com/something-about-phpfpm-s-backlog/)

OSI模型:物数网传会表应

网络抖动:

网络时延引起的差值,表现其延迟程度
在发布或者上线时容易产生,解决方法:
1.启动预热(编译好的java,机器主动访问热点代码)
2.增加编译的线程

参考:http://jm.taobao.org/2017/05/25/525-1/

你可能感兴趣的:(TCP)