4、其他
4.1、TCP和UDP的区别
4.1.1、UDP简介
结构:
UDP的特点:
4.1.2、区别
- TCP面向连接,UDP无连接
- TCP可靠,UDP不可靠
- TCP有序,UDP无序
- TCP速度慢,UDP速度快
- TCP重量级,UDP轻量级
4.2、TCP滑动窗口
4.2.1、RTT和RTO
RTT:发送一个数据包到收到对应的ACK,所花费的时间
RTO:重传时间间隔
#有了RTT才能求出RTO
4.2.2、TCP使用滑动窗口做流量控制和乱序重排
- 保证TCP的可靠性
- 保证TCP的流控特性
1、窗口数据的计算:
AdvertisedWindow是接收端还能接收的流量大小
EffectiveWindow是发送端还能发送流量的大小
2、发送方滑动窗口图示:
通俗的讲滑动窗口就是双方都有一个窗口,发送端发送一点就移动一点,接收方接收到一点就移动一点。
Category#1、已经发送并且得到端的回应的
Category#2、已经发送但还没收到端的回应
Category#3、未发送但可以对端进行发送的
Category#4、需要发送但超出端的window大小,不允许发送
#图中下方滑动窗口中,假如只有32、34被确定,则滑动窗口不滑动,因为33未收到ACK。
4.3、HTTP
HTTP:超文本传输协议
在HTTP1.1中增加了keep-alive(长连接,下层实现对上层透明)
4.3.1、HTTP特点
- 支持客户、服务器模式
- 简单快速
- 灵活
- 无连接
- 无状态
4.3.2、HTTP结构
HTTP请求结构:
示例:
GET www.cbc.com/test HTTP/1.1
HOST:www.cbc.com
Connection: keep-alive
Cache-Control: max-age=0
<html>…正文…</html>
HTTP响应结构:
4.3.3、HTTP请求/响应步骤
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接收请求并返回HTTP响应
- 释放TCP连接
- 客户端浏览器解析HTML内容
4.3.4、在浏览器地址栏键入URL,按下回车之后经历的流程
- DNS解析:(根据URL解析查询DNS服务器缓存,URL域名所对应的缓存地址【DNS缓存从近到远:浏览器缓存=》系统缓存=》路由器缓存=》IPS服务器缓存=》域名服务器缓存=》顶级域名服务器缓存】查询到结果直接返回,不在向下继续)
- TCP连接:“三次握手”;
- 发送HTTP请求:客户端浏览器发送读取文件的HTTP请求;
- 服务器处理请求并返回HTTP报文;
- 浏览器解析渲染页面;
- TCP连接结束:“四次挥手”;
#(5、6无先后顺序)
4.3.5、HTTP状态码
五类状态码:
- 1XX:指示信息--表示请求已接收,继续处理
- 2XX:成功--表示请求已被成功接收、理解、接受
- 3XX:重定向--要完成请求必须进行更近一步的操作
- 4XX:客户端错误--请求有语法错误或请求无法实现
- 5XX:服务器段错误--服务器未能实现合法的请求
常见状态码:
- 200 OK:正常返回信息
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未经授权,客户端无权访问(这个状态码必须和WWW-Authenticate报头域一起使用)
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在(e.g.输入了错误的URL)
- 500 Internal Server Error:服务器发生了不可预期的错误
- 503 Server Unavailable:服务器当前不能处理客户端请求,一段时间后恢复正常
4.4、GET和POST的区别
从三个层面来解答:
- Http报文层面:GET将请求信息放在URL中,POST放在报文体中
- 数据库层面:GET符合幂等性和安全性,POST都不符合
- 其他层面:GET可被缓存、存储,POST不行
PS:因为GET符合幂等性、安全性,所以GET可被缓存、存储。因此最好不要使用GET做不安全操作。
4.5、Cookie和Session的区别
4.5.1、Cookie
1、Cookie简介:是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端;客户端再次请求的时候,会把Cookie回发;服务器接收到后,会解析Cookie生成与客户端相对应的内容。
2、Cookie的设置以及发送过程:
按理来说,HTTP是无状态的,所以每次登录都需要重复填写账号和密码。但实际上,第一次客户端浏览器输入账号和密码,发送到服务端,服务端返回特殊信息,以文本的形式存储在客户端。当客户端再次访问服务端时,会把cookie信息添加在请求头。服务器分析请求头,查到并返回与客户相关的信息。
4.5.2、Session
1、Session简介:服务器端的机制,在服务器上保存的信息。解析客户端请求并操作session id,按需保存状态信息。
2、Session的实现方式:
session,服务器用一种类似于散列表的结构保存session信息。
1、使用cookie来实现:将JSESSIONID放置在cookie中。
2、使用URL回写来实现:服务器在给客户端返回的所有连接中都携带jsessionid的参数,这样客户端的所有请求都会用到服务端返回的jsessionid进行回写。
4.5.3、Cookie和Session的区别
- Cookie数据存储在客户端浏览器上,Session信息存储在服务器上
- Session比Cookie更安全
- 若考虑减轻服务器负担,应考虑Cookie
PS:黑客通过分析浏览器上的Cookie来进行Cookie欺骗。
4.6、HTTP和HTTPS的区别
4.6.1、HTTPS简介
HTTPS:以信息网络安全通信为目的的超文本传输协议。
4.6.2、SSL(Security Sockets Layer,安全套接层)简介
- 为网络通信提供安全及数据完整性的一种安全协议。
- 是操作系统对外的API,SSL3.0之后更名为TLS
- 采用身份验证和数据加密保证网络通信的安全和数据的完整性。
4.6.3、加密方式
- 对称加密:加密和解密都是用同一个密钥
- 非对称加密:加密使用的密钥和解密使用的密钥不同
- 哈希算法:将任意长度的信息转换成固定长度的值,算法不可逆。
- 数字签名:证明某个消息或文件是某人发出/认同的
各种加密方式的优点及代表:
- 对称加密:效率高(AES对称加密)
- 非对称加密:公钥和算法公开,私钥保密;效率低,但安全性高,加密长度有限制(ECC非对称加密)
- 哈希算法:(MD5算法)
- 数字签名:在信息后边加上一些内容,内容是哈希后的值,确保信息没有被修改。
4.6.4、HTTPS数据传输流程
证书配合加密;(证书包括:证书发布的CA机构,证书有效期,证书所有者,签名等等)
4.6.5、HTTP和HTTPS的区别
- HTTPS需要到CA申请证书,HTTP不需要
- HTTPS密文传输,HTTP明文传输
- 连接方式不同:HTTPS默认使用443端口,HTTP使用80端口
- HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全
4.6.6、HTTPS真的安全吗?
浏览器默认填充http://,请求需要进行跳转,有被劫持的风险。
可以使用HSTS(HTTP Strict Transport Security)优化
301、302跳转,由HTTP转到HTTPS,有段时间密码暴露
4.7、socket
4.7.1、socket简介
Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口。
4.7.2、socket通信流程
[学习笔记][剑指Offer][计算机网络](一)TCP连接的建立与释放