看了阮一峰老师的关于TCP协议的文章后,自己做了些总结
传送门:http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html
以太网协议: 解决子网内点对点通信
ip协议: 解决局域网之间通信,但是不能保证数据包的完整
TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。
TCP和UDP都是传输层的协议
TCP.png
简单来说,以太网数据包的负载是1500字节,TCP 数据包的负载在1400字节左右,一次TCP通信可以包括多个HTTP通信,而且TCP通信是双向的
<1>TCP为每个包编号,编号规则:
当前包编号 + 当前包负载 = 下个包的编号
这样接收方收到数据包时候可以通过编号还原,就可以知道哪个包丢失了
<2>操作系统接受TCP数据包,把他们按顺序组装好,组装好后通过端口把他们转给应用程序
<3>慢启动机制: 一开始发送数据包会比较慢,而后根据丢包情况再调整顺序
<4>接收方每收到两个 TCP 数据包,就要发送一个确认消息。"确认"的英语是 acknowledgement,所以这个确认消息就简称 ACK。
ACK.png
如果发送方发现收到三个连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即5号包遗失了,从而再次发送这个包。通过这种机制,TCP 保证了不会有数据包丢失。
TCP的三次握手,四次挥手
三次握手:客户端向服务端发送连接请求,服务端发送ACK回复客户端,客户端再次向服务端发送ACK确认,然后俩端都进入连接状态
四次挥手: 客户端向服务端发送断开请求,服务端回复接受断开的请求,准备断开连接,然后准备好断开连接之后向客户端发送我准备好了的响应,客户端接收到响应后发送ACK确认,最后俩端进入断开状态