1.1、说说TCP的三次握手和四次挥手
- TCP是什么
TCP是传输控制协议,是面向连接的,可靠的,基于字节流的传输层通信协议,将应用层的数据流分割成报文段并发送给目标节点的TCP层,为保证数据包不丢失,会给数据包添加上序号,对方收到则发送ACK确认,未收到则重传。TCP会使用奇偶校验和函数来校验数据在传输过程中是否有误。
- “握手”是为了建立连接,TCP三次握手的过程如下:
建立全双工的通道进行数据传输
在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的初始值
- 首次握手的隐患—-SYN超时
Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认,Server不断重复直至超时,Linux默认等待63秒才端开连接
- “挥手”是为了终止连接,TCP四次挥手的流程图如下:
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:重传时间间隔
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请求结构
- HTTP响应结构
- HTTP的工作原理:
一次HTTP操作称为一个事务,其工作过程可分为四步:
- 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
- 注意:如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了
- 在浏览器地址栏键入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生成与客户端相对应的内容
- Session
服务端的机制,在服务器上保存的信息,解析客户端请求并操作session id,按需保存状态信息
- 区别:
- Cookie数据存放在客户的浏览器上,Session数据存放在服务器上
- Session相对于Cookie更安全
- 若考虑减轻服务器负担,应当使用Cookie
Cookie和Session的使用参考连接:链接1 或 链接2
- HTTP和HTTPS(超文本安全传输协议)的区别
- SSL(Security Sockets Layer)
- 为网络通信提供安全及数据完整性的一种安全协议
- 是操作系统对外的API,SSL3.0后更名为TLS
- 采用身份验证和数据加密保证网络通信的安全和数据完整性
- 加密方式:
- 对称加密:加密和解密都使用同一个密钥
- 非对称加密:加密使用的密钥和解密使用的密钥是不相同的
- 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
- 数字签名:证明某个消息或者文件是某人发出/认同的
- HTTPS数据传输流程