网络知识总结

本文对网络知识进行总结。

1.网络基础

1.1 GET和POST的请求的区别

POST、GET是http的两种请求方式,其主要区别如下:

  • 应用场景: GET请求是一个幂等的请求,一般GET请求不会对资源服务器产生影响,而POST非幂等请求,会对资源服务器产生影响。
  • 是否缓存: 浏览器一般会对GET请求进行缓存,但是很少对POST请求进行缓存。
  • 发送报文形式: GET请求,实体部分为空。POST请求报文实体部分一般为向服务器发送数据。
  • 安全性: GET接口请求参数放到URL中,这样对于POST请求是不安全的,因为访问的记录保存在历史记录中。
  • 请求长度: 由于浏览器对url的限制,所以会影响get请求发送时的长度。这个是浏览器自身限制,非RFC限制。
  • 请求参数: POST支持更多的请求参数。

注:幂等的请求: 一个HTTP方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。在正确实现的条件下, GETHEADPUTDELETE 等方法都是幂等的,而 POST 方法不是。

1.2 POST和PUT请求的区别

  • PUT请求是向服务器发送数据,从而修改数据内容,但是不会增加数据种类,也就是无论PUT几次,其结果一样。(更新数据)
  • POST请求是向服务器发送数据,从而改变数据资源和种类,他会新建新的资源。(新增数据)

1.3 常见HTTP请求和响应头

HTTP请求头有如下:

  • Referer:发出请求页面url
  • Accept-Charset:浏览器能够处理的内容
  • Accept-Encoding:浏览器能够显示的字符集
  • Connection:浏览器和服务器之间的连接
  • Cookie:当前页面设置的cookie
  • Host:当前页面所在的域名
  • Referer:发送页面请求的url
  • User-Agent:浏览器用户代理字符串
    HTTP响应头:
  • Date:表示用户发送消息的时间
  • Server:服务器名称
  • Cache-Control:控制缓存
  • Content-Type:返回的文档类型

1.4 HTTP 和 HTTPS 区别

  • HTTPS需要CA证书,费用较高;而HTTP协议不需要
  • HTTPS是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
  • 使用连接方式不同,端口也不同,HTTP是80,HTTPS是443
  • HTTP连接是简单的,无状态;而HTTPS是具有SSL和HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP更安全。

1.5 TCP三次握手

image.png

TCP三次握手过程:

  • 第一次握手:客户端发送SYN报文,进行SYN_SEND状态,等待服务端确认。
  • 第二次握手:服务端收到SYN报文,需要给客户端发送ACK确认报文,同时服务端也向客户端发送一个SYN报文,即SYN+ACK报文,这个SYN报文和上面第一次握手报文不一样,这是服务端的报文,服务端进行SYN_RCVD状态
  • 第三次握手:客户端收到SYN+ACK报文,向服务端发送确认包(ACK),客户端进入ESTABLISHED状态,待服务端收到客户端发送的ACK后,服务端也进入ESTABLISHED状态,并完成三次握手。

延伸问题:

二次握手可以吗?

TCP建立之前,需要确认客户端和服务端双方包容和发包能力。

  • 第一次握手: 客户端发送网络包,服务端接收到,这样服务端能得到结论:客户端的发送能力、服务端的接收能力政策。
  • 第二次握手: 服务端发包,客户端收到,这样客户端能收到结论:服务端发送能力、接收能力正常,客户端接收、发送能力正常,但是客户端不明确服务端是否知道客户端接收能力正常。
  • 第三次握手: 客户端发包,服务端接收到,这样服务端就能确定,客户端的接收能力正常。

进一步学习,可阅读链接:淘宝二面,面试官居然把TCP三次握手问的这么详细

1.6 TCP四次挥手

