在了解网络编程之前,我们要先对网络有一个大体的概念.
组件网络设计的重要设备
集线器(比较古老,现在很少见到),交换机(组件局域网,不能跨局域网),路由器(连接两个局域网),
现在,带有路由功能(三层转发)交换机也是很常见的,交换机和路由器之间的界限,越来越模糊.
传输信号的介质
电信号(网线):低电平表示1,高电平表示0
光信号(光纤,电磁波):高频光表示1,低频光表示0
网络中的关键概念
IP地址:标识了网络上设备所在的位置2
端口号:标识了一个具体的应用程序
协议:网络通信中最为核心的概念,协议就是通信双方的一种约定,发送方约定好了数据是以怎样的形式发送的,接收方就按照固定的格式来解析.(双方能互相理解对方的含义)
协议分层
网络通信,是一个比较复杂的事情,需求场景复杂,实现功能也复杂.
如果协议,太复杂了,那么学习成本,使用成本,理解成本,维护成本都会非常高.
因此,我们实际采取的做法,是针对复杂的大协议,拆分成若干个相对简单的小协议.
随着协议拆分成一些小的协议(每个协议负责一部分功能),此时我们发现,某些协议之间,起到的功能和作用是类似的,那我们就针对这些小的协议,在进行"分类"("分层"),把这些功能差不多的协议,分到同一层里,使用的时候,可以灵活的进行替换.
协议分层的好处:
1.降低了学习和维护的成本
2.可以灵活的针对这里的某一层协议进行替换
当前互联网世界,协议分层有两种风格:
OSI 七层网络模型
OSI 七层模型既复杂又不实用,所以OSI七层模型没有落地实现.
TCP/IP 五层模型
实际组件网络的时候,是以OSI七层模型的部分分层来实现,也就是TCP/IP 五层模型来实现.
应用层:负责应用程序间的沟通,我们的网络编程主要针对应用层.
传输层:负责两台主机之间的数据传输,只关心起点和终点,端到端的传输.
网络层:负责地址管理和路由选择.(路径的规划,走哪条路比较划算)
数据链路层:负责设备之间的数据帧的传送和识别.(负责相邻的两个节点之间,具体是怎么传输的,是通过网线传输,还是无线信号传输等等)
物理层:负责光/电信号的传递方式.(约定了网络通信中基础的硬件设备是什么样子的,像我们使用的网线,网口等设备都是相同规格的).
这五层,有时候也叫做"四层",四层就是去掉了物理层,物理层在我们开发中考虑比较少,属于是纯硬件的,所以很多时候也叫做TCP/IP 四层模型.
网络设备所在分层
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,TCP/IP 五层模型的下四层.
对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP 五层模型的下三层.
对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP 五层模型的下两层.
对于集线器,它只实现了物理层.
随着网络设备技术的发展,也出现了3层/4层 交换机,4层路由器.
整个网络协议中,协议分成了很多层,上层协议要调用下层协议(上层协议把数据交给下层,层层加码,封装),下层协议要给上层协议提供支持(下层协议解析好数据,交给上层,分用).
这里的几层协议之间是有明确的层级关系的,只有相邻的两层之间才能进行交互.(不能跨层交互).