1.1、说说TCP的三次握手和四次挥手

  • TCP是什么

TCP是传输控制协议,是面向连接的,可靠的,基于字节流的传输层通信协议,将应用层的数据流分割成报文段并发送给目标节点的TCP层,为保证数据包不丢失,会给数据包添加上序号,对方收到则发送ACK确认,未收到则重传。TCP会使用奇偶校验和函数来校验数据在传输过程中是否有误。

  • “握手”是为了建立连接,TCP三次握手的过程如下:

建立全双工的通道进行数据传输
image.png
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接(SYN (synchronize)是请求同步的意思,ACK是确认同步的意思。):
第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户的SYN =》(ack = j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED转台,完成三次握手

  • 为什么需要三次握手才能建立连接:

为了初始化Sequence Number的初始值
image.png

  • 首次握手的隐患—-SYN超时

Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认,Server不断重复直至超时,Linux默认等待63秒才端开连接

  • “挥手”是为了终止连接,TCP四次挥手的流程图如下:

image.png
TCP采用四次挥手来释放连接

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态;
  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
    • 为什么需要四次握手才能断开连接

因为全双工,发送方和接收方都需要FIN报文和ACK报文

  • TCP的滑动窗口
    • TCP滑动窗口是什么:滑动窗口是程序发送方与接收方的window区域根据处理能力动态更新window区域的一种方式
    • TCP滑动窗口的作用:流量控制和乱序重排
    • RTT:发送一个数据包到收到对应的ACK,所花费的时间
    • RTO:重传时间间隔

image.png

1.2、UDP简介

  • UDP特点:

面向非链接,不可靠的传输协议,传输速度快,由于不维护连接状态,支持同时向多个客户端传输相同的消息,数据包报头只有8个字节,额外开销较小。吞吐量只受限于数据生成速率、传输速率以及机器性能,UDP尽最大努力交付,不保证可靠交付,因此主机不需要维持复杂的链接状态表。UDP是面向报文,不对应用程序提交的报文信息进行差分或者合并。

  • TCP与UDP的区别 | TCP | UDP | | —- | —- | | 面向连接 | 无连接 | | 可靠性 | 不可靠 | | 有序性 | 无序性 | | 速度慢 | 速度快 | | 重量级(报文大) | 轻量级(报文小) |

1.3、HTTP超文本传输协议

  • HTTP超文本传输协议是什么

HTTP超文本传输协议是应用层基于TCP / IP的通信协议,它提供了计算机的标准化方式相互通信沟通。

  • HTTP超文本协议有什么作用

用于在万维网(WWW)上传送数据,如图像文件,查询结果,HTML文件等,默认端口为TCP 80。

  • HTTP超文本协议有什么特点
    • 支持客户/服务器模式
    • 简单快速:客户端向服务器发送信息的时候,只需传送方法和路径
    • 灵活:http允许传输任意类型的数据和对象,正在传输的类型一般使用commentType加以标记
    • 无连接:限制每次连接只处理一个请求,服务器收到客户的请求,并受到客户的应答之后,既端开连接
    • 无状态:无状态是指协议对于事务处理没有记忆能力。
  • HTTP请求结构

image.png

  • HTTP响应结构

image.png

  • HTTP的工作原理:

一次HTTP操作称为一个事务,其工作过程可分为四步:

  • 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
  • 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
  • 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  • 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
  • 注意:如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了

image.png

  • 在浏览器地址栏键入URL,按下回车之后经历的流程

①DNS解析:浏览器根据URL逐层查询DNS服务器缓存,解析URL中域名对应的IP地址,查询的DNS缓存依次是浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、域名服务器缓存、顶级域名服务器缓存
②TCP连接:在找到IP地址后,会根据IP、对应端口和服务器建立TCP连接
③发送HTTP请求:浏览器会发出读取文件的HTTP请求,该请求将发送给服务器
④服务器处理请求并返回HTTP报文:服务器对浏览器请求做出响应,并把对应的HTML文本响应报文返回给浏览器
⑤浏览器解析渲染页面
⑥连接结束

  • HTTP状态码
    • 1xx:指示信息——表示请求已接收,继续处理
    • 2xx:成功——表示请求已被成功接收、理解、接受
    • 3xx:重定向——要完成请求必须进行进一步的操作
    • 4xx:客户端错误——请求有语法错误或者请求无法实现
    • 5xx:服务器错误——服务器未能实现合法的请求
  • HTTP常见状态码
    • 200 OK:正常返回信息
    • 400 Bab Request:客户端请求有语法错误,不能被服务器所理解
    • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    • 403 Forbidden:服务器收不到请求,但是拒绝提供服务
    • 404 Not Found:请求资源不存在,eg:输入错误的URL
    • 500 Internal Server Error:服务器发生不可预期的错误
    • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能回复正常
  • Get请求和POST请求的区别(从三个层面去回答)
    • Http报文层面:

Get将请求信息放在URL,POST放在报文体中,相对来说,POST请求相比GET请求会安全一些,GET请求的参数长度会受到URL长度的限制,而POST的参数放在报文体中,不存在长度的限制。

  • 数据库层面:

GET符合幂等性和安全性,POST不符合,GET请求一般是用来做查询操作,所以同一请求一次或多次进来,对数据产生的结果都是一致的,而且他并不会影响数据库的结果,因此GET请求是符合幂等性和安全性,而POST请求一般都是往后台提交数据,每次都会提交一份资源,有可能会不满足接口的幂等性。

  • 其它层面:

GET可以被缓存,被存储,而POST不行

  • Cookie和Session的区别
    • Cookie

是有服务器发送给客户端的特殊信息,以文本的形式存放在客户端,而客户端再次向服务端发送请求时,都会带上Cookie信息,服务器接收到Cookie后,会解析Cookie生成与客户端相对应的内容
image.png

  • Session

服务端的机制,在服务器上保存的信息,解析客户端请求并操作session id,按需保存状态信息
image.png

  • 区别:
    • Cookie数据存放在客户的浏览器上,Session数据存放在服务器上
    • Session相对于Cookie更安全
    • 若考虑减轻服务器负担,应当使用Cookie

Cookie和Session的使用参考连接:链接1链接2

  • HTTP和HTTPS(超文本安全传输协议)的区别

image.png

  • SSL(Security Sockets Layer)
    • 为网络通信提供安全及数据完整性的一种安全协议
    • 是操作系统对外的API,SSL3.0后更名为TLS
    • 采用身份验证和数据加密保证网络通信的安全和数据完整性
  • 加密方式:
    • 对称加密:加密和解密都使用同一个密钥
    • 非对称加密:加密使用的密钥和解密使用的密钥是不相同的
    • 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
    • 数字签名:证明某个消息或者文件是某人发出/认同的
  • HTTPS数据传输流程

image.png