网络协议基础
OSI网络分层
网络分层就是OSI七层结构,另外还有个TCPIP五层结构,我从最底层开始总结
物理层
职责:建立、维护、断开物理连接
物理层是一个点对点的数据直链,并不一定可靠,物理层是通过拓扑结构进行连接,但始终保障能够连通。
物理层传输原理
物理层主要功能是传输比特流。其传输原理是将需要传输的信息按照ASCII编码转化为二进制代码,然后将二进制代码通过数据信号编码器转换为一种电信号,最后信号由发送端的发送设备通过传输介质发送到接受端计算机。传输的信号分为模电和数电,解析方法是调制和解调
物理层总结
物理层的传输方式和解析方式大部分是本科阶段通信原理学习的内容,另外传输的协议比如说数电,模电,多路复用,时分复用,波分复用等等。对移动端来讲物理层可控太少,了解其职责和大致原理即可。
数据链路层
职责:建立逻辑连接,进行硬件地址寻址,差错校验等功能
数据链路层是一个数据传输通道,位于物理层和网络层之间,是数据传输过程中比较重要的一层。物理层提供的的传输媒介、连接在通讯时只是暂时的,而数据链路的功能就是通过建立通信连接和拆除通信连接这种数据收发方式,而承担数据链路功能的设备就是数据链路层设备
数据链路层设备
- 网卡
作用:网卡是连接计算机与网络的硬件设备,不仅能实现与局域网传输介质之间的物理连接和电信号连接,还涉及了帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能
- 网桥
作用:实现局域网互联的存储转发设备,网桥从一个局域网接收mac帧、拆封、校对、校验之后,按照另一个局域网的格式重新组装,发往它的物理层
- 交换机
是一种用于电信号转发的网络设备,可以把传输的信息送到符合要求的设备上面
数据链路层基础知识
- mac地址
mac地址用来表示互联网上面每一个站点的标识符,采用十六进制,共6个字节
输入ipconfig/all 中的物理地址及是mac地址
- 数据帧
数据帧是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。帧头帧尾是控制信息,数据部分包含了需要传输的数据
- 载波监听多路访问技术 CSMA/CD
发送数据前监听信道是否空闲,若空闲就立即发送信道,否则就等待一段时间直至信道中的信息传输结束后再发送数据,若在上一段信息发送结束后,同时又两个或两个以上节点都提出发送请求,则判定为冲突,冲突会立即停止发送数据,等待一段时间之后再重新尝试
网络层
职责:进行逻辑地址寻址,实现不同网络之间的路径选择
网络层将多个通络通过路由器互连成一个互连网络,让网络中的多台计算机可以互相通信。网络层最重要的是ip协议,在网络层需要实现数据报文的分片与组装、同时需要提供路由选择。
和网络层搭配使用的是ARP(地址解析协议),ICMP(互联网控制报文协议),IGMP(网际管理协议)
ARP (address resolution protocol)
在实际过程中,知道一个主机或者路由器的ip地址,并不知道对应的mac地址,因此可以通过arp协议,用目的ip地址得到mac地址。
原理:在每台安装tcpip协议的电脑路由器里都有一个arp缓存表,表里的ip地址与mac地址是一一对应的。当发送数据时,主机a会在自己的arp缓存表中寻找是否有目标ip地址,如果找到就知道目标对应的mac地址,直接将mac地址写入帧里面发送即可。如果没有找到,就会在网络上发送一个广播(ARP REQUEST),这个request的目标mac地址是”FF.FF.FF.FF.FF.FF”,携带的信息是查询目标ip地址。网络上面不是这个ip地址的主机不会响应这个arp查询,只有ip地址为这个的目标主机才会响应,并且发送一个ARP RESPONSE, 携带的信息是目标ip的mac地址,这样就回复回来的时候就知道目标的mac地址了,并且会更新arp缓存表(arp缓存表使用的是老化机制,一段时间不使用就会删除,因此长度并不会特别长)
ICMP (internet control message protocol)
通信环境中可能存在各种问题,这些问题的反馈需要让开发者知道并且应对,因此就有了ICMP协议,该协议与传输协议不同,他一般并不用于两点间传输数据,而常常用于返回错误的信息或分析路由。
ICMP主要功能:1、确认ip包是否成功到达目标地址 2、通知在发送过程中ip包被丢弃的原因 3、ICMP是基于ip协议制作的,但是并不是传输层的功能,因此仍然是网络层协议 4、ICMP只能用于IPV4, 能用于IPV6的icmp叫做ICMPV6
常用的ICMP技术,像是 ping, traceroute命令
IGMP (internet group management protocol)
跨越多个网络的组播转发必须要依赖于路由器,路由器为建立转发路由必须要了解每个组员在internet中的分布,这要求主机将自己所在的组播组通知给本地路由器,这也是建立组播转发路由的基础。主机与本地路由器之间使用igmp来进行组播组成员信息的交互。
IGMP提供了再转发组播数据包到达目的地的最后阶段所需要的信息,实现双向的功能:
1.主机通过igmp通知路由器希望接受或离开某个特定组播组的信息
2.路由器通过IGMP周期性的查询局域网内的组播组成员是否处于活动状态,实现所连网段组成员关系的手机与维护。
传输层
职责:在网络的各个节点之间可靠的分发数据包,实现应用进程间的端到端通信,同时向应用层提供通信服务
原理:通过多路复用和解复用技术,发送方的不同的应用进程都可以使用同一个传输层协议传送数据,接收方的传输层剥去报文首部之后能把这些数据正确的传输的正确的应用进程之间。
传输层就是知名协议UDP和TCP的所在。
UDP(user datagram protocol) 用户数据协议
UDP特性:一个数据包就能完成任务,不需要分段,不需要建立会话,不需要流量控制,是种不可靠的传输方式。
UDP的优点
- 开销更小
对比于tcp, udp的首部只有8个字节,而tcp有20个字节和40个字节的可选项
- 速度更快
UDP发送数据之前没有TCP的连接建立过程,而TCP则提供了过多的保护,在及时性上面做了很多的妥协
UDP的主要问题
- 丢失和乱序
因为UDP不提供ACK、序列号等机制,所以是没有办法知道是否有报文丢失以及接收方到达等报文书序是否和发送方的报文数据一样
- 差错
对于差错问题可以通过校验和等检测到,但是不提供差错纠正
- 数据完整性
UDP协议头部虽然有16位的校验和,但是IPV4不强制执行,所以说UDP无法保证数据的完整性
UDP如何解决传输的问题
1、 数据完整性
加上一个16或者32位的CRC验证字段
2、 乱序
加上一个数据包序列号SEQ
3、 丢包
加上和TCP类似的ACK机制,进行确认和重传
因此推荐使用RUDP(reliable udp)
TCP(transmission control protocol) 传输控制协议
TCP头部图
tcp头部添加了20个字节,总计160位来进行数据的控制
其中选项还可以在多添加40个字节
因此头部的必要信息比较多,也是确保数据可靠的基础
TCP连接管理机制
连接tcp需要三次握手,断开tcp需要四次挥手
三次握手
第一次:
客户端发送给服务器,通知服务器需要建立连接
第二次:
服务器发送给客户端,通知客户端服务器收到连接请求
第三次:
客户端发送给服务器,通知服务器客户端收到了服务器的回应
详细解释:
1, TCP服务器进程先创建传输控制块TCB, 时刻准备接受客户端进程的连接请求, 此时服务器就进入了 LISTEN(监听)状态
2, TCP客户端进程也是先创建传输控制块TCB, 然后向服务器发出连接请求报文,此时报文首部中的同步标志位SYN=1, 同时选择一个初始序列号 seq = x, 此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定, SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
3, TCP服务器收到请求报文后, 如果同意连接, 则发出确认报文。确认报文中的 ACK=1, SYN=1, 确认序号是 x+1, 同时也要为自己初始化一个序列号 seq = y, 此时, TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据, 但是同样要消耗一个序号。
4, TCP客户端进程收到确认后还, 要向服务器给出确认。确认报文的ACK=1,确认序号是 y+1,自己的序列号是 x+1.
5, 此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
- 为什么不用两次握手?
主要是为了防止已经失效的连接请求报文突然又传回服务器,如果是已经失效的,第三次就无法成立,因此第三次是为了确保网络停滞时间不会导致连接失效
- 为什么不用四次?
四次的话其实就是服务器在通知一次客户端,其实没有必要了,多余了
四次挥手
第一次:客户端通知服务器端,要释放连接了,并且客户端进入终止等待1状态
第二次:服务器收到客户端的释放连接的请求,通知客户端自己已经收到释放连接的请求
第三次:客户端收到服务器的确认释放连接请求,客户端进入终止等待2状态,而服务器将最后的数据发送完毕后,就向客户端发送连接释放报文
第四次:客户端收到连接释放报文,向服务端发出确认释放,之后就进入了时间等待状态,等到2个最长报文段寿命时间结束后,客户端就撤销相应的TCB,并且进入close状态,而服务端在接收到了这个确认信息后,不需要等待,而直接进入close状态。因此服务端结束的时间比客户端早一些
- 为什么客户端在第四次挥手的时候需要等待两个最长报文寿命时间呢?
第一:保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,丢失的话服务端就无法知道收到回应,因此如果最后一个ACK报文丢失的话,服务端会再次发送,在两个最长报文寿命时间内,客户端有可能收到第二次请求确认的报文
第二:防止已经失效的请求报文,客户端等待的两个最长报文寿命的时间中,可以确保本次tcp连接产生的所有报文段都从网络中消失,这样新的连接就不会出现旧连接的请求报文
- 为什么建立连接需要三次,而释放连接需要四次?
因为释放的时候不确定是否有数据没有发送完毕,因此需要确保数据全部发送完毕,这样多了一次,而如果释放的时候没有数据的话,其实可以看做三次,即第二次和第三次合并
窗口滑动
TCP的滑动窗口以字节为单位,用三个指针进行表示,当窗口内连续报文段被确认收到后,可以将窗口向前滑动,窗口大小应等于缓存区大小
窗口滑动协议
只有在接受窗口向前滑动时(与此同时也发送了确认),发送窗口才可能向前滑动,收发两端的窗口按照以上规律不断的向前滑动
1 | 当发送窗口和接受窗口的大小都等于1时,就是停止等待协议。 |
重发是对回退的补充,由于回退会导致从漏掉的帧到已接受的所有帧全部丢弃,浪费了带宽,而重发则是直接对漏掉的帧进行补充
传输层其他协议
传输层还有SPX, NetBIOS,NetBEUI等协议
会话层
职责:主机间通讯,管理应用程序之间的会话。建立在传输层之上,利用传输层提供的服务,使应用建立和维持会话,并能使会话得到同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。
主要功能
1、为会话实体间建立连接
2、进行数据传输
3、连接释放
具体理解
会话层主要是通过调用传输层来建立会话
表示层
职责:表示层向上对应用层服务,向下接受来自会话层的服务,表示层为在引用过程之间传送的信息提供表示方法的服务,只关心信息发出的语法和语义。
主要功能
表示层早期是用来转换字符数据的编码,提供格式化的表示和转换数据服务,数据的压缩和解压缩,加密和解密等工作,但是现在应用层可以做表示层可以做的事情,所以一般根据TCPIP五层协议,表示层会话层和应用层都可以合为应用层
应用层
职责:应用层直接和应用程序接口并且提供常见的网络应用服务,应用层也会向表示层发出请求,应用层是开放系统的最高层,是直接为应用进程提供服务的。
应用层协议较多,有FTP、SMTP、HTTP等
着重学习一下HTTPS
https
https协议主要针对解决http协议以下不足:
1.通信使用明文(不加密),内容可能会被窃听
2.不验证通信方身份,应此可能遭遇伪装
3.无法证明报文的完整性(即准确性),所以可能已遭篡改
http+加密+认证+完整性保护=https
https 和http主要的区别
- https需要ca证书
- https是具有安全性的ssl加密传输协议,http是明文传输
- http和https使用完全不同的连接方式,用的端口也不一样,http是80端口,https是443端口
- http是无状态的,而https是有ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
握手过程
- 客户端向服务器传送客户端ssl协议的版本号,加密算法的种类,产生的随机数、以及其他服务器和客户端之间通讯需要的各种信息
- 服务器向客户端传送ssl协议的版本号、加密算法的种类、随机数以及其他相关信息,同时服务器还向客户端传送自己的证书
- 客户端利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,ca证书是否可靠,证书的公钥能否解开服务器证书的发行者数字签名,证书上面的域名是否和服务器的实际域名相匹配。如果不合法,通讯将断开,否则将继续进行下面的步骤
- 客户端随机产生一个用于后面通讯的“对称密码”,然后服务器的公钥对其加密,然后将加密后的“预主密码“传给服务器
- 如果服务器要求客户的身份认证,用户可以建立一个随机数然后对其数据签名,然后将这个含有签名的随机数和客户自己的证书以及加密过的”预主密码“一起传给服务器
- 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性检验过程包括:客户的证书使用日期是否有效,提供的ca是否可靠,ca的公钥能否正确解开客户端证书的发行ca签名,检查客户的证书是否在证书废止列表中。如果不合法,通讯立即终端,否则服务器将用自己的私钥解药加密的预主密码,然后执行一系列步骤产生主通讯密码。客户端也同样的步骤产生主通讯密码
- 服务器和客户端用相同的主密码。一个对称秘钥用于ssl协议的安全数据通讯的加解密通讯,同时在ssl通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化
- 客户端向服务器发出信息,指明后续通讯将使用主密码为堆成密码,同时通知服务器本次握手过程结束
- 服务器向客户端发出信息,指明后续通讯将使用主密码为对称密码,同时通知客户端本次握手过程结束
- ssl的握手部分结束,安全通道的通讯开始,客户端和服务端开始使用相同的对称秘钥进行数据通讯,同时检查通讯完整性
概括,https在客户端生成秘钥并传递给服务端的时候,采取的是非对称加密,而秘钥在服务端手里的时候,之后采取的就是对称加密。单向验证是指客户端对服务端进行身份验证,验证是否可靠,而双向验证则是服务端也同时验证客户端,双向验证常见于企业应用