计算机网络

CA认证原理

CA解决的是在https中,验证客户端收到的公钥是否为真的问题,为了防止中间人攻击。
CA的具体流程是:

  1. 客户端首先信任一些CA机构,并保存它们的公钥
  2. 在获取服务端公钥时,不向服务端索要,而是向CA索要
  3. CA会发送给客户端两部分信息,一是服务端的公钥,名称,到期时间的明文,另一个是明文经过hash(减少签名长度)和CA私钥加密过的密文签名
  4. 客户端在收到签名后,会利用CA公钥对其进行解密,并对明文进行hash,如果二者的结果相同,则信任该服务端公钥

cookie,Session,token

出现的原因:因为HTTP是一个无状态协议,因此需要一些额外的方法来模拟有状态的访问。运用这些技术可以实现同一域名下不同区域之间的一些信息共享。
session:
一个很容易想到的方法就是将客户端的信息保存在服务端,为每个客户端划分一片存储区域,并为这片存储区域创建一个id。这篇存储区域就叫session,对应的id就叫session id。有了session之后,之后的客户端在访问时,只需要在请求中带上session id,服务端就能找到它之前的信息。
实现session的方式通常有两种,一种是在客户端发送的cookie中携带,另一种是通过url回写的方式,在url中携带。url回写就是服务端在接收到客户端的请求之后,在返回的url中加上session id的信息。
缺点:
利用session保存用户信息会存在一些问题。
首先每个session都是一块内存,在访问量小的时候问题不明显,但是当用户数量特别大时,就会占用大量的内存空间,给服务器造成很大的压力。
其次如果服务端使用了负载均衡,那么就要保证每个服务器上的session内容同步,也会造成很多资源的浪费,还可能在用户session信息出现变化时产生问题。
而cookie则可以较好的解决这些问题。
cookie:
cookie就是将用户的状态信息等保存在客户端,在每次向服务端发起请求时在请求头中携带上对应的cookie信息。
cookie存在的问题:
首先,因为cookie是一些附带在HTTP请求头中的额外信息,所以会造成传输的数据量增加,而且可以携带的数据量也是有限的。
其次,因为每次请求都要携带用户信息,很容易被攻击者劫持。
cookie是由浏览器自动添加的。
token:
token是一种服务端无状态的认证方式。token的组成是uid(用户唯一 标识)+timestamp(当前时间戳)+sign(一段服务端生成的固定参数)。
原理:
客户端在首次登陆服务器时,服务器会利用客户端提供的个人信息和一些额外的信息进行加密,生成token,并将其返回至客户端。
客户端在收到token之后会将其保存在本地。再之后的每次请求中,在请求头中手动添加token信息。
服务端在接收到token之后进行解密,就能得到对应的用户信息。
利用token可以使服务端不再需要保存用户的信息。

CSRF攻击

跨站点请求伪造cross site request forgery
针对cookie的漏洞进行的攻击。攻击者可以在他们的网站上添加一些让浏览器进行访问的请求,如果浏览器中对应网站的cookie还没有过期,这一攻击请求就会被正常执行。

DNS解析过程

dns解析的目的:将域名转化为IP
首先在浏览器和本机的本地DNS服务器查找是否记录,
如果没有则向根DNS服务器查询,根DNS服务器会返回顶级DNS服务器的地址,解析 . 部分,返回的是IP列表
然后本机会向其中一个顶级DNS服务器查询,顶级DNS服务器返回权威DNS服务器的地址,解析.com部分
然后本机向下一级DNS服务器查询,权威DNS服务器返回查询IP,解析qq.com。
最后解析www.qq.com。如果有多个服务器,最后一级DNS服务器返回的是其中一个服务器的IP地址,同时也实现了负载均衡
权威DNS服务器中存储的通常是域名对应的IP列表,因为同一域名一般对应多个服务器主机。此事权威DNS服务器会循环返回列表中的一个IP地址,以此来进行负载分配。

GET和POST的区别

GET和POST在本质上并没有区别,只是在header中的一个标志位不同,但在应用中有很多不同。
GET的参数在url后,POST的数据在body中,所以POST更安全。
因为url长度的限制,GET传输的数据大小有限。
GET返回的数据可以被URL缓存。
GET只能进行url编码,而POST支持多种编码方式。
GET常用于请求数据,POST常用于提交数据。
对于GET请求,浏览器会将header和data一起发出,如果没有问题服务器会返回200.
对于POST请求,浏览器会先发送header,服务器接收到后返回100,浏览器再发送data。

