Day05
1. 请你说说 TCP 如何实现可靠传输
- 可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的。TCP是通过序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制一起保证TCP传输的可靠性的。
- 可靠传输的具体实现是:应用层的数据会被分割成TCP认为最适合发送的数据块。TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果受到的数据报报文段的检验和没有差错,就确认收到,如果有差错,TCP就丢弃这个报文段和不确认这个报文段。流量控制是TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能够接纳的数据。当接收端来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。拥塞控制是当网络拥塞时,减少数据的发送。停止等待协议的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。超时重传就是当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段
2. 请你说说 TCP 和 UDP 的使用场景
- UDP的优点就是快,没有TCP各种机制,少了很多首部信息和重复确认的过程,节省了大量的网络资源。缺点是不可靠不稳定,只管数据的发送不管过程和结果,网络不好的时候容易造成数据丢失。又因为网络不好的时候不会影响到主机数据报的发送速率,这对很多实时的应用程序很重要,因为像语音通话、视频会议等要求源主机要以恒定的速率发送数据报,允许网络不好的时候丢失一些数据,但不允许有太大的延迟。
- DNS也是基于UDP实现的,要求快速获取IP地址。还有游戏应用程序也是通过UDP来传输报文段,允许出现丢帧导致的卡顿,但是对游戏的整体体验不会产生严重的影响。
- TCP当需要数据准确无误地运输给对方时,如浏览器中需要获取服务器资源使用的HTTP/HTTPS协议,需要保证文件准确、无差错,邮件服务器中使用的SMTP协议,保证邮件内容准确无误地传递给对方,或者是大型应用程序文件,这些都要保证文件的准确、无差错地运输给对方,所以一定要基于TCP来运输
3. 请你说说 HTTP 和 HTTPS 的区别
- 由于HTTP简单快速的特性,当客户端向服务器端请求数据的时候,只需要传送请求方法和路径就可以取到结果,基于TCP,默认端口号是80,耗时可以简单计算为1RTT,传递的数据全部是明文传输,几乎没有安全性。
- HTTPS是基于TLS的,而TLS又是基于TCP,当客户端向服务器端请求数据的时候,服务器大概率会将客户端重定向到该服务器的443端口,进行新的TCP连接,此时服务器会返回一个证书文件,而不是响应报文体。此时客户端验证证书文件紧接创建对称密钥,之后重新和服务器建立TLS连接,当服务器返回ACK确认之后,连接正式建立,此时整个耗时为3RTT,并且之后和服务器的通信数据都是通过对称密钥加密过的,几乎无法破解。
- HTTPS虽然在安全方面有很大优势,但是缺点也很明显:HTTPS握手阶段耗费时间,几乎是HTTP的数倍;HTTPS的效率没有HTTP高,如果部分数据内容实际上并不需要加密,会平白浪费计算机资源;HTTPS的证书需要购买,功能越强大的证书价格更高;HTTPS的加密并不能阻止某些网络攻击,如黑客攻击、拒绝服务攻击等
4. 请你说说 HTTP 状态码及其含义
- 1xx:表示连接成功了,并继续等待下一次连接,如100
- 2xx:表示连接成功了,并返回响应体,如200
- 3xx:便是重定向
- 4xx:表示客户端出现错误,如404
- 5xx:表示服务端出现错误,如500
5. 请你说说 GET 和 POST 的区别
- get主要用来获取数据,post主要用来提交数据;get的参数有长度限制,最长2048字节,而post没有限制;get的参数会附加在url之内,以‘?'分割,多个参数用‘&’符号连接,而post会把参数放在http请求体中。
- get是明文传输,可以直接通过url看到参数信息,post是放在请求体中,除非用工具才能看到
- get请求会保存在浏览器历史记录中,也可以保存在Web服务器日志中。
- get在浏览器回退时是无害的,而post会再次提交请求
- get请求会被浏览器主动缓存,而post不会,除非手动设置
- get请求只能进行url编码,而post支持多种编码方式。
- get请求的参数数据类型只接收ASCII字符,而post没有限制