计算机网络_基础知识
常见HTTP状态码以及含义
- 200~299 成功
200: OK,请求没问题。
204: No Content,响应报文没有实体的主体部分。 - 300~399 重定向
304: Not Modified,所请求的资源未修改,服务器不会返回任何资源。 - 400~499 客户端错误
400: Bad Request,客户端请求的语法错误。
401: Unauthorized,客户端未对自己进行认证。
403: Forbidden,请求被服务器拒绝了。
404: Not Found,服务器无法找到请求的URL。 - 500~599 服务端错误
500:Internal Server Error,服务器内部错误。
502: Bad Gateway,网关或代理服务器从远程服务器接收到了一个无效的响应。
503: Service Unavailable,服务器无法为该请求提供服务。
504: Gateway Timeout,网关或代理服务器,没有及时从远端服务器获取请求。
HTTP报文结构
- 请求报文:
- 请求方法+请求地址+HTTP版本
- 请求头(编码方式、语言)
- 请求内容
- 响应报文
- 请求地址
- 状态码/状态解释
- 应答头(持久连接还是非持久、内容长度、日期)
请求方法:
- get:请求服务器发送某个资源。(幂等
- head:与get类似,只返回首部(判断响应码是否正常、检查某些资源是否改变)。(幂等
- post:向服务器写入数据。(取决于后台的实现。
- put:向服务器写入资源。(取决于后台的实现
- trace:观察请求报文到达服务器的最终样子。(幂等
- delete:请求服务器删除请求url所指定的资源。(幂等
- options:(代理、防火墙等会使用到)让服务器返回资源支持操作的方法。(幂等
OSI七层模型
OSI七层模型:应表会传网链物
TCP/IP四层协议:应传网接
相关协议:
- 网路层:IP协议、ICMP协议(Internet控制报文协议)
- 传输层:TCP协议、UDP协议
- 应用层:HTTP协议、FTP协议、SMTP协议、DNS等。
各层的作用:
- 应用层:提供不同应用之间的通信
- 传输层:提供主机不同进程之间的通信
- 网路层:提供主机间的通信(简单的、无连接的数据报服务)
HTTP1.0/1.1/2.0 的主要区别?
0.9:HTTP协议原型、不支持多媒体内容
1.0:支持多媒体对象
1.1:长连接keep-alive
2.0:多路复用(二进制分帧是基础,通信单位为帧。多请求并行不依赖多TCP连接。并行在一个TCP连接交互多种类型信息。)、服务端推送(服务端“未卜先知”,主动推送资源。)(头部压缩)
对称加密、非对称加密的异同
- 密钥:一串密钥---一组密钥(公钥、私钥)
- 效率:效率高---效率低
- 安全性:较高---更高
- 管理成本:高---低
- 常见算法:DES、3DES、AES---RSA、DH、ECC
散列算法:
哈希算法,从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。
安全性:
严格意义上说,哈希散列算法不能算加密算法,以为哈希散列是单向的,不具备逆向解密的能力。(彩虹表可以尝试破解)
TLS技术
Transport Layer Security 传输层安全协议
传输层之上,服务于应用层,前身是SSL(Secure Socket Layer)安全套接字层。
作用:
- 数据安全和数据完整
- 对传输层数据进行加密后传输
综合了对称加密、非对称加密技术设计的安全协议
HTTP VS HTTPS
- 安全性:不安全---安全
- 复杂度:低---高
- 效率:高---低
- 端口:80---443
数字证书:
指在互联网通讯中标识通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。
数字证书是可信任组织颁发给特定对象的认证
使用非对称加密算法来生成对称密钥(私钥加密,公钥解密)
SSL安全参数握手:
客户端-服务端建立HTTPS,需要TLS协议,其中需要SSL支持
- 客户端->随机数1,协议版本,加密算法
- 确定加密算法,数字证书,随机数2<-服务端
- 客户端->确认数字证书是否有效,生成随机数3,使用服务器的公钥加密随机数3
- 服务端:根据随机数1、2、3和相同的算法生成对称密钥,双方使用对称密钥进行加密通信。
双方使用对称密钥进行加密通信。
DNS服务(域名系统的工作流程)
Domain Name System域名系统:
它是一项互联网服务,存储域名和IP地址相互映射关系的一个分布式数据库,它能够使人更方便地访问互联网。
进程服务:IP+端口
工作原理:
- 域名由点、字母、数字组成
- 点分割不同的域
- 域名可以分为顶级域、二级域、三级域
根域名服务器 根域名服务器
->
顶级域名服务器 .com域名服务器 .cn .net
->
权威域名服务器 .edu.cn域名服务器 .immoc.com .tobao.com
- 迭代查询:每次查询返回结果,根据结果再次查询
- 递归查询:根域名服务器->顶级域名服务器...层层深入,直到找到,层层返回结果。
DNS攻击,原理是什么-DNS安全
可能出现的情况:
- 错误域名解析到纠错导航页面
- 错误域名解析到非正常页面
- 将正常站点解析到恶意页面
DNS劫持
劫持本地DNS服务(黑客攻击or地方运营商出于盈利目的)
DNS欺骗
冒充(伪)权威域名服务器,返回攻击者希望访问的主页。
DDoS攻击
distirbuted denial-of-service attack 分布式拒绝服务攻击
是一种网络攻击手法,其目的在于是目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
- DNS本质上是一种程序
- 物理设别有容量承载极限
- 超过容量极限服务可能会宕机
TCP协议和UDP有什么区别-传输层协议详解
传输层属于主机间不同进程的通信。逻辑通信信道,当传输层采用TCP协议时,这条略记通信信道就是一条可靠的通信信道,尽管下面的网络是不可靠的。
UDP协议
- 源端口、目的端口
- 16位UDP长度
- 16位UDP校验和
TCP协议
- 16位源端口,16位目的端口
- 序号(32位。TCP数据是字节流-每个字节都有唯一的序号。起始序号在建立TCP连接的时候设置。序号表示本报文数据的第一个字节的序号)
- 确认号(32位。期待收到对方下一个报文的第一个数据字节序号。若确认号=N,则序号N-1为止的所有数据都已经正确收到。
- 控制位(6位,URG紧急位-紧急数据、ACK确认位-=1时确认号生效、PSH推送位-尽快把数据交付给应用层、RST重置位-重新建立连接、SYN同步位-连接请求报文、FIN终止位-释放连接)
- 窗口(16位,指明允许对方发送的数据量。数据缓冲空间有限,不能无限缓存数据)
UDP vs TCP
性能:性能负载低---性能负载高
速度:速度快---速度慢
实现难度:实现简单---实现复杂
应用场景:简单场景---复杂场景
面向连接:无连接服务---有连接服务
可靠性:不可靠服务---可靠服务
用到UDP的应用层协议:
DNS、TFTP简单文件传送协议、DHCP动态主机配置协议
用到TCP的应用层协议:
SMTP、FTP、TELNET远程终端协议、HTTP
TCP协议为什么三次握手
TCP四次挥手
TIME-WAIT状态
指第四次挥手后,主动中断连接方所处的状态,这个状态下,主动方尚未完全关闭TCP连接,端口不可复用。
为什么TIME-WAIT状态需要等待2MSL?
-
最后一个报文没有确认
-
确认最后一个ACK报文一定能到达对方
-
2MSL时间内,如果没有到达对方,那么对方会重新进行第三次挥手,确保连接正常释放
-
确保当前连接的所有报文都已经过期。
滑动窗口的工作过程-TCP的可靠传输
- 窗口指明允许对方发送的数据量
- TCP协议时传输数据流的协议,通过TCP协议头部序列号、确认号、窗口等字段的控制,可以在有限的缓冲资源下,接收几乎无限的数据。
TCP常见的拥塞避免算法
网络拥塞:
在某段时间内,若对网络中的某一资源(带宽、缓存、处理机等)的需求超过了该资源所能提供的可用部分,网络性能就会变坏,这种情况称为网络拥塞。
- 网络拥塞往往由很多因素引起,它并不是一个单点问题。
- 拥塞避免是全局角度的一个问题。
拥塞窗口:
是TCP协议基于窗口拥塞控制需要的一个变量配置。发送方在发送数据时会维持一个叫拥塞窗口cwnd(congestion window)的状态变量,并且可以动态变化,在TCP报文头部,发送方让自己的发送窗口等于拥塞窗口。
门限值:
拥塞避免算法启动阈值。
传输轮次:
一次报文发送和确认的时间称为一次传输轮次,RTT(Route-Trip Time)定义的是一次传输轮次的往返时间。
快重传和快恢复:
快重传:让发送方尽早知道个别报文段的丢失,并立即重传,以避免发送方认为网络发生了拥塞,从而因为拥塞避免算法降低发送数据。
- 不是捎带确认,而是立即确认
- 对丢失报文多次重复确认(连续3个ACK)
TCP粘包问题
TCP协议与应用层协议:
- 应用层的众多协议使用了TCP作为传输层协议
- TCP协议解决的是传输的可靠性和顺序问题
- TCP协议是面向字节流的数据传输协议
应用层协议-HTTP
Content-Length:是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的数据字节的大小。( !=实际内容长度)
应用层的数据拆分:
-
基于长度的标识
-
基于特殊分隔符
-
TCP协议是面向字节流的协议,它可能会组合或者拆分应用层协议的数据。
-
粘包并不是TCP协议造成的,而是应用层协议设计缺陷导致的问题
Nagle算法:
是一种通过减少数据包的方式提高TCP传输性能的算法。
因为网络带宽有限,它不会将小的数据块直接发送给目的主机,而是会在本地缓冲区中等待更多待发送的数据,这种批量发送数据的策略虽然会影响实时性和网络延迟,但是能够降低网络拥堵的可能性并减少额外开销。
- 缓冲区中数据超过最大数据段(MSS)
- 上一个数据段被确认(ACK)后
总结:
- TCP协议数据传输的核心机制 - 基于字节流,不存在消息、数据包的概念
- TCP粘包是应用层开发者错误设计实现导致的
- 应用层协议需要自行设计消息边界,以正确分离消息,避免消息粘连
- 分离消息的两个方法:基于长度的拆分,基于特殊字符的拆分
- Nagle算法是通过合并字节流数据,减少数据包来提升TCP协议传输能力的协议。
什么是VPN-虚拟专用网技术
背景:
- 一些机构组织不需要所有计算机都接入网络
- 机构成员跨地域通信存在加密安全的需求
公司内网、校园网、工业专用网
专用IP地址:
指一些只能提供给机构内部通信的IP地址。这类IP地址不能接入到互联网上与其它网络主机进行通信。
即专用IP地址只能作为本地地址而不能用作全球地址,因为专用IP地址在全球并不是唯一的,互联网上的路由器对目的地址为专用IP地址的数据报一缕不进行转发。
-
10.0.0.0 ~ 10.255.255.255
-
172.16.0.0 ~ 172.31.255.255
-
192.168.0.0 ~ 192.168.255.255
-
IPSec
-
PPTP
-
L2TP