1. TCP简介
TCP是面向连接的、可靠的,基于字节流的传输层通信协议
将应用层的数据流分割成报文段并发送给目标节点的TCP层
数据包都有序号,对方收到则发送ACK确认,未收到则进行重传
使用校验和来检验数据在传输过程中是否有损失
2. TCP
2.1 TCP中重要的控制位(Control Flag)
ACK:确认序号标志
SYN:同步序号,用于建立连接
FIN:用于释放连接
URG:紧急指针标志
PSH:push标志
RST:重置连接标志
3. 三次握手,握手为了你我之间的联系
第一次握手:建立连接时,用户端发送SYN包到服务器,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户的SYN,同时发送SYN+ACK包给客户端
第三次握手:客户端收到SYN+ACK包后,向服务器发送确认包ACK,此包发送完毕,服务器接收,进入连接状态
3.1 为什么需要三次握手才能建立连接?
为了初始化Sequence Number的初始值,如图上的seq,要进行互相通知,作为以后数据通信的序号,保证以后传输的数据正确性,防止乱序
3.2 建立连接后,client出现故障怎么办?
服务器的保护机制
由服务器向客户端发送保活探测报文,如果未收到响应则继续发送,直到达到保活探测次数仍未收到回应,则会中断连接
4. TCP的四次挥手
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传输
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认需要为收到的序号+1
第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输
第四次挥手:客户端在收到服务器发送的FIN后,发送一个ACK给服务器,确认序号为收到的序号+1,与服务器的连接进入关闭状态,完成四次挥手
4.1 为什么第四次挥手后,客户端再等待2MSL才能关闭连接?
确保有足够的时间让服务器收到ACK包
避免新旧连接的混淆
4.2 为什么四次挥手才能断开连接?
因为客户端和服务器是全双工通信,发送方和接收方都需要发送FIN包和接受ACK包才能断开连接,由一端先发起断开连接的请求,所以看起来像四次挥手。
全双工通信:又称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式。
5. UDP
5.1 UDP报文头
特点:
面向非连接,不维护连接状态,支持同时向多个客户端传输相同的信息
数据包报头只有8字节,额外开销较小,
吞吐量只受限于数据生成速率,传输速率以及计算机的性能
尽最大努力交付,不保证数据的可达
面向报文,不对应用程序提交的报文信息进行拆分或者合并
5.2 TCP与UDP的区别
面向连接VS面向无连接
可靠性VS不保证可靠性
数据有序性VS数据无序性
速度慢VS速度快(UDP应用于视频、广播等)
重量级VS轻量级
6. TCP滑动窗口
RTT:发送一个数据包到收到一个ACK所需的时间
RTO:重传时间间隔
TCP利用滑动窗口实现流量控制,并保证TCP的可靠性
6.1 高速重发机制
在窗口较大,又出现报文段丢失的情况下,同一个序号的确认应答将会被重复不断地返回(比如第1001~2000数据丢失,那么接受端会不断地返回下一个数据是1001的应答),而发送端主机接收到连续3次同一个应答,就会对其进行重发。
6.2 流量控制
如果接收端将本该接收到的数据丢弃的话,就会引起重发机制,从而导致流量的浪费。接收端向发送端主机通知自己能够接收数据的大小,于是发送端会发送不超过该数据大小的数据。该数据大小限度就是窗口的大小,是由接收端主机决定的。TCP首部报文中包含窗口大小的数据。
7. HTTP
7.1 特点
支持客户/服务器模式
简单快速
灵活
无连接
无状态,对事务处理没有记录
7.2 请求和响应的步骤
客户端连接到web服务器
发送http请求
服务器接收请求并返回http响应
释放tcp连接
客户端浏览器解析HTML内容
7.3 在浏览器输入URL地址,按下回车键之后发生了什么?
DNS解析(将对应的地址解析为IP地址)
TCP连接(三次握手)
发生HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
断开连接(四次挥手)
7.4 HTTP状态码
1XX:指示信息
2XX:成功
3XX:重定向
4XX:客户端错误
5XX:服务器端错误
7.4.1 常见的状态码
200 OK
400 Bad Request:客户端请求语法错误
401 Unauthorized:请求未经授权
403 Forbidden:服务器收到请求,但是拒绝访问
404 Not Found
500 Internal Server Error:服务器发生不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
7.5 Get和Post的区别
Http报文层面:Get请求放在URL地址上;Post放在报文体内
数据库层面:Get是查询操作;Post会改变数据库的数据
Get可以被缓存,被存储;Post不能
7.6 Cookie和Session
7.6.1 Cookie
是由服务器发给客户端的特殊信息,以文本的形式存放在客户端
客户端再次请求的时候,会把Cookie回发
服务器接收到后,会解析Cookie生成相应的内容
7.6.2 Session
服务器端的机制,在服务器上保存信息
解析客户端请求并依据Session Id返回信息
7.6.3 两者的区别
Cookie数据存放在客户端的浏览器上,Session数据存放在服务器上
Session相对于Cookie更安全
(若考虑减轻服务器负担,应当使用Cookie)
8. HTTPS
8.1 SSL(Security Sockets Layer,安全套接层)
为网络通信提供安全及数据完整性的一种安全协议
是操作系统对外的API,SSL3.0后更名为TLS
身份验证和数据加密,保证网络通信的安全和数据的完整性
8.2 加密的方式
对称加密:加密和解密都使用同一个密钥
非对称加密:加密和解密使用不同的密钥(公钥和私钥,安全,但是效率低)
哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆转
数字签名:证明某个消息和文件是某人发出的/认同的
8.3 HTTPS数据传输流程
浏览器将支持的加密算法发送给服务器
服务器选择一套浏览器支持的加密算法,以证书的形式发给浏览器
浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密相应消息后回发浏览器
浏览器解密相应消息,并对消息进行验证,之后进行加密加护数据
8.4 HTTPS和HTTP的区别
HTTPS需要到CA申请证书,HTTP不需要
HTTPS密文传输,HTTP明文传输
连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全
8.5 HTTPS真的安全吗?
浏览器默认填充http://,请求需要进行跳转,有被劫持的风险
可以使用HSTS优化
网友评论