OSI模型:
OSI 模型(Open System Interconnection model)是一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。
它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。了解 OSI 模型有助于理解实际上互联网络的工业标准—— TCP / IP 协议(族)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-No810uUq-1690518028857)(C:\Users\xie19\Pictures\Camera Roll\屏幕截图 2023-07-13 121801.png)]
由上至下,对七个层的应用做简单的介绍:
应用层:规定数据的传输协议
常见的应用层协议:
协议 | 端口 | 说明 |
---|---|---|
HTTP | 80 | 超文本传输协议 |
HTTPS | 443 | HTTP+SSL,HTTP的安全版 |
FTP | 20,21,990 | 文本传输协议 |
telnet | 23 | 远程终端协议 |
表示层:应用层数据编码和转化,以确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;
EG: 解决不同系统之间的通信,比如Linux下的QQ和Windows下的QQ可以通信
会话层:
建立一个连接(自动的手机信息、自动的网络寻址)
传输层:
每一个应用程序都会在网卡注册一个端口号,该层就是端口与端口的通信!常用的(TCP/IP)协议;
网络层:
此处需要确定计算机的位置,怎么确定?IPv4,IPv6!
网络链路层
规定了0和1的分包形式,确定了网络数据包的形式;
物理层
物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输
下面的图表显示了常见的不同的TCP/IP和其他的协议在最初OSI模型中的位置
协议 | 位置 |
---|---|
HTTP、FTP、 telnet、 SIP、 SSH | 应用层 |
NCP、AFP | 表示层 |
SSH、BSD socket | 会话层 |
TCP、UDP | 传输层 |
IP | 网络层 |
以太网 | 数据链路层 |
光纤、无线电 | 物理层 |
由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有所有的7层,并完全遵循它的规定。
客户端发送 SYN 包( syn = j )到服务器,并进入 SYN_SEND 状态,等待服务器确认。
j 是一个随机数,通过看服务器返回的 j + 1 是否正确,判断第一次握手服务器是否正确响应
服务器确认客户的 SYN 包,同时发送 ACK 包( ack = j + 1 )作为回应;
自己也发送一个 SYN 包( syn = k ),共两个包,此时服务器进入 **SYN_RECV**** 状态;
k 也是一个随机数,也是用于看客户端返回的 k+1 是否正确,判断第二次握手客户端是否正确响应。
客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK ( ack = k + 1 ),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
有一篇博文写的很好
http://t.csdn.cn/N50wA
http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080
http协议的的特点是无状态,短连接
利用抓包工具httpwatch可以获取报文,多见于前端,后端用于分析数据传输过程中产生的问题
http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:
请求行
浏览器向服务器发送的,在第一行,包含:
.请求方式(GET请求、POST请求)
.url(网址)
.http协议版本
GET请求
例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8HwCbBK-1690518028859)(C:\Users\xie19\Pictures\Camera Roll\18902323239.png)]
请求方式是GET请求,url 携带的参数可见,http协议版本是1.1
POST请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x0qXbmnj-1690518028859)(C:\Users\xie19\Pictures\Camera Roll\555555.png)]
请求方式为POST请求,url携带的参数不可见,协议版本是1.1
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应200(返回数据);
对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送 data,服务器响应200 ok(返回数据)。
200,一般以2开头的为成功,以4开头是失败
get请求:url携带的参数可见
var url = 'http://192.168.1.40:8080/v1/sea?page=1&per_page=10' + 'search=' + escape(str)
post请求:url 携带的参数不可见(参数被隐藏,可以通过抓包)
get,通过请求行拼接url进行传递参数
post,通过请求主体传输参数
get 请求是可以缓存的
post 请求不可以缓存
get 请求页面后退时,不产生影响(因为有缓存)
post 请求页面后退时,会重新提交请求(没有缓存)
get 一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post 请求传输数据的大小根据 php.ini 配置文件设定,也可以无限大
这个也是最不好分析的,原则上 post 肯定要比 get 安全,毕竟传输参数时 url 不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,对传递的参数进行加密,其实都一样。
浏览器向服务器发送一些状态数据,标识数据等等
一个信息一行,包括信息名:信息值,按行分隔。
User-Agent: firefox//表示发送请求的浏览器(请求代理端)是firefox
Host: shop.100.com//表示请求的主机域名(基于域名的虚拟主机就是靠这个头判断的)
Cookie:name=itcast//浏览器携带的cookie数据。
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
注意,请求头信息,需要使用一个空行结束!
请求代理端向服务器端,发送的请求数据!
典型的就是POST形式发送的表单数据!
get请求,没有请求主体部分!get数据是在请求行中的url上进行传递的!
HTTP/1.1 200 ok
Date: Tue,19 Nov 2013 03:08:55 GMT
Server: Apache/2. 2.22 (Win32) PHP/5.3. 13
X- -Powered -By: PHP/5. 3.13
Content-Length: 16
Content- Type: text/html
响应行:
响应行包括:协议版本、状态码、状态消息。典型的:
(以1开头)1xx:消息
(以2开头)2xx:成功
(以3开头)3xx:请求被重定向
(以4开头)4xx:浏览器端错误
(以5开头)5xx:服务器端错误
响应头:
Date:响应的时间。GMT时间!
Content-Length: 响应主体数据的长度!
Content-Type: text/html :内容类型:告知浏览器接下来发送的响应主体数据是什么格式!
响应主体:
主要的响应数据,在浏览器的主体区域显示的数据都是相应主体!(前端人员通过html和css技术实现的排版,对于C语言来说拿到的就是一段ASCII码、一段字符串)
注意,每行,包括响应行和响应头,都需要一个 r\n
结尾
http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在 http 和 tcp 之间多添加了一层加密SSL,进行身份验证和数据加密。
明文: 明文指的是未被加密过的原始数据。
密文: 明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。
密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
*对称加密*:对称加密又叫做私钥加密,即信息的发送方和接收方使用****同一个密钥****去加密和解密数据。
对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有****DES*、3DES、TDEA、Blowfish、*RC5****和IDEA。
其加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下 : 密文 + 解密算法 + 私钥 => 明文
对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。
由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
*非对称加密*:非对称加密也叫做公钥加密。
非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
(1)被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
(2)被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:*RSA*、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。
这些算法不用亲自去写,已经成为一种标准,有现成的库去调用实现即可。
优点:正确率更高,安全性更强
使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器 ;
HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性 。
HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本 。
缺点:效率低,成本高
相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。
HTTPS 协议还会影响缓存,增加数据开销和功耗 。
HTTPS 协议的安全是有范围 中间人攻击 伪造证书
HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器 ;
HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性 。
HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本 。
缺点:效率低,成本高
相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。
HTTPS 协议还会影响缓存,增加数据开销和功耗 。
HTTPS 协议的安全是有范围 中间人攻击 伪造证书