计算机网络参考模型:
OSP七层模型 : 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
五层模型 : 物理层 数据链路层 网络层 传输层 应用层
TCP/IP模型 : 物理接口层 网络层 传输层 应用层
五层模型中各层的作用简单概括 :
物理层 : 利用线路的机械特性,实现各种材质(光纤,电流)对二进制的表示。
数据链路层 : 使用MAC地址作为标识(每个联网设备都具有自己的MAC地址,且全球唯一)与MAC地址表(每个联网设备都有自己的MAC地址表)来进行局域网的通信。
网络层 : 使用IP地址作为标识来进行计算机到计算机的通信,解决了数据链路层无法达成的路由到路由之间的通信的难题。
传输层 : 使用端口作为标识来进行端口到端口的通信(每个联网进程都有自己的端口)。
应用层 : 数据的表示(编码,加密之类的),以及灵活地制定不同计算机的程序之间交互的方式,为应用程序提供网络服务。
五层模型中各层数据的名称 :
应用层 : 报文,报文其实就是数据的表示方式,可以是各种编码的数据,也可以在编码之后再进行加密。
传输层 : 数据段,在报文的基础上,添加了TCP/UDP头,无论什么协议,都要有源端口和目标端口,其他属性则是为了实现各个协议而特殊设计的。
网络层 : 数据包,在数据段的基础上,添加了IP头,IP头的主要内容是 源IP地址和目标IP地址。
数据链路层 : 数据帧,如若数据包过大则会进行拆分,将一个数据包拆为多个帧。再将头部加上去。
物理层 : 二进制流,将所有数据都作为二进制的形式在管道中进行传输。
备注 :
在网络层以及以下的数据都是不可靠,无连接的服务的。如若发现数据出错,就会直接丢弃。
分层的好处 :
层与层之间的好处 :
1.开发 : 各层之间只需要根据制定的接口标准,就可以直接使用下一层的接口,而不用考虑下一层的实现,可以很灵活地使用各种技术完成这一层的工作,实现上一层的接口。
2.维护 : 因为每一层相互独立,如若发生故障,只需要从物理层到应用层去进行排查,而不用担心是两层之间连接出现问题。可以更轻松便捷地找到问题。
3.更新 :因为当前层的实现只关于当前层,所以只要在保证接口不变的情况下,就能直接修改更新,而不用担心这层发生改变,上层的结构都要随之改变。使得更新成本变低。例如:IPV4 -> IPV6的升级。
标准化同层之间的好处 :
不同的厂商可以利用标准化的接口,自行使用自己的技术设计自己的硬件与软件。避免了因标准不同而不兼容的尴尬。提高了运行效率维修成本等。
例如 : 思科的路由器和华为的路由器完全可以兼容,用户有更多更方便的选择。
光纤与电话线能处于同一条数据链路中。
五层模型中几个重要的表 :
MAC地址表 : 记录着 MAC地址 和 端口(这里的端口指硬件端口) 之间的关系。
路由表 : 记录着 IP地址A 与 IP地址B 之间的关系,表示想要去A可以从B中转。
ARP表 : 记录着 IP地址 与 MAC地址 之间的关系,提供查询 IP地址 -> MAC地址 的服务。
RARP表 : 记录着 MAC地址 与 IP地址 之间的关系,提供查询 MAC地址 -> IP地址 的服务
NAT表 : 记录着 内网地址:端口 与 外网地址:端口 之间的关系
五层模型中重要协议与技术的概括:
差错检测技术 : 对于一个二进制数,如何保证它再物理层传输中,不会因为电流的不稳定或者宇宙射线等原因出现 bit的0和1互换 呢?
差错检测技术(奇偶校验和和循环冗余检验)一般在二进制数尾部添加一个检错码,这个检验码是根据二进制数与一个函数关系生成的,如若出错,就能利用函数关系的数学原理得知,然后直接抛弃这个帧。
透明传输技术(数据链路层) : 将数据包转换为数据帧,首先要添加数据帧头部和尾部,但是如何识别数据是否到达尾部?如若有一个 帧尾部符号 等值的二进制 处于帧中,那是否就直接将该符号后的二进制数都丢弃了?
网络地址转换技术NAT(网络层技术) :
解决的问题 : 因IPV4的设计原因,导致IP地址不够用。
原理 : 将网络地址分为内网地址和外网地址,利用NAT表来进行内网地址到外网地址的转换。
NAT表处于路由器之中,路由器会为每个联网设备分配一个IP地址,然后将其记录在NAT表中,当有帧到达路由器时要出去时,路由器就会将这个帧的 源MAC地址(修改成当前路由器的MAC地址),目标MAC地址(通过路由表得到下一跳的IP,再通过ARP表得到下一跳的IP地址),源IP地址(通过NAT表),源端口(通过NAT表),全部修改。然后根据目标MAC地址和MAC地址表,得到目标MAC地址对应的路由器端口,发出。
网络控制报文协议(ICMP协议)(网络层协议):
ICMP处于IP数据报(身体)内,并且数据包头部会有一个协议类型标志着当前IP数据报内所用的协议(TCP,UDP,ICMP等),ICMP主要用于差错报告和询问报文的。
重点知识解答:
为什么TCP要三次握手而要四次挥手?
TCP协议利用问答形式来保证其可靠性,首先假设为 客户端与服务端。
三次握手:
客户端发送一个SYN seq=x,表示 : 我要连接你了,收到请回复x+1。
服务器端收到上一条信息发送SYN ACK seq=y,ack=x+1表示 : 我知道你要连接我了x+1,并且我也要连接你了,收到请回复y+1。
客户端收到后发送 ACK seq=x+1 ack=y+1表示: 我知道你要连接我了y+1。
四次挥手:
客户端发送一个FIN seq=x,表示 : 我要与你断开连接了,收到请回复x+1。
服务器端收到,发送 ACK ack=x+1 seq=y表示: 我知道你要与我断开连接了x+1。
此时,客户端停止向服务器端发送数据(但还能发送ACK),但服务器端还没停止向客户端传输数据!
服务器端数据传输完毕后。
服务器发送一个FIN ACK seq=w,ack=x+1,表示: 我知道你要与我断开连接了x+1,我也要与你断开连接了,收到请回复w+1。
客户端收到后,发送 ACK seq=x+1,ack=w+1表示 : 我知道你要和我断开连接了w+1。
连接真正关闭。
也就是说无论是关闭和连接可以分为两个动作 : A开始或停止向B传输数据, B开始或停止向A传输数据。则AB连接开启或关闭。
无论是开启传输还是关闭传输,都是一问一答,但是三次握手时,回答客户端和请求传输数据给客户端使用了同一条消息来进行!故而三次握手,四次挥手。