层状结构下的网络协议,我们认为同层协议都可以认为自己在和对方直接通信,忽略底层
计算机如何看待协议
代码逻辑上
一个协议有对应的功能
数据上:
收到数据后,每一层需要拿到数据后,要把上一层协议相关的数据进行去除
网络协议
网络解决的问题是牵扯到数据双方的,
- 一定存在一个数据的发送方和一个数据接收方;
- 网络解决的就是不同机器之间,不同进程的进程间通信问题
网络协议:两个机器通信,就要用到相同的数据格式
- 网络协议就是解决网络双方,发送的网络数据格式问题;
- 网络协议本质上对发送和接收数据的格式做出了约定;
- 在整个网络协议栈中并不是只有一个,并且有协议分层
OSI七层模型
物 | 物理层 | 路由器,交换机 |
---|---|---|
数 | 数据链路层 | |
网 | 网络层 | |
传 | 传输层 | |
会 | 会话层 | |
表 | 表示层 | |
应 | 应用层 |
- 这是一个理论模型,并没有广泛应用,应用的是TCP/IP五层/四层模型
- 按五层就算物理层,按四层就不算物理层
- 会话,表示,应用
典型协议与设备 | 作用 | |
---|---|---|
应用层 | HTTP,DNS | 程序员在该层写代码 |
传输层 | UDP,TCP | 端与端之间的传输 |
网络层 | IP,路由器 | 地址管理和路由选择,给谁发消息,定位位置 |
数据链路层 | 以太网协议;典型设备交换机,驱动程序提供 | 相邻设备之间的传输 |
物理层 | 集线路由器 | 二进制数据和光电信号的相互转化 |
内核实现了传输层和网络层
- 程序员写的代码就是应用层;
- 剩下几层在内核当中网络协议栈就将代码写好了;
- 程序员只需在应用层调用网络协议栈中的接口;
- 程序员和网络协议栈中的传输层进行交互,调用的是传输层接口
网络协议栈=传输层+网络层+数据链路层+物理层
网络传输流程
数据的封装与分用
网络数据的传输流程:指的是数据的封装与分用
- 我们产生的数据都是应用层数据;
- 应用层数据在传输时,一定是经过自己 机器的网络协议栈层层封装后,才进入网络传输
- 该数据到达对方机器后,也是经过对方网络机器的协议栈,经层层分用后到达应用层
- 对端机器的应用层程序才能拿到数据
每一层协议都有自己的报头字段,发送时就会加上本层协议数据
发送时的过程就是在封装数据
收到数据是解包的过程
IP地址
- IP是在网络中标识一台主机,在网络中传输的数据会包含两个要素
- 源端IP和目的端IP,这两个信息标识了数据从哪来到哪去
- 目的端IP的作用:网络中的路由器,会辨别这个目的主机IP属于哪个网络,然后规划路径,将数据发送到对应的网络中
- 源端地址让对方知道数据来源于哪里
- 通过端口告诉数据给哪个进程处理
机器获取的IP地址是动态的
- 本质:ip地址是一个4字节,32位的无符号整数
uint_t类型最大是42亿多
现在数字不够了,所以使用ipv6,uint_8 - - -128位的数据- ipv4不兼容ipv6
- 解决ip不够用
使用DHCP技术:分配地址,谁上网给谁分配地址
NAT技术:主要用于私网的组件,私网中的大量主机可以使用同一个公网地址进行上网
- 表现:用“点分十进制”的字符串来表示ip地址,以点分隔数字,每个数字表示一个字节,范围是0~255
192.168.0.1的二进制为:
1100 0000 . 1010 1000 . 0000 0000 . 0000 0001
MAC地址
- 作用:数据链路层相连的设备进行互相识别(如机器和路由器相互识别)
数据从A机器发送给B机器,B机器IP地址是变化的,所以采用MAC地址- 本质:长度为48位,6个字节;
- 表现形式:用6给个16进制数字加上冒号的形式来表示;
例如: 08:00:27:03:fb:19MAC地址和网卡相关,由网卡厂商在生产网卡时就给该网卡绑定了一个唯一的MAC地址,一般不可修改
端口
- 作用:在一台机器上,一个端口唯一标识一个进程,
当网络数据到达网络协议栈后进行分用时,通过端口确定当前网络协议栈接收的网络数据是属于哪个进程的- 本质:是一个2字节的16位无符号整数,范围是0~65535
- 注意:一个端口只能被一个进程所绑定,一个进程可以绑定多个端口
IP+端口就可以在网络当中唯一定位一台主机当中的进程;
IP是确定网络中的哪一台主机,端口确定主机上的哪个进程;
网络数据必须存在IP和端口
知名端口:0~1024,这个范围内的端口已经被一些知名的协议或者程序使用了
如
HTTP协议用的80号端口
HTTPS协议用的443号端口
ssh协议用的22号端口
局域网通信原理
以太网是局域网的通信标准
- 每一台主机要有唯一的标识,也就是主机对应的mac地址
- 碰撞域:任何一台主机在任何时候都可以发消息,
这种局域网的信息会发生干扰,无法准确收到消息 - 每一台主机要识别碰撞,遇见有消息传递就暂时不发送,等这个消息发送完毕后再发自己的
使用同一个以太网通信,等于多个进程访问同一临界资源
下一站去哪里,由最终目的地决定的
MAC是局域网中标识主机的
IP是广域网中标识主机的
数据包在添加报头时,要考虑未来解包的时候,将自己的有效载荷交付给上层的哪一个协议,这个靠一个字段决定的
报头的封装和解析也是通过字段决定