三次握手简单流程
客户端发送syn报文请求建立连接
服务端回复ack/syn报文
客户端回复ack报文表示成功建立连接
三次捂手的目的是确保客户端和服务端接收数据和响应数据都没有问题
为什么客户端还多发送一次ack呢?
为了避免已经失效的请求再被服务端接收到而产生错误
四次挥手简单流程
客户端发送fin报文 服务端回复ack报文
服务端发送fin报文 客户端回复ack报文
然后客户端必须等待2个最长报文段寿命之后再能进入close状态
服务端收到ack立即进入close状态
为什么客户端需要等待2个msl
1. 客户端等待2个msl是为了保证服务端能接收到客户端发送ack报文 因为服务端会重试如果长时间没收到客户端的ack
2. 2个msl时间后这次连接的所有报文段都会从网络消失这样新的连接不会出现旧连接的报文
四次挥手的目的是客户端断开连接之后 服务端可能还有数据要发送到客户端,所以需要等服务端发送完之后服务端才发送fin请求
为什么建立连接是3次握手,断开连接是4次挥手?
因为服务端在第二次回复的时候是ack/syn一起返回的
断开连接时客户端发送fin报文时表示客户端不发送数据了,服务端可能还有数据要发送到客户端 发送完了才发送fin到客户端断开连接 ack和fin是分开发的
建立请求之后客户端崩溃了怎么办?
tcp有个保活计时器,每次接收到请求都会重置,2个小时没收到客户端请求之后会发送探测报文,每75秒发一次连发10次没响应就断开连接
3次握手跟4次挥手 3次握手就跟早期打电话时的情况一样:
1、听得到吗?
2、听得到,你呢?
3、我也听到了。
然后才开始真正对话
4次挥手是:
1、老师,下课了。
2、好,我知道了,我说完这点。
3、好了,说完了,下课吧。
4、谢谢老师,老师再见
tcp如何保证数据可靠传输的?
1. 数据被分割成若干个块
2. tcp给每个块进行编号,接收端对数据包进行排序 发送给应用层
3. 校验和 如果收到段的校验和有差错,tcp将丢弃这个报文段并不确认收到此报文段
4. tcp会丢弃重复的数据
5. 流量控制 当接收方来不及处理数据时会提示发送方降低发送的速率
接收方的确认报文中的窗口字段可以用来控制发送方窗口的大小
6. 当网络阻塞的时候减少数据的发送
tcp发送方维护一个拥塞窗口cwnd的状态变量,大小由网络的阻塞程度决定 发送方的发送窗口取拥塞窗口和接收窗口较小的那个
拥塞控制的4中算法:
1. 慢开始 发送方发送窗口逐渐变大避免一上来发送大量数据阻塞每经过一个传播轮次,cwnd加倍。
2. 拥塞避免 经过一个往返时间RTT就把发送放的cwnd加1.
3. 快重传与快恢复 接收方接收到一个不按顺序的数据段,会立即给发送方一个重复确认,发送方收到3个重复确认会认为这数据段丢失,会立即重传这些丢失的数据段
7. ARQ协议 每发送一个分组就停止然后等待对方确认,等接到确认后再继续发送
7.1 停止等待arq
每发送完一个分组就等待对方ack,如果过了段时间还未收到就重发,接收方直接丢弃重复数据并发送ack信息
优点: 简单 缺点:信道利用率低 等待时间长
7.2 连续arq
发送方维持一个发送窗口,位于发送窗口内的分组会连续发送出去,不需要等待对方确认,接收方对按序到达的最后一个分组发送确认,表名这个分组之前的包都收到了
优点: 信道利用率高
缺点: 发送方发送了5条消息,第3条丢失了,接收方只能对前两条发送确认,发送方只好把后3个再重新发一次,这叫回退N
8. 超时重传 当发送一个段后,会启动一个计时器,等待接收端确认收到这个报文段,如果超时发送端会重发
从url请求的流程
1. 在浏览器或者路由器缓存中查找域名缓存 没有就dns解析
2. 与服务器建立tcp连接
3. 发送http请求
4. 服务器处理请求并返回http报文
5. 浏览器解析渲染页面
6. 连接结束
cookie 与 session 的区别
cookie保存在客户端
session保存在服务端