HTTP1.0和1.1区别

HTTP1.0:每次请求都要创建新的TCP连接,
HTTP1.1:可以在之前创建的连接上发送请求,在请求头中多了一个host域,
在发送body之前可以先发送一个expect-100的请求头,询问服务器是否愿意接收请求体,常用在POST请求中,
新增请求方法,PUT、DELETE、TRACE、CONNECT

HTTP2.0

https原理

明文:原始信息
密文:利用密匙加密后的明文
密匙:加密参数
对称加密和非对称加密:
对称加密:信息发送方和接收方使用的是同一个密匙。即:发送方:私匙+加密算法+明文=密文 -> 接收方:私匙+加密算法+密文=明文
优点:简单,速度快 缺点:一旦私匙泄露,密文将很容易被解密。
非对称加密:利用公匙和私匙对数据进行加密,私匙和公匙成对出现。被公匙加密过的密文只能由私匙解密,被私匙加密过的密文只能由公匙解密。
即:私匙+加密算法+明文=密文 -> 接收方:公匙+加密算法+密文=明文
或:公匙+加密算法+明文=密文 -> 接收方:私匙+加密算法+密文=明文
优点:安全性高,缺点:速度慢,只适合少量数据加密
HTTP的安全版,在HTTP层和TCP/IP层加了一个SSL层,利用SSL层对数据进行加密,再通过HTTP协议传输。
HTTPs同时使用了对称加密和非对称加密,看利用对称加密对数据进行加密,利用非对称加密对对称加密所用的密钥进行加密,充分利用了两种加密方式的优点。
一个HTTPs涉及到三个密钥:服务端产生的公钥,密钥对,用来进行非对称加密。客户端产生的随机密钥,用来进行对称加密。
一个HTTPs请求实际上包括两次HTTP传输,可细分为6步:

  1. 客户端向服务端发起HTTPs请求,连接到服务端的443接口,服务端有一个公钥,密钥对。公钥可以发送给任何人,密钥要安全保管。
  2. 服务端将自己的公钥发送给客户端。
  3. 客户端在接收到服务端的公钥之后会利用CA对其安全检查,如果检查通过,客户端会产生一个密钥,并利用客户端的公钥对其进行加密。这一密钥我们称为客户端密钥,客户端密钥在加密过后变为密文,增加安全性。加密后的客户端密钥就是我们进行对称加密传输文本时所利用的密钥。 至此,第一次HTTP请求结束。他的任务时建立客户端与服务端的连接,并在客户端产生对称加密时所用的密钥。
  4. 开始第二次HTTP请求,客户端将加密后的客户端密钥发送给服务端。
  5. 服务端在收到密钥之后,利用自身的私钥进行非对称解密,解密之后就得到了客户端密钥。然后服务端会利用客户端密钥对传输的数据进行对称加密,并发送给客户端。
  6. 客户端在收到加密后的密文之后,利用自身的密钥对其进行对称解密,得到数据明文。至此,整个https流程结束。

HTTP消息格式

**HTTP请求消息格式 **
请求行:方法 请求URI 版本号
通用信息头|请求头|实体头
CRLF(回车换行)
请求体

常见请求头:Accept, Accept-Language, Accept-Encoding, Connection,Cookie,Host,Referer,User-Agent

HTTP相应消息格式
状态行:版本号 状态码 原因
通用信息头|响应头|实体头
CRLF
实体

常见响应头:Date,Set-Cookie

断点续传和多线程下载
客户端请求可以通过range请求头控制GET范围。
服务端响应可以通过content-range返回当前长度和总长度。

HTTP状态码

1开头:信息性状态码,表示接收的请求正在处理
2开头:成功状态码,表示当前请求成功处理
3开头:重定向状态码
4开头:客户端错误
5开头:服务端错误
各类别常见状态码:
2xx (3种)
200 OK:表示从客户端发送给服务器的请求被正常处理并返回;
204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)
206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
3xx (5种)
301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;
302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;
301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
302与303的区别:后者明确表示客户端应当采用GET方式获取资源
304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;
307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);
4xx (4种)
400 Bad Request:表示请求报文中存在语法错误;
401 Unauthorized:未经许可,需要通过HTTP认证;
403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;
5xx (2种)
500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;
503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;

