前端知识总结2

网络

  1. UDP
  • UDP是一个面相报文(报文可理解为一段段的数据)的协议。意思就是UDP只是报文的搬运工,不会对报文进行任何拆分和拼接操作

  • 具体来说在发送端,应用层将数据传递给传输层UPD协议,UDP只会给数据增加一个UDP头标识下是UDP协议,然后就传递给网络层

  • 在接收端,网络层将数据传递给传输层,UDP只去除IP报文头就传递给应用层,不会任何拼接操作

    不可靠性

    • UDP是无连接的,也就是说通信不需要建立和断开连接
    • UDP也是不可靠的。协议收到什么数据就传递什么数据,并且也不会备份数据,对方能不能收到是不关心的
    • UDP没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是有点也很明显,在某些实时性要求高的场景(比如直播,电话会议)就使用UDP而不是TCP

    高效

    • 因为UDP没有TCP那么复杂,需要保证数据不丢失且有序到达。所以UDP的头部开销小,只有8字节,相比TCP的至少二十字节要少得多,在传输数据报文时是很高效的
    • 头部包含了以下几个数据
      • 2个十六位的端口号,分别为源端口(可选字段)和目标端口整个数据报文的长度
      • 整个数据报文的检验和(IPv4可选字段),该字段用于发现头部信息和数据中的错误

    传输方式

    • UDP不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说UDP提供了单播,多播,广播的功能
  1. TCP
  • 头部
    • TCP头部比UDP头部复杂的多,对于TCP头部来说,以下几个字段是很重要的

      • Sequence number,这个序号保证了TCP传输的报文都是有序的,对端可以通过序号顺序的拼接报文
      • Acknowledgement Number,这个序号表示数据接收端期望接收的下一个字节的编号是多少,同时也表示上一个序号的数据已经收到
      • Window Size,窗口大小,表示还能接受多少字节的数据,用于流量控制
    • 标识符

      • URG=1:该字段为一表示本数据报的数据部分包含紧急信息,是一个高优先级数据报文,此时紧急指针有效。紧急数据一定位于当前数据包数据部分的最前面,紧急指针标明了紧急数据的尾部。
      • ACK=1:该字段为一表示确认号字段有效,此外,TCP还规定在连接建立后传送的所有报文段都必须把ACK置为一PSH=1:该字段为一表示接收端应该立即将数据push给应用层,而不是等到缓冲区满后在提交。
      • RST=1:该字段为一表示当前TCP连接出现严重问题,可能需要重新建立TCP连接,也可以用于拒绝非法的报文段和拒绝连接请求。
      • SYN=1:当SYN=1,ACK=0时,表示当前报文段是一个连接请求报文。当SYN=1,ACK=1时,表示当前报文段是一个同意建立连接的应答报文。
      • FIN=1:该字段为一表示此报文段是一个释放连接的请求报文
    • 状态机

      • HTTP是无连接的,所以作为下层的TCP协议也是无连接的,虽然看似TCP将2端连接起来,但是其实只是两端共同维护了一个状态
    • 建立连接三次握手

      • 在TCP协议中,主动发起请求的一端为客户端,被动连接的一端称为服务端,不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据,所以TCP也是一个双全工的协议。

      • 起初,两端都为CLOSED状态。在通信开始前,双方都会创建TCP。服务器创建完TCP后便进入LISTEN状态,此时开始等待客户端发送数据

      • 第一次握手

        • 客户端向服务端发送连接请求报文段,该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入SYN-SEND状态,x表示客户端的数据通信初始序号。
      • 第二次握手

        • 服务端收到连接请求后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入SYN-RECEIVED状态
      • 第三次握手

        • 当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTAVLISHED状态,此时连接建立成功
        • 第三次握手可以包含数据,通过TCP快速打开(TFO)技术。其实只要涉及到握手协议,都可以使用类似TFO的方式,客户端和服务端储存相同cookie,下次握手时发出cookie达到减少RTT的目的
    • 四次挥手

      • 第一次握手
        • 若客户端认为数据发送完成,则它需要向服务端B发送连接释放请求。
      • 第二次握手
        • B收到连接释放请求后,会告诉应用层要释放TCP连接,然后会发送ACK包,并进入CLOSE_WAIT状态,表示A到B得到连接已经释放,不接收A发的数据了,但是因为TCP连接是双向的,所以B仍旧可以发送数据给A
      • 第三次握手
        • B如果此时还没发完的数据会继续发送,完毕后会向A发送连接释放请求,然后B便进入LAST-ACk状态(通过延时确认的技术(通常有时间限制,否则对方会误认为需要重传)可以将第二次和第三次握手合并,延迟ACK包的发送)
      • 第四次握手
        • A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃)时间,若该时间内没有B的重发请求的话,就进入CLOSED状态。当B收到确认应答后,也便进入CLOSED状态
        • 为了保证B能收到A的确认应答,若A发完确认应答后直接进入CLOSED状态,如果确认应答因为网络问题一直没有到达,那么会造成B不能正常关闭
  1. HTTP
  • http协议是个无状态协议,不会保存状态
  • get和post的区别
    • get请求能缓存,post不能缓存
    • post相对get安全一点点,因为get请求都包含在url里,且会被浏览器保留历史记录,post不会,但是在抓包的情况下都是一样的
    • post可以通过request body来传输比get更多的数据,get没有这个技术
    • url有长度限制,会影响get请求,但是这个长度限制是浏览器规定的,不是RFC规定的额
    • post支持更多的编码类型且不对数据类型限制
  • 常见状态码
    • 2xx成功
      • 200 ok,表示从客户端发来的请求在服务器端被正确处理
      • 204 No content ,表示请求成功,但是响应报文不含实体的主体部分
      • 205 Reset Content,表示请求成功,但响应报文不含实体的主体部分,但是与204响应不同在于要求请求方重置内容
      • 206 Partial Content,进行范围请求
    • 3xx重定向
      • 301 moved permanently,永久重定向,表示资源已被分配到新的url
      • 302 found,临时重定向,表示资源临时被分配了新的url
      • 303 see other,表示资源存在另一个url,应使用get方法定向获取资源
      • 304 not modified,表示服务器允许访问资源,但因发生请求为满足条件的情况
      • 307 temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变的情况下向新的地址发出请求
    • 4xx客户端错误
      • 400 bad request,请求报文存在语法错误
      • 401 unauthorized,表示发送的请求需要有通过http认证的认证信息
      • 403 forbidden,表示请求资源的访问被服务器拒绝
      • 404 not found,表示在服务器上没有找到请求的资源
    • 5xx服务器错误
      • 500 internal server error,表示服务器在执行请求时发生了错误
      • 501 Not Implemented,表示服务器不支持当前请求所需要的的某个功能
      • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
    • http首部
  1. DNS
  • dns的作用就是通过域名查询到具体的ip
  • 因为ip存在数字和英文的组合(ipv6),很不利于人类记忆,所以就出现了域名。你可以把域名看成是某个Ip的别名,DNS就是去查询这个别名的真正名称是什么
    • 在tcp握手前就进行了DNS查询,这个查询是操作系统自己做的。当你在浏览器中想访问www.google.com时,会进行一下操作
  • 操作系统会首先在本地缓存中查询
  • 没有的话回去系统配置的DNS服务中查询
  • 如果这个时候还没有的话,会直接去DNS根服务器查询,这一步查询会找出负责com这个一级域名的服务器
  • 然后去该服务器查询google这个二级域名
  • 接下来三级域名的查询其实使我们自己配置的,你可以给www这个域名配置一个IP,然后还可以给别的三级域名配置一个IP
    • DNS迭代查询,还有种是递归查询,区别就是前者是由客户端去坐请求,后者适合由系统配置的DNS服务器做请求,得到结果后将数据返回给客户端
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值