第一章 网络基础知识
一、OSI开放式互联参考模型
1. 物理层
- 机械、电子、定时接口通信信道上的原始比特流传输;
- 定义物理设备的标准,如网线的类型、光纤的标准或者各种传输介质的传输速率和类型等;
- 主要目的是传输比特类。
2. 数据链路层
- 定义了如何格式化数据用于传输;
- 定义了如何控制对物理介质的访问;
- 提供了错误检测和纠正,以保证数据传输的正确性。
3. 网络层
- 主要作用是将网络地址翻译成对应的物理地址;
- 定义了如何将数据从发送方路由到接收方;
- 网络层通过内部的协议调用决定了从节点A到节点B的最优路径;
- 路由器属于网络层,本层的数据称为数据包,本层使用的是IP协议。
4. 传输层(最重要)
- 解决了主机间的数据传输,解决了数据传输中的各类问题;
- 接受上一层的数据,在必要的时候将数据进行分割,并将这些数据交给网络成,以保证这些数据段有效到达对端
- 需要重点关注TCP和UDP协议。
5. 会话层
- 建立和管理不同应用程序的通信
6. 表示层
- 信息的语法语义以及它们的关联,如加密解密、转换翻译、压缩解压缩等
7. 应用层
- HTTP协议
二、TCP/IP与OSI的横向对比
OSI七层模型 | TCP/IP概念模型 | 功能 | TCP/IP协议族 |
---|---|---|---|
应用层 | 应用层 | 文件传输、电子邮件、文件服务、虚拟传输 | TFTP、NTTP、SNMP、FTP、SMTP、DNS、Telnet |
表示层 | 数据格式化、代码转换、数据加密 | 没有协议 | |
会话层 | 解除或建立与别的接点的联系 | 没有协议 | |
传输层 | 传输层 | 提供端对端的接口 | TCP 、UDP |
网络层 | 网络层 | 为数据包选择路由 | IP、ICMP、RIP、OSPF、BCP、ICMP |
数据链路层 | 链路层 | 传输有地址的帧以及错误检测的功能 | SLTP、CSLTP、PPP、ARP、RAPR、MTU |
物理层 | 以二进制数据形式在物理媒体上传说数据 | ISO02110、IEEE802、IEEE802.2 |
三、TCP协议和UDP协议
1. 传输控制协议TCP的简介
- 面向连接的、可靠的、基于字节流的传输层通信协议
- 将应用层的数据分割成报文段并发送给目标节点的TCP层
- 数据包都有序号,对方收到则发送ACK确认,未收到则重传
- 使用校验和来检验数据在传输过程中是否有误
2. TCP的各种标志
- URG:紧急指针标志
- ACK:确认序号标志
- PSH:PUSH标志
- RST:充值连接标志
- SYN:同步标志,用于建立连接过程
- FIN:FINISH标志,用于释放连接
3. TCP三次握手流程
- 开始前客户端A与服务器端B,处于关闭状态。
- 开始时客户端A主动打开连接,服务器端B被动打开连接,同时服务器端B处于
LISTEN监听状态
。 - 客户端A向服务器端B发送连接请求报文,SYN=1,seq=x,同时客户端A进入SYN-SENT(
同步已发送
)状态 - 服务器端B接收到来自客户端A的请求报文,如果服务器同意连接,则发送确认报文,SYN=1,ACK=1,seq=y,ack=x+1,同时服务器端B进入SYN-RCVD(
同步已接受
)状态 - 客户端A在接受到来自服务器端B的确认报文后,仍需要向B
发送确认报文
,此时TCP连接已建立,A进入ESTAB-LISHED(连接已建立状态
) - 当服务器接受到确认报文后,也会进入进入ESTAB-LISHED(
连接已建立状态
),此时双方就可以进行通信
4. TCP四次挥手流程
- 开始前,客户端A与服务器端B处于
连接状态
; - 开始后,客户端A主动发起连接关闭请求,客户端A发送FIN报文,用于关闭客户端A到服务器端B的数据传送,同时客户端A进入
FIN-WAIT-1
状态; - 服务器端B在接受到客户端的FIN报文后,通知应用进程关闭,同时发送一个ACK报文给客户端A,服务器端B进入
CLOSE-WAIT
状态,客户端A在接受到来自服务端BACK报文后,进入FIN-WAIT-2
状态; - 服务器端B在经过一段时间的等待后,向客户端A发送FIN报文,同时关闭服务器端B到客户端A的数据传送,服务器端B进入
LAST-ACK
状态; - 客户端A在接受到FIN报文后,客户端A进入
TIME-WAIT
状态,同时发送ACK报文给服务器端B,服务器端B进入CLOSED
状态; - 客户端A在等待2MSL时长后,进入
CLOSED
状态。
5. UDP协议
- 面向非连接。
- 不维护连接状态,支持同时向多个客户端传输相同的消息。
- 数据包报文只有8个字节,额外的开销比较小。
- 吞吐量只收限于数据生成速率、传输速率以及机器性能。
- 尽最大努力交付,不保证可靠交付,不需要维持复杂的连接状态表。
- 面向报文,不对应用程序提交的报文信息进行拆分或者合并。
6. TCP和UDP的区别
性质 | TCP | UDP |
---|---|---|
面向连接 | 三次握手连接 | 无连接 |
可靠性 | 握手连接 | 可能丢失 |
有序性 | 会进行排序 | 无序 |
速率 | 快 | 慢 |
量级 | 重量级(20字节) | 轻量级(8字节) |
五、HTTP相关
1. HTTP相关问答
1.1 在浏览器地址栏键入URL后,按下回车之后所经历的流程有哪些
- DNS解析,逐层访问各级缓存,解析域名,获取对应的IP地址。
- 建立TCP连接。
- 发送HTTP请求。
- 服务器处理请求病返回HTTP报文。
- 浏览器解析渲染页面。
- 连接结束。
1.2 HTTP状态码
1.2.1 五种状态类型
- 1XX:指示信息–表示请求已接收,继续处理。
- 2XX:成功–表示请求已被成功接收、理解、接受。
- 3XX:重定向–要完成请求必须进行更进一步的操作。
- 4XX:客户端错误–请求有语法错误或者请求无法实现。
- 5XX:服务器端错误–服务器未能实现合法的请求。
1.2.2 常见的状态码
- 200 OK:正常返回信息。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报文域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,例如,输入了错误的URL。
- 500 Internal Server Error:服务器发生了不可预知的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求一段时间后可能恢复正常。
六、GET请求和POST请求
- HTTP报文层次:GET将请求信息放在了URL里(对于长度有限制),POST放在了报文体重(对于长度没有限制)
- 数据库层次:GET符合幂等性和安全性(GET请求是做查询操作),POST不符合(POST请求会往数据库提交数据)
- 其他层次:GET可以被缓存、被存储,而POST不可以(POST请求交由WEB服务器处理)
七、Cookie和Session
1. Cookie简介
- 是由服务器发个客户端的特殊信息,以文本的形式存放在客户端
- 客户端再次请求的时候,会把Cookie回发
- 服务器接收到后,回解析Cookie生成与客户端相对应的内容
2.Session简介
- 服务器端的机制,在服务器保存的信息
- 解析客户端请求并操作Session Id,按需保存状态信息
3. Cookie和Session的区别
- Cookie数据存放在客户的浏览器上,Session数据放在服务器上
- Session相对于Cookie更安全
- 若考虑减轻服务负担的角度,应该使用Cookie
八、HTTP和HTTPS的区别
HTTP | HTTPS |
---|---|
TCP | SSL或TLS |
TCP | |
IP | IP |
1. SSL
- 为网络通信提供的安全及数据完整性的一种安全协议
- 是操作系统对外的API,SSL3.0后更名为TLS
- 采用身份验证和数据加密保证网络通信的安全和数据的完整性
2. 加密的方式
- 对称加密:加密和解密都使用同一个秘钥
- 非对称加密:加密使用的秘钥和解密使用的密钥是不相同的
- 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
- 数字签名:证明某个信息或者文件是某人发出、认同的
3. HTTPS数据传输流程
- 浏览器将支持的加密算法信息发送给服务器
- 服务器选择一套浏览支持的加密算法,以证书的形式回发给浏览器
- 浏览器验证证书合法新,并结合证书公钥加密信息发送给服务器
- 服务器使用私钥解密信息,验证哈希,加密相应信息会发浏览器
- 浏览器解密响应信息,并对信息进行验真,之后进行加密交互数据
4. 对比HTTP和HTTPS的区别
对比 | HTTP | HTTPS |
---|---|---|
是否需要CA证书 | 不需要 | 需要 |
传输方式 | 明文传输 | 密文传输 |
连接方式 | 80端口 | 443端口 |
安全性 | 不安全 | HTTPS=HTTP+加密+认证+完整性保护 |
九、Socket简介
- Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
- socket是“open—write/read—close”模式