IP地址分类,子网划分

172.22.141.23/26 26的意义:子网掩码中,二进制1的个数,如24就代表255.255.255.0
子网掩码是用于给IP地址划分网络地址和主机地址的。与子网掩码1位对应的是网络地址,与0对应的是主机地址。
只要子网掩码中的1是连续的,就是合理的子网掩码
广播地址:主机地址全置1
共分5类,ABCDE
A:0开头,7位网络ID,24位主机ID 子网掩码 255.0.0.0
B:10开头,14位网络ID,16位主机ID 子网掩码 255.255.0.0
C:110开头,21位网络ID,8位主机ID 子网掩码 255.255.255.0
D:1110开头,用于多播
E:11110开头,用于实验开发。

OSI七层协议、TCP/IP四层协议

OSI open system interconnection 开放系统通信协议
应用层 FTP HTTP DNS 为用户提供操作界面
表示层 将图像,声音等翻译为二进制文件。
会话层 分流
传输层 TCP UDP
网络层 IP ICMP ARP RARP IP地址 32位
链路层 以太网协议CSMA/CD MAC地址编址 MAC地址寻址 48位

物理层

ssh原理

ssh是一种安全的远程登陆方法,它利用非对称加密的方法,在远程主机产生公钥和密钥对来实现数据安全性。
ssh共有两种登陆方式:
1. 口令登陆。
在第一次口令登陆时,客户端会先收到远程主机发来的fingerprint,这一指纹是远程主机的公钥经过hash后生成的,远程主机通常会把它放在自己的网站上,作用是防止中间人攻击。
客户端在综合考略后,如果选择相信远程主机的指纹,则会收到远程主机的公钥并保存。之后的每次登陆都会直接使用公钥对密码进行加密。
公钥登陆。
因为口令登陆每次都要输入口令很麻烦,公钥登陆可以省略这一步骤。原理也是利用了非对称加密。
客户端先将自己的公钥发送到远程主机上,在登陆的时候,远程主机会随机生成一段字符串发送给客户端。客户端在收到后利用自己的私钥进行加密返回远程主机。 远程主机利用公钥对其进行解密,如果与原文相同则登陆成功。

TCP

TCP6个标志位:
URG:紧急指针
ACK:确认序号有效
PSH:尽快交给应用层
RST:重置连接
SYN:发起新连接
FIN:释放当前连接

三次握手:
三次握手:建立TCP会话,因为要建立双向会话,前两次握手是为了建立发送端到输入端的会话,后两次建立接收端到发送端会话。
每次建立连接都会随机初始化seq32位序号,应答时ack序号位seq+1,ack标识位为1。并随机初始化一个应答会话的seq。
第一次握手:客户端随机初始化一个32位的seq序号,并将SYN标识位置1,向服务端发送,请求建立连接。
第二次握手:服务端接收到报文后,随机初始化一个32位seq序号,将客户端的32位序号+1放入ack序号中。并将SYN和ACK标识位置1,向客户端发送报文。
第三次握手:客户端接收到报文后,代表客户端到服务端的会话已经建立成功。
客户端将接收到的seq序号+1放到ack序号中,再将ack序号+1放到seq序号中,并且可以携带数据,向服务端发送。服务端接收到之后代表服务端到客户端的会话建立完成。

四次挥手:
结束TCP会话,因为要结束双向会话,前两次结束发送端到接收端会话,后两次结束接收端到发送端会话。
与3次握手几乎相同,不同的点在于,服务端在接收到FIN标识位为1的报文后有可能还有数据需要处理,不能立即结束会话,所以需要将第二次握手拆成两步。
TIME_WAIT状态:在四次挥手之后,客户端会等待一段时间确定服务端接收到了最后一个数据包,如果一段时间之内没有接收到服务器发出的数据包则正式结束会话连接。

TCP的协议类型:
GBN和SR协议:
对于GBN协议,在等待的过程中,如果数据丢失,则重传所有以发送但未被确认的数据包。这种协议不需要接收方缓存任何数据。
对于SR协议,如果数据丢失,则重传相应数据,所以需要接收端有一定的缓存空间。这一缓存大小也被称为窗口大小,应该与发送方窗口大小一致。 同时,每个发送的数据包都应该有自己的定时器。
TCP既不是GBN协议,也不是SR协议。在超时发生时,TCP只会重传已被确认ACK的后一个数据包。

