tcp 怎么保证数据包有序

主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,

如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。

接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,

接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。

tcp 和 udp 的异同

TCP是面向字节流的可靠数据传输连接

UDP是面向数据包的不可靠无连接

tcp 怎么保证可靠性

差错检验机制,反馈机制,重传机制,引入序号,滑动窗口协议,选择重传

tcp 中 拥塞避免 和 流量控制 机制

拥塞避免和流量控制这两种机制很像,但是流量控制是由接收方的接受能力也就是接收窗口所决定的,如果接收窗口够大,以动态调整发送窗口的大小调整发送速度

拥塞避免主要由网络情况所限制,网络情况良好,则加大发送速率,网络状态差(冗余ACK和丢包)则降低发送速率(慢启动,拥塞控制,快恢复,快重传)RENO,BBR

拥塞控制

  • 慢开始和拥塞避免

    • 在主机刚开始发送报文段时可以将拥塞窗口cwnd设置为一个最大报文段MSS的数值,在每接受到一个对新的报文段的确认后,将拥塞窗口增加 至多一个 MSS的数值。这样的方法,逐步增大发送端的拥塞窗口,可以使分组注入到网络的速率更加合理
  • 快重传和快恢复

    • 快重传算法规定,发送端只要一连收到三 个重复的ACK即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。
      不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

tcp 四次挥手的详细解释

tcp四次挥手其实可以分为两个阶段

第一:

客户端至服务器的半双工连接关闭

客户端向服务器发送FIN信号,进入FIN_WAIT1的状态,等待服务器的ACK信号

收到服务器的ACK后,进入FIN_WAIT2

第二:

服务器至客户端的半双工连接关闭

客户端收到服务器发来的FIN后,发送ACK,并进入TIME_WAIT,等待2msl,若无异常,则客户端认为连接成功关闭

服务器收到客户端发来的ACK后,关闭连接

四次挥手之后为什么还要等待2msl

MSL是报文最大生存时间

1是因为有可能客户端发往服务器的ACK丢失,服务器并不知道客户端已经确认关闭,这时候客户端的关闭会导致服务器端无法正常关闭

2是为了保证连接中的报文都已经传递。假如短时间关闭又重新实现一个TCP还连到了同个端口上,旧连接中尚未消失的数据就会被认为是新连接的数据。

浏览器从输入网址到显示出网页的全过程

1.输入网址或者ip。

2.如果输入的是网址,首先要查找域名的ip地址

第一步会在浏览器缓存中查找,如果没有,转至查询系统缓存,如果还是没有,发送请求给路由器,路由器首先会在自身的缓存中查找,如果还是没有,向ips发出请求,查询ips中的dns缓存,如果还是没有递归向上查询直至根服务器。

3.浏览器与ip机器之间建立TCP连接(三次握手)(HTTP)或者在TCP上进一步建立SSL/TLS连接(HTTPS)

接下来就是发送HTTP报文啥的了

GET,POST,DELETE,PUT。

滑动窗口机制的原理和理解

GBN协议,回退N步协议,这是对停等协议的改进,因为停等协议的传输效率非常低下。每次可发送的数据为N,基数为base,小于base的数据已经发送并且确认,base是最小的已发送未确认的报文序号。在接收端同样也有一个接收窗口,(解释)GBN采用的是累计确认方式,这时候说一下选择重传机制。再说一下TCP中既不是GBN也不是SR,而是GBN和SR的综合体。

N的大小必须报文序列编号的一半,否则接收端对报文的确认可能发生混淆

Https 原理和实现,cookie和session的区别是什么

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户

cookie存在本地的上的

session是存在服务器上的

通俗讲,Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。另外一个更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。

Session是存在服务器的一种用来存放用户数据的类HashTable结构。

二者都用来保持用户的状态,cookie可更改,对服务器来说并不安全,服务器常见做法有这两种

1.把session加密后放入浏览器的cookie中,浏览器重连后将加密的session发给服务器

2.cookie中存储着session的id,浏览器重连时只需要发送session_id’即可