image.png
  • 第一次挥手:客户端发起FIN包(FIN = 1),客户端进入FIN_WAIT_1状态。TCP规定,即使FIN包不携带数据,也要消耗一个序号。
  • 第二次挥手:服务端收到FIN包,发出ACK(ACK = u + 1),并携带自己的序号seq = v,服务端进入CLOSE_WAIT_1状态,这时客户端已经没有数据需要发送,这时如果服务端如果有数据要发送,客户端依旧需要接受,客户端接受到ACK和seq后,进行FIN_WAIT_2状态。
  • 第三次挥手:服务端数据发送完毕,向客户端发送FIN包(seq = w,ACK = u + 1),半连接状态服务端可能还会发送其他数据给客户端,加入发送数据是seq = w,服务端此时进入LAST_ACK状态。
  • 第四次挥手:刻度端收到FIN包后,发出确认包(ACK = 1,seq = u + 1),此时客户端进入TIME_WAIT状态,此时TCP连接还没释放。经过2 * MSL后,才进入CLOSED状态。服务端在接受到确认包后,就进入了CLOSED状态,可以看出服务端比客户端更快断开连接。

延伸问题:

为什么建立连接握手三次,关闭连接时需要是四次呢?

其实在TCP握手的时候,接受端发送SYN+ACK的包是将ACK和SYN合并在一起,合到一个包中,所以减少了一个包的发送,减少了一次请求。

对于四次挥手,由于TCP是全双工通信,在主动关闭方发送确认包后,接受可能还需要接受数据,不能马上关闭通信通道,所以不能将服务端的FIN包和ACK进行合并,只能先确定ACK,等待服务端没有再发送数据时,发送FIN包,所以四次挥手是四次数据包的交互。

1.7 TCP和UDP

TCP和UDP都是属于传输层协议,都属于TCP/IP协议族:

UDP

UDP全称:用户数据报协议。在网络中,它处理数据包,是一种无连接协议。在OSI中,其属于IP协议上一层。UDP不提供数据包分组、组装、和对数据排序能力,当数据包发送后,无法得知服务端是否接受成功。

特点:

  • 面向无连接:UDP不需要像TCP那样进行三次握手,想发送就可以发送。
  • 单播、多播、广播特点:UDP支持一对多、多对多、多对一的方式。
  • 面向报文:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。
  • 不可靠性:UDP不需要建立,想发就发,这是不可靠的。
  • 头部开销小,传输高效。

TCP

TCP特点:

  • 面向连接:需要三次握手才能建立可靠连接。
  • 只支持单播传输:每条TCP连接只支持点对点连接和传输,不支持多播、广播。
  • 可靠传输:由于建立可靠的连接,以及有对应判断丢码、编码,还有重传的机制。
  • 提供拥塞控制:当连接拥塞时,能减少网络的注入数据
  • 全双工通信:TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

进一步学习,可阅读链接:一文搞懂TCP与UDP的区别

1.8 HTTP2.0和HTTP1.1区别

  • 二进制协议: HTTP2.0是一个二进制协议。在HTTP1.1中,报文头部是文本(ASCII编码),数据报可以为文本,也可以是二进展。在HTTP2.0中,报文头部彻底是二进制,消息体和数据体都是二进制,并统称为‘帧’,这个是HTTP2.0多路复用的基础。
  • 多路复用: HTTP2.0实现了多路复用,虽然HTTP2.0依旧使用TCP协议,但是一个连接中,客户端和服务端可以同时发送、接收多个请求,避免‘队头阻塞’的问题
  • 数据流: HTTP2.0实现数据流的概念,因为HTTP2.0的数据包是不按顺序,同一连接里面的数据包,可能属于不同请求,需要对数据包做标记,指出属于那个请求,HTTP2.0将每个请求或响应的数据包,成为数据流。
  • 头信息压缩: HTTP2.0实现头信息的压缩
  • 服务端推送: HTTP2.0允许服务器没经过请求,主动向客户端推送资源(静态资源),这个称为服务端推送。

1.9 OSI七层模型

OSI七层模型 作用
应用层 为应用程序提供网络服务
表示层 数据格式化,加密,解密
会话层 建立、维护、管理通话
传输层 建立、维护、管理端到端连接
网络层 IP寻址和路由选择
数据链路层 控制网络层和物理层连接
物理层 比特流传输

你可能感兴趣的:(网络知识总结)