局域网
局域网 (Local Area Network),简称 LAN
局域网是一种本地网络,是局部组建的一种私有网络。
局域网内的主机可以进行网络通信,又称为内网。
局域网与局域网之间如果没有连接,就不能通信。
局域网组建网络的方式:
- 主机之间通过网线直接连接
- 通过集线器将多台主机连接
- 通过交换机连接
- 通过交换机和路由器连接
广域网
广域网 (Wide Area Network),简称WAN
广域网, 就是物理意义上范围很大的网络, 是很多个局域网通过路由器连接起来形成的。
IP地址
IP地址就是用来标识一台主机在网络中的位置。
IP地址是一个32位的二进制数,4个字节,通过三个点隔开。
IP地址通常用点分十进制来表示,将每个字节转为10进制。
例如: 11000000.10101000.00000101.00000110
用点分十进制表示: 192.168.5.6
端口号
IP地址用于标识主机的网络地址,端口号用来定位一台主机中的进程。
网络通信就和发快递一样,IP地址就是收获地址,端口号相当于收货人。
端口号是0~65545范围的整数
一个端口号只能被一个进程绑定,但一个进程可以绑定多个端口号
网络通信基础
网络协议
网络协议,简称协议, 协议通俗的说就是约定。
在网络通信中, 网络传输经过的网络设备都必须共同遵守一组约定,如怎样建立连接,如何互相识别,只有遵守这个约定, 计算机之间才能进行网络通信。
网络通信是通过网线/光纤/无线来传输的数据的,传输媒介是电信号和光信号,通过电信号的强弱(高低电平)、光信号的频率来表示二进制的 0 和 1。
遵守了网络协议,通信双方才知道对方传输的二进制数据是什么意思。
协议最终体现为在网络上传输的数据包的格式 。
协议分层
协议分层的作用
网络通信,需要遵守的协议非常复杂。协议复杂了我们维护的成本就很高。
所以将一个复杂的协议进行了拆分,拆分成多个小的协议,这些小的协议里,有的功能和定位是类似的。
再将这些类似的协议进行分类。同时针对这些不同的类别进行分层。
分层后约定了层级和层级之间的调用关系:要求上层协议调用下层协议, 下层协议提供支持,不能跨层调用。
协议分层的好处:
- 层次之间耦合程度比较低,上层协议不必了解下层如何实现的,下层也不必了解上层的细节。
- 方便对某一层协议进行替换。
OSI 七层网络模型
这个模型既复杂又不实用,没有真正的落地,实现,是仅仅存在于教科书上的模型。
实际组建网络时,是用下面的 TCP/IP 来实现的,只包括了七层模型中的部分分层。
TCP/IP 五层网络模型
由于很多时候物理层考虑的比较少,所以也称为 TCP/IP 四层模型。
-
应用层: 应用程序之间的沟通,数据传输过来,如何使用。
-
传输层: 两台主机之间的数据传输,不考虑中间路径,只关注起点和终点。
-
网络层: 地址管理和路由选择,主要负责网络中两个节点之间的路径规划。
-
数据链路层: 主要关注两个相邻节点之间的数据传输。
-
物理层: 网络通信的基础设施,无线、光纤、网络接口。
网络编程,就是主要针对应用层,传输层被应用层所调用,所以也与传输层有一定的接触。
封装和分用
封装: 发送方发送数据,要把数据从上到下,依次交给对应层的协议,进行封装数据。
分用: 接收方接收数据,要把数据从下到上,依次交给对应层的协议,进行解析数据。
举一个例子简单说明一下封装和分用的过程:A用QQ给B发了一条消息
封装:
-
应用层
应用层进行封装,封装成应用数据包。
QQ具体是如何封装我们是不知道的,这里我们假设是这样的格式。
然后应用层调用传输层的 api ,让传输层处理这个数据。
-
传输层
传输层有很多协议,最典型的是 UDP 和 TCP,这里以 UDP 为例。
UDP 对应用数据包进行封装,将整个应用数据包作为载荷,添加 UDP 数据报头。
然后传输层将处理好的数据给网络层。
-
网络层
网络层最常见的协议,IP 协议,将整个 UDP 数据报作为载荷,添加 IP 协议报头
然后将数据交给数据链路层。
-
数据链路层
数据链路层最典型的协议,以太网协议。
将 IP数据报作为载荷,添加以太网帧头和帧尾,封装成以太网数据帧。
mac 地址, 也叫做物理地址,于 IP 相似,也是描述一个主机在网络上的位置,当是用处不一样。
IP 用于在物理层的路径规划,mac 用于描述数据链路层中,两个即将传输的相邻节点的地址。
mac 地址和网卡绑定,每个设备都有一个唯一的 mac 地址(理论上)。
-
物理层
最后物理层将上述二进制数据,通过光信号/电信号/电磁波信号,进行数据传输。
分用: 分用的过程就是封装的逆过程,这里就不赘述了。
两台主机之间的网络通信流程
两台主机进行网络通信,数据传输过程从中会经过很多节点进行转发。
数据传输过程中可能经过交换机,路由器等网络设备。
主机
主机会将数据包从应用层封装到物理层,然后传输给下一个交换机或路由器。
交换机
先将数据包从物理层分用到数据链路层,查看一下 mac 地址是否正确。
然后再将这个数据包封装到物理层,进行转发。
重新封装后 源mac 和 目的 mac 就变了。
路由器
路由器收到数据,会将数据从物理层分用到网络层。
会根据目的 IP 进行下一个阶段的路径规划。
然后再将数据包从网络层封装到物理层,进行转发。
通常来说交换机是进行 ”二层转发“,路由器进行 ”三次转发“,但是实际上,随着技术的不断发展,这两个设备之间界限越来越小,出现了很多三层交换机,四层交换机,四层路由器。