互联网协议族(IPS Internet Protocol Suite):是一个网络通讯模型模型,以及一整个网络传输协议家族,为互联网的基础通讯架构.通常被称为TCP/IP协议族,简称TCP/IP
1.前言
前面的章节已经了解了java的基础知识,这个章节来学习网络协议,在实际工作中是一个较为重要的知识点.现在是一个数据共享的时代,数据的传输基础的就是这些网络协议
2.目录
目录3.计算机网络协议及通信
3.1.OSI参考模型
简易模型OSI(open system interconnect):即开放式系统互联,一般都叫做OSI参考模型
- 物理层:最底层,包括多种与物理介质相关的协议,用于支撑TCP/IP通道,这一层主要传送比特流
- 数据链路层:包括物理层的协议,接受来自物理层的位流形式数据,封装成帧,传送数据帧至上一层;同样也接受上层的数据帧,拆装为位流形式数据转发到物理层
- 网络层:将数据帧组成数据包,负责IP地址的编码和寻址,建立结点之间连接,是通信子网的最高层,数据链路层负责通信同一子网的,网络层则负责通讯不同子网的,传送数据包
- 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输.提供会话层和网络层之间的传输服务,获取到会话层数据,必要时,对数据进行分割,确保数据正确无误地传送到网络层
- 会话层:应用程序和网络之间的接口,提供包括访问验证和会话管理在内的建立和维护应用之间通信机制
- 表示层:解决语法表示问题,将数据语言编码转换为二进制数据语言,为了减少数据传输量,进行数据的压缩和解压缩,为了安全提供加密和解密
- 应用层:计算机用户及应用程序和网络之间的接口,面向用户提供服务,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督,管理和服务等各种协议.简单来讲就是将用户提供的抽象语言进行编码的转化,为表示层做准备
3.2TCP/IP协议族
- 链路层:对电信号进行分组并形成具有特殊意义的数据帧,然后以广播的形式通过物理介质发送给接收方
以太网协议:标识好每一组电信号的信息特征,分组顺序发送,一组电信号就是一个数据包,一个数据包被称为一帧
数据通信:接入网络的设备都需安装网络适配器(网卡
),网卡的地址(MAC地址(只与厂商有关,与所处网络无关)
)就是数据包的发送地址和接收地址,以太网采用广播的形式,把数据包发送给子网内
所有主机,每台主机会对比目标MAC地址
来进行处理
- 网络层:定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由
- IP协议:无法通过mac区分两台主机区分两台主机是否同属一个网络,引入IP协议,制订一套新地址,区分两台主机是否同属一个网络,这套地址就是网络地址,即
IP地址
;IP地址包含IPV4和IPV6,IPV4是一个32位的地址,采用4位的十进制数字表示,IP协议将这个32位的地址分为两部分,以192.168.24.1
,其中前24位就是网络地址,后8位就是主机地址,若两个IP地址在同一子网内,则网络地址一定相同,IP协议还引入子网掩码
,IP地址和子网掩码按位与运算后可得网络地址- ARP协议(地址解析协议):根据
IP地址
获取MAC地址
,数据包包含目标主机的IP地址,主机接收到会对比IP地址,如果相同就返回自己的MAC地址,不同则丢弃;ARP会将返回MAC地址与对应IP地址存入本机ARP缓存中并保留一定时间,下次直接查询ARP缓存节约资源- 路由协议:首先通过IP协议来判断两台主机是否在同一个子网中,若在,就通过ARP协议查询对应的MAC地址,若不在,以太网会将数据包转发给本子网的
网关
进行路由,网关是互联网子网与子网之间的桥梁,会进行多次转发,最终将数据包转发到目标IP的子网中,然后再通过ARP获取目标MAC,最终也是通过广播形式将数据包发送给接收方
- 传输层:定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性
- 数据通信:由于数据包到达主机后,无法确定那个应用程序要接受这个包,因此传输层引入UDP协议,定义
端口号
,给每个应用程序标识
身份,每个主机上的应用程序需指定唯一端口号;- UDP/TCP协议:
UDP协议
(用户数据报协议)比较简单,没有确认机制,无法知道对方是否接受,可靠性较差.为了提高网络可靠性,TCP协议就诞生了,TCP协议
即传输控制协议,是一种面向连接的,可靠的,基于字节流的通信协议.TCP协议在UDP基础上建立了三次握手四次挥手的确认机制,是一个可靠的连接,消耗连接资源多,传输速度慢,而UDP是面向非连接的协议,容易丢包,效率较高
-
应用层:定义数据格式并按照对应的格式解读数据
DNS协议过程
计算机网络体系结构分层
- DNS协议:域名解析协议,将域名(www.baidu.com)解析成对应的IP地址,首先本机计算机会将域名发送到解析域名的服务器上,服务器上有很多能解析各种域名的服务器,找到其中的一台,没有找到就会去查找根域名服务器,根服务器让其其去对应的子服务器查找,子服务器找到返回给计算机,并将缓存到第一次查找的服务器,之后访问该域名通过缓存查找
- http协议:超文本传输协议,是客户端和服务器端请求和应答的标准,客户端叫做用户代理(
user agent
),存储着资源的应答服务器为源服务器(origin server
),在用户代理和源服务器中间可能存在多个中间层.如,代理,网关.事实上http并没有规定使用(或者基于)TCP/IP协议,可以使用任何其它互联网协议.通过URI(统一资源标识符)来标识请求资源 (无连接,无状态,灵活:传输任意类型数据
)
3.3.TCP的三次握手和四次挥手
TCP三次握手三次握手过程:
- 第一次握手:建立连接,客户端发送连接请求报文段,把标有SYN的数据包发给服务器端
- 第二次握手:服务器端接收到客户端的SYN的报文段,同时发送标有SYN/ACK的数据包
- 第三次握手:客户端收到服务端的SYN/ACK的数据包,向服务器发送标有ACK的数据包
三次握手的原因:
主要验证的是客户端和服务端的接受和发送能力都是没有问题的
- 第一次握手:服务端知道客户端的发送能力和服务端的接受能力没有问题
-
第二次握手:客户端知道客户端和服务端的发送和接受没问题,但
服务端不知道服务端的发送能力有没有问题
- 第三次握手:客户端和服务端都知道发送和接受能力都没问题
四次挥手过程:
- 第一次挥手:客户端设置seq和ACK,向服务器发送一个FIN=1报文段,客户端进入FIN_WAIT状态,标识客户端没有数据要发送给服务端
- 第二次挥手:服务端收到了客户端发送的FIN报文段,向客户端回了一个ACK报文段
- 第三次挥手:服务端向客户端发送的FIN报文段,请求关闭连接,同时服务端进入LAST_ACK状态
- 第四次挥手:客户端收到服务端发送的FIN报文段后,向服务端发送ACK报文段,然后客户端进入TIME_WAIT状态.服务端收到客户端的ACK报文段以后,就关闭连接.此时,客户端等待2MSL(一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了
四次挥手的原因:
- 第一次挥手:客户端发送第一次挥手后,就不能再向服务端发送数据了
- 第二次挥手:服务端第一次响应后,还可以继续向客户端发送数据,这是是告诉客户端,我收到了关闭请求
-
第三次挥手:当服务端数据响应完成后,再通知客户端,我这边也可以关闭请求了,这时服务端就不能再向客户端发送数据了
第四次挥手:客户端接收到确认关闭报文,等待2MSL后没有回复,服务端已接收到,且正常关闭,客户端也可以关闭连接了
MSL(MAXimum Segment Lifetime):任何报文在网络上上存在的最长时间,超过这个时间报文将被丢弃
等待2MSL原因:
- 1.保证客户端发送的最后一个ACK报文段能够到达服务端,因为,这个ACK报文段有可能丢失,会使服务端重传FIN+ACK报文段,导致服务端无法正常关闭
- 2.使本连接持续的时间内所产生的所有报文段都从网络中消失,是下一个新的连接不会出现这种就得连接请求报文段
3.4.浏览器打开网址页面过程
-
1.URL地址:统一资源定位符,互联网上的每个文件都有唯一的URL
protocol:// hostname[:port]/path/[;parameters][?query]#fragment
→
协议://主机名:端口号/路径/参数/查询#信息片段
-
2.DNS解析:将域名转化为IP地址
查找顺序:浏览器缓存 → 操作系统缓存 → 本地host文件 → 路由器缓存 → ISP DNS缓存 → 根DNS服务器
- 3.建立TCP连接:根据解析到的IP,依据各层的协议建立TCP连接
- 4.发送HTTP请求:浏览器发送GET/POST请求
- 5.解析接受到的http数据:获取服务器的响应数据,解析HTML,CSS,JS文件构建dom树,显示网页
- 连接关闭:页面为了优化请求的耗时,默认开启持久连接(keep-alive),tab标签关闭时,tcp连接经过四次挥手关闭关闭
3.5.HTTPS
HTTP和HTTPS的区别HTTPS:超文本传输安全协议,HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包.是提供对网站服务器的身份认证,保护交换数据的隐私和完整性
HTTPS较HTTP最大的不同就是多了一层SSL(Secure Sockets Layer安全套接层)/TLS(Transport Layer Security安全传输协议).其提供通信双方识别和认证通道,保证数据的机密性和数据的完整性
过程:
- 商定双方通信使用的版本
- 确定双方使用的密码组合
- 浏览器通过服务端的加密数据验证服务端身份
- 生成会话密钥,此后通信使用对称加密
传统的http方式在传输数据时都是文明,很容易出现数据被监听和窃取的情况,也可能被监听者篡改,导致访问的内容与服务器不一致,http是一种不安全的传输协议
传输数据被窃听明文形式的数据在网络上传输是不安全的,必须要对数据进行加密才能安全传输
- 对称加密:加密和解密使用的都是同一个密钥,常见的有DES和AES,效率较高
- 非对称加密:公钥数据加密,私钥才能解密,私钥进行加密,公钥才能解密,常见的是RSA算法,私钥不需要通过网络传输,加密解密速度慢
由于网络数据的传输十分频繁,因此传输时应使用效率较高的对称加密加密数据
.但由于浏览器无法得知密钥,需网络传输密钥,但是未得到密钥之前的通讯都是明文的,容易被监听,窃取.不安全
此时,我们要结合非对称加密,来建立安全的传输机制
- 1.服务器端生成公钥和私钥,将公钥传输给浏览器(客户端)
- 2.浏览器随机生成一串密钥后传输给服务端,服务端用私钥解密,得到对称加密密钥
问题:
- 因为公钥加密的数据,只能被私钥解密,公钥属于公开的,不怕被监听.
- 但是
攻击者篡改公钥,使用自己生成的密钥串
,那么服务器的都有数据仍将被窃取
为了防止公钥被篡改,引入了CA权威机构:
- 1.网站向CA机构申请,将公钥提交给CA机构,CA机构根据公钥及其他验证信息(网站域名,有效时长等)来制作证书
-
CA机构使用私钥加密数据,将加密配置在服务器上,浏览器访问网站时,网站首先将加密数据返回浏览器,浏览器使用CA机构公钥解密数据,解密成功,则可以获取数字证书信息,包括公钥
数字证书解密成功
解密失败,说明网站返回的加密数据有可能被篡改了,或者非CA机构的私钥加密而来
数字证书解密失败
注意:为了防止其他网站管理员申请相同域名的数字证书
,致使加密数据被成功解析,而数字证书却是其它网站的信息,包括公钥,则其它网站可窃取网站信息.CA机构会对其它信息包括域名等信息进行辅助校验
4.总结
这一章节讲解了各层的协议,简单了解通信时的过程.这里主要是一些原理性质知识点讲解,与开发时http API的使用关联不大,但掌握这些底层协议和通信过程是十分重要的,对于网络数据的通信有一个更加清晰的认识
参考:
https://www.jianshu.com/p/c056f9373a10 https://blog.csdn.net/guolin_blog/article/details/104546558
https://www.jianshu.com/p/d1c813dc4225
网友评论