流量控制和拥塞控制:
流量控制是为了保证发送效率和接受效率相匹配,拥塞控制是为了避免网络拥塞。
流量控制的方法:滑动窗口,接收端会将自己剩余缓存大小发送给发送端作为窗口大小,在TCP头中有16位的窗口大小位。
TCP拥塞避免的方法是根据TCP感知到的网络拥塞程度,动态的调节发送数据的速率。
流量控制和拥塞控制分别有一个窗口大小,实际速率不会超过流量窗口和拥塞窗口中的最小值。
rwnd流量窗口大小 = 接收端缓存大小 - 未被读取数据大小
TCP感知丢包的两种情况:定时器超时和3个冗余ACK。当丢包事件出现时,TCP就认为网络出现拥塞。
停止等待协议:每收到一个有效ACK,定时器重启一次。
连续ARQ(自动重传请求)协议:
滑动窗口:
接收端会给发送端传递一个窗口值。发送端最多同时给接收端发送窗口大小个未确认接收的数据包。
窗口越大,传输速度越快,但接收端的压力越大。窗口大小不能过大,通常小于序号的一半,否则会造成序号相同的数据包可能是一个新数据包也可能是一个丢包重传。
慢启动:
cwnd拥塞窗口大小从1个MSS开始,每接收一个ACK翻一倍,指数型增加。当出现丢包时重新开始慢启动,并将慢启动阈值设置为当前拥塞窗口的一半。
拥塞避免:
当拥塞窗口大小达到拥塞阈值时,进入拥塞避免状态,此时拥塞窗口大小线性增加,每接收到一个ACK加1。当出现超时时,将慢启动阈值设置为当前窗口大小的一半,并重新开始慢启动。
快速恢复:
当接收3个冗余ACK时,TCP进入快速恢复状态。新的阈值被设置为当前窗口大小的一半加3,并将当前窗口大小设置为阈值,直接进入拥塞避免。
快速重传:
当发送端接收到3个冗余ACK,说明在之后的数据包中存在丢包,所以立即重传数据包,而不用等待定时器超时。

TCP和UDP的区别

TCP:一对一,需要建立会话,稳定,数据流模式,传输效率慢,一般无需分片,头文件很长
UDP:一对多,无需建立会话,不稳定,数据报模式,传输效率快,可能需要分片,头文件较短
UDP的功能很少,只有多路复用(添加源/目的端口号)和少量的差错检测。
过早超时和ACK丢失都会产生冗余项。
TCP是一种全双工链接。
TCP可靠的原因:使用序号,累计确认,检验和超时/重传技术。
超时时间的设定:每出现一次超时,超时时间加倍。但只要收到数据包,就利用RTT重新设定超时时间。

URL详解

URL:Uniform Resource Locator
统一 资源 定位符
可以用来唯一标识一个资源的位置
格式:协议 主机 端口 URI
http://localhost:8080/wangbin/document
file:///D:/home/wangbin/document
URI:Uniform Resource Identifier
统一 资源 标识符
可以在应用中唯一定位一个资源的位置

常用协议端口号

DHCP:服务器端的端口号是67
DHCP:客户机端的端口号是68
POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110
SMTP:端口号是25。SMTP真正关心的不是邮件如何被传送,而只关心邮件是否能顺利到达目的地。
Telent:端口号是23
FTP:FTP使用的端口有20和21。20端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。
TFTP:端口号69,使用的是UDP的连接。
TCP 21端口:FTP 文件传输服务
TCP 23端口:TELNET 终端仿真服务
TCP 25端口:SMTP 简单邮件传输服务
UDP 53端口:DNS 域名解析服务
TCP 80端口:HTTP 超文本传输服务
TCP 110端口:POP3 “邮局协议版本3”使用的端口
TCP 443端口:HTTPS 加密的超文本传输服务
TCP 1521端口:Oracle数据库服务

输入域名后的过程

应用层DNS解析域名
应用层客户端发送HTTP请求
传输层TCP传输报文
网络层IP协议查询MAC地址
数据到达数据链路层
服务器接收数据
服务器响应请求
服务器返回相应文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值