程序主要包括 业务 数据处理 数据传输
设备A和设备B之间的通信,实质上是两个应用程序的通信
底层是两个网卡的通信,网卡负责数据的传输和接受
应用程序和网卡之间的转换 还要经过TCP/IP协议栈
TCP/IP协议栈职能:
- 获取应用程序要传输的数据
- new Scoket(IPV4,TCP/UDP/Stream/Dgram),确定好传输协议TCP/UDP
- 封装端口号、IP地址
- MAC地址。封装MAC地址
- 确定对方和自己的设备处于网络中(联网)
网络通信模型
OSI七层模型(较理想) 网络五层模型 TCP/IP四层模型
应用层 传输层 网络层 链接层 (实体层)
协议:一个双方的约定
为什么分层
- 分层是为了更高效的通信及定位错误
- 每一层都使用了一些协议,目的是为了通信双方能够正常的通信以及理解对方的意图。
- 每一层功能的实现,都为了上层功能的实现做好了铺垫
- 越靠下的层,越接近硬件,越靠上的层越接近用户
- 每层都对数据进行封装
实体层
- 通过物理手段,将设备链接起来
- 按照逻辑电位(高电位1,低电位0)进行数据的传输
问题:没有办法解析传输过来的数据:01001010010101001
链接层
- 确定了电信号的分组方式,把每组电信号当成一个数据包(帧)
- 实现了网卡到网卡的通信
- 以广播的形式通过物理介质发送给接收方
- 首部(14字节) 数据(46~1500字节) 尾部 (4字节) Head:发送者信息和接受者信息,固定长度为14字节
- Data:发送的具体内容,最短46字节,最长1500字节,超出范围则分成多个尾部:
- 尾部固定为4个字节,表示数据帧校验序列,用于确定数据在传输中是否损坏
协议:以太网协议
- 规定一组电信号,为一个数据包(帧),并且将帧分为两部分
- .连入网络的所有设备,必须具备网卡,数据包必须从一块网卡传输到另一块网卡。网卡的地址就是发送者信息和接受者信息。也就是我们常说的Mac地址
链路层的问题:
发送者如何知道接受者的Mac地址?
发送者如何知道接受者和自己同属一个局域网?
如果接受者和自己不在一个局域网,数据包如何发送给对方?
网络层
引入三个协议,IP协议,ARP协议,路由协议,实现设备到设备的通信。
- 局域网。局域网指的是小范围使用的网络,覆盖范围较小,一般使用在办公区域较多,只能在内部互相传输文件。
- 城域网。城域网指的是一个城市内使用的网络,传输距离在10千米到100千米之间,覆盖范围较大。
- 广域网。广域网覆盖范围极大,将几十公里到几千公里内的城市、国家,甚至洲连接在一起。
IP协议:
制定了一套新的地址,使得我们能够区分两台主机是否同属一个网络
IPv4 地址:192.168.1.2
子网掩码:255.255.255.0
路由器:192.168.1.1
联网登录之后,服务器就记录了IP地址
问题: 如何获取对方的Mac地址?
ARP寻址协议:
- PC1发起一个请求数据包,包含了目标计算机的IP地址
- PC1发送数据包到交换机
- 交换机将PC1的数据包进行整个局域网的转发
- 每台计算机都査看PCI发来的数据包,比对其中的IP地址
- IP相同则接收,并且回复Mac地址,否则丢弃。
问题: 如果不在一个局域网中怎么办?
路由协议:
- 通过IP协议判断两台设备是否处于同一网络中,如果在,则通过ARP获取Mac地址
- 如果不在,则将数据转交给网关进行路由。网关是互联网中网络与网络的桥梁,多次转发后数据到达设备所处网络中,然后ARP获取Mac地址。
- 完成路由协议的物理设备就是路由器。
传输层
明确端口,表示应用身份,实现端口到端口的通信
首部 (8字节) 数据(最大65527字节)
Head:源端口号和目标端口号
Data:尽量不要超过IP数据包的长度,否则会再次分割。
UDP协议:不可靠、不稳定 效率高
TCP协议:可靠、稳定 慢、效率低
应用层
定义数据格式,并按照正确的格式解读