关于网络的知识,我这里主要是从OSI分层,网络协议等相关的知识。
谈谈对OSI七层模型和TCP/IP四层模型的理解?
所谓七层模型和四层模型是前辈们为了增强通用型和兼容性,设计出来的层次结构,每一层都遵守一定的规则。
- 物理层:通过光缆,网线等物理方式把电脑连接起来,是传递比特流,并且规定了电平,速度,电缆针脚。
- 数据链路层:把比特流封装成数据帧的格式,帧是数据链路层的传送单位。电脑连接起来之后,数据都是经过网卡传输,而网卡定义了世界唯一的mac地址,通过广播的形式向局域网所有的电脑发送数据,根据数据中的mac地址和自身的进行对比判断是否发送给自己。数据链路层主要是帧编码和误差纠正控制。
- 网络层:网络层定义了IP协议和子网掩码,通过对IP和子网掩码进行运算能确定是否是通一个子网,通过路由器和交换机进行传输。网络层具有寻址和路由选择,连接的建立,保持,终止等功能。
- 传输层:传输层是端到端的连接,为了确定数据包是从哪个进程发送过来的,就需要端口号,通过端口来建立通信,比如TCP和UDP属于这一层的协议。
- 会话层:负责建立,管理,断开表示层实体间的通信会话。
- 表示层:服务于应用层数据编码和转换功能,保证一个系统的应用层数据发送到另外一个应用层能识别。
- 应用层:最靠近用户的一层,是为计算机用户提供应用接口,最终供用户的能理解使用的一层。
TCP/IP模型是四层,对于OSI的模型简化:
- 网络接口层,也叫网络访问层,包含OSI模型的物理层和数据链路层,把电脑连接起来。
- 网络层,也叫做IP层,处理IP数据包的传输、路由,建立主机间的通信。
- 传输层,为两台主机设备提供端到端的通信。
- 应用层,包含OSI的会话层、表示层和应用层,提供了一些常用的协议规范,比如FTP、SMPT、HTTP等。
OSI模型总结
物理层通过物理手段把电脑连接起来,数据链路层是对比特流的封装编码,网络层来建立主机对主机的通信,传输层建立端口到端口的通信,表示层处理数据编码和转换,应用层最终负责建立连接,数据格式转换,呈现给用户。
在OSI七层参考模型中,每一层都有哪些协议?
- 物理层协议有:EIA/TIA-232, EIA/TIA-499,V.35, V.24,RJ45, Ethernet, 802.3,FDDI
- 数据链路层协议有:Frame Relay,HDLC,PPP, IEEE 802.3/802.2
- 网络层协议有:IP,IPX,AppleTalk DDP
- 传输层协议有:TCP,UDP
- 会话层协议有:RPC,SQL,NFS,NetBIOS,names,AppleTalk
- 表示层协议有:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption
- 应用层协议有:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP
如何知道两台机器是否相通?
判断两台机器是否相通,我们从上面的OSI模型中能知道在IP层实现就行了,IP层是实现两台机器的通信,关于IP层我们从上面也知道有IP协议,IPX协议等,其实我们只要能知道实现IP层协议的一些命令就能知道如何通过命令知道两台机器是否相通。
如何知道两台机器是否相通,我们可以通过ping或者traceroute命令,ping和traceroute命令基于ICMP协议实现。下面我们来分析一下ping和traceroute命令以及ICMP协议。
ping命令:。它是基于网络层、通过发送和接收数据包来检测两台计算机间的连接状况。当出现网络故障的时候,我们就可以用ping命令来预估故障点,如果ping命令没有成功,那么就该考虑硬件连接是否出错,比如网卡设置是否正确、比如网线是否连通,再考虑IP地址设置是否正确。也可以用于数据包一去一回所需耗的时间。使用命令:Ping IP地址。
ping命令就会将目的服务器的 IP 地址,数据大小,往返花费的时间打印到屏幕上。如下图:
traceroute命令:traceroute命令是一款充分利用 ICMP 差错报文类型的应用,其主要用作追踪路由信息。它的实现是利用从每个机器节点之间的IP报的TTL从1开始递增同时发送UDP包,当出错则接受ICMP包的超时错误信息。
我们参考下图,就能清楚的描述 traceroute 的整个过程。
tracerouter发UDP,为啥出错会回ICMP?正常情况下,协议栈能正常走到UDP,当然正常返回UDP。但是,你主机不可达,是IP层的(还没到UDP)。IP层,当然只知道回ICMP。
ICMP协议
ICMP是 Internet Control Message Protocol 的缩写,即互联网控制消息协议。它是互联网协议族的核心协议之一。它是IP层中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使网络管理者可以对所发送的问题作出诊断,从而采取适当措施来解决问题。
ICMP本身是网络层的一个协议,但是它的报文不是直接传送给数据链路层,而是要封装IP数据包,然后再传送给数据链路层。ICMP的差错和控制信息传输只是要解决IP可能出现的不可靠问题,它不能独立于IP而单独存在,因此应该把它视为IP的一个部分,归于IP体系。
ICMP协议报文
协议报文
ICMP报文中各字段含义如下:
- 类型:占1字节,表示ICMP消息的类型。
- 代码:占l字节,进一步划分ICMP消息的子类型,如对类型3(目的不可达)又细分为目的网络不可达(代码0)、目的主机不可达(代码2)、目的协议不可达(代码3)、目的端口不可达(代码4)等。
- 校验和:占2字节,对ICMP报文首部和数据进行校验。
- 第4个字段:占4字节,内容取决于ICMP报文的类型,有的类型不定义该字段。
- 数据部分:内容和长度取决于ICMP报文的类型。
ICMP消息的类型分为查询报文,差错控制报文:
ICMP报文类型 | 类型的值 | 说明
查询报文 | 8 | 回应请求
查询报文 | 0 | 应答报文
查询报文 | 13 | 时间戳请求
查询报文 | 14 | 应答报文
查询报文 | 17 | 子网掩码请求
查询报文 | 18 | 应答报文
查询报文 | 10 | 路由查询
查询报文 | 9 | 通告报文
差错控制报文 | 3 | 目标不可达
差错控制报文 | 4 | 源端控制
差错控制报文 | 5 | 重定向
差错控制报文 | 11 | 超时
差错控制报文 | 12 | 报文参数出错
ICMP代码类型:
代码 | 含义
0 | 目标网络不可达
1 | 目标主机不可达
2 | 目标协议不可达
3 | 目标端口不可达
4 | 需要分段且已设置DF
5 | 源路由失败
6 | 目的网络未知
7 | 目的主机未知
8 | 源主机被隔离
9 | 目的网络被强制禁止
10 | 目的主机被强制禁止
11 | 网络不能达到指定的服务类型
12 | 主机不能达到指定的服务类型
13 | 因管理结构的主机设置了过滤器而不可达
14 | 因主机所设置的优先级收到破坏而不可达
15 | 因优先级被删除而使主机不可达
了解了ICMP协议的报文了,我们来看下ping命令实现的ICMP协议的整个传输流程。ICMP 是 IP 的上层协议,但是ICMP也分担了IP的一部分功能。下面展示了ICMP协议的实现的图解。