网口通讯(2)——了解数据传输
文章目录
Reference
引言:
本文旨在对网络数据收发逻辑进行初步认知,简要记录网络数据交互的不同层次概念,留作储备。
一、网络互联的分层模型
1、七层OSI模型简介
国际标准化组织ISO为了使网络应用更为普及,于1985年推出了OSI参考模型,即开放式系统互联(Open System Interconnect)模型,一般叫OSI参考模型。
OSI模型定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI模型各层的通信协议,大致举例如下表所示:
表:OSI模型各层的通信协议举例
不同层别 | 示例 |
---|---|
应用层 | HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、等 |
表示层 | XDR、ASN.1、SMB、AFP、NCP、等 |
会话层 | ASAP、SSH、RPC、NetBIOS、ASP、Winsock、BSD Sockets、等等 |
传输层 | TCP、UDP、TLS、RTP、SCTP、SPX、ATP、IL、等等 |
网络层 | IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、X.25、等等 |
数据链路层 | 以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP、等 |
物理层 | 例如铜缆、网线、光缆、无线电等等 |
不同层次作用如下图
发送方由第七层到第一层 由上到下按照顺序传送数据,每个分层在处理上层传递的数据时,附上当前层协议所必须的 "首部"信息。接收方由第一层到第七层 由下到上按照顺序传递数据,每个分层对接收到的数据进行 "首部"与"内容"分离,在转发给上一层。最终将发送的数据恢复为原始数据。
2、简化的TCP/IP四层协议模型
TCP/IP协议是Internet互联网最基本的协议,是基于TCP和IP这两个最初的协议之上的不同的通信协议的大集合
其参考了七层OSI模型,并简化为四个层次,两者对应关系图如下:
应用层包括所有和应用程序协同工作,并利用基础网络交换应用程序的业务数据的协议,是用来读取来自传输层的数据或者将数据传输写入传输层。该层协议所提供的服务能直接支持用户应用。应用层协议包括HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(域名解析)等。
传输层的主要为实现端对端的数据传输,确保数据可靠的到达目的地,并能保证数据按照正确的顺序到达目的地。传输层的主要功能有:
(1)为端到端连接提供传输服务;
(2)这种传输服务分为可靠和不可靠的,其中TCP是典型的可靠传输,而UDP则是不可靠传输;
(3)为端到端连接提供流量控制、差错控制、QoS(Quality of Service)服务质量等管理服务。
传输层主要有两个性质不同的协议:TCP传输控制协议和UDP用户数据报协议。
TCP协议 是一个面向连接的、可靠的传输协议,它提供一种可靠的字节流,能保证数据完整、无损并且按顺序收发。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。
UDP协议 是一个无连接的数据报协议,是一个“尽力传递”和“不可靠”协议,不会对数据包是否已经到达目的地进行检查,并且不保证数据包按顺序到达。
总体来说,TCP协议传输效率低,但可靠性强;UDP协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据(比如QQ、微信聊天数据)。
网络层是在复杂的网络环境中为要发送的数据报找到一个合适的路径进行传输,简单地说,网络层负责将数据传输到目标地址,目标地址可以是多个网络通过路由器连接而成的某一个地址。另外,网络层负责寻找合适的路径到达对方计算机,并把数据帧传送给对方,网络层还可以实现拥塞控制、网际互连等功能。主要负责网络中数据包的传送 等,网络层协议的代表包括:ICMP、IP、IGMP等。
链路层有时也称作数据链路层或网络接口层,用来处理连接网络的硬件部分。该层既包括操作系统硬件的设备驱动、NIC(网卡)、光纤等物理可见部分,还包括连接器等一切传输媒介。在这一层,数据的传输单位为比特。其主要协议有ARP、RARP等。
二、数据传输过程
1、数据传输原理简述
要详细了解各层次实现完整的数据交互过程可参阅图解TCP/IP协议
物理层:使用MAC解决设备的身份证问题(过程中产生了集线器)
数据链路:使用交换机解决MAC 地址映射问题(形成小范围网络——以太网)
网络与数据传输层:路由器进行数据转发,其每个端口均具有独立MAC地址(专门负责IP地址的寻找,以定位发送,IP为软件层面可修改地址)(衍生有子网、子网掩码和网关概念,并且设备通过arp协议,记录网络中IP与不同设备MAC之间的对应关系)
2、传输过程结论
从各个视角来看:
电脑视角:
首先我要知道我的 IP 以及对方的 IP
通过子网掩码判断我们是否在同一个子网
在同一个子网就通过 arp 获取对方 mac 地址直接扔出去
不在同一个子网就通过 arp 获取默认网关的 mac 地址直接扔出去
交换机视角:
我收到的数据包必须有目标 MAC 地址
通过 MAC 地址表查映射关系
查到了就按照映射关系从我的指定端口发出去
查不到就所有端口都发出去
路由器视角:
我收到的数据包必须有目标 IP 地址
通过路由表查映射关系
查到了就按照映射关系从我的指定端口发出去
(不在任何一个子网范围,走其路由器的默认网关也是查到了)
查不到则返回一个路由不可达的数据包
经过上述可知:网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的。
协议涉及到的三张表
- 交换机中有 MAC 地址表用于映射 MAC 地址和它的端口
- 路由器中有路由表用于映射 IP 地址(段)和它的端口
- 电脑和路由器中都有arp 缓存表用于缓存 IP 和 MAC 地址的映射关系
三表来源
- MAC 地址表是通过以太网内各节点之间不断通过交换机通信,不断完善起来的
- 路由表是各种路由算法 + 人工配置逐步完善起来的
- arp 缓存表是不断通过 arp 协议的请求逐步完善起来的
经过上述,则可以明白网络上两个节点是收发数据包的过程!
3、传输过程示例
从A给F发送数据的过程
-
首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.254)
-
A 通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址
-
A 将源 MAC 地址(AAAA)与网关 MAC 地址(ABAB)封装在数据链路层头部,又将源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)封装在网络层头部,然后发包
(注意这里千万不要以为填写的是默认网关的 IP 地址,从始至终这个数据包的两个 IP 地址都是不变的,只有 MAC 地址在不断变化)
-
交换机 1 收到数据包后,发现目标 MAC 地址是 ABAB,转发给路由器1
-
数据包来到了路由器 1,发现其目标 IP 地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是 192.168.100.5*
-
所以此时路由器 1 需要再次匹配路由表,发现匹配到了端口为 2,于是将其封装到数据链路层,最后把包从 2 号口发出去
-
此时路由器 2 收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为 1,准备发送
-
此时路由器 2 需要知道 192.168.2.2 的 MAC 地址,于是查看其 arp 缓存,找到其 MAC 地址为 FFFF,将其封装在数据链路层头部,并从 1 号端口把包发出去
-
交换机 3 收到了数据包,发现目的 MAC 地址为 FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去
-
F 最终收到了数据包,并且发现目的 MAC 地址就是自己,于是欣然收下
三、传输方式分类
根据数据发送方法,一般有较多不同分类,主要分为两种
1、面向有连接型
发送数据之前,需要在收发主机之间建立一条通信线路,在通信传输前后,专门进行建立和断开连接的处理,如果与对端之间无法通信,可避免发送无谓的数据
相应典型为TCP,握手之后才可通讯
2、面向无连接型
相应典型为UDP,只要链路层连接,即可随时发送