一 、 网络互联
将多台计算机连接在一起,完成数据共享,
数据共享本质是网络数据传输,
即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
1. 局域网LAN
即 Local Area Network,简称LAN,
局域网是本地,局部组建的一种私有网络。
局域网内的主机之间能方便的进行网络通信,又称为内网;
局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式:
基于网线直连
基于集线器组建
基于交换机组建
基于交换机和路由器组建
2. 广域网
通过路由器,将多个局域网连接起来,
在物理上组成很大范围的网络,就形成了广域网。
广域网内部的局域网都属于其子网。
三 、 网络设备及相关技术
1. 集线器:转发所有端口
集线器是工作在物理层的网络设备,
发送到集线器的任何数据,
都只是简单的将数据复制并转发到其他所有端口。(端口指集线器后边的物理端口)。
2. 交换机:MAC地址转换表+转发对应端口
交换机工作在数据链路层,
交换机内部会记录并维护一张MAC地址转换表:
1. MAC地址转换表主要记录MAC地址与端口之间的映射。(端口指交换机后边的物理端口)
2. 主机连接到交换机,及主机发送数据的时候,
交换机可以学习并记录该主机MAC地址与端口信息。
3. 交换机接收到数据报以后,
在MAC地址转换表中,
通过目的MAC查找到对应的端口,则目的主为该端口相连接的主机。
只需要将数据报转发到对应端口上即可。
4. 以上是使用MAC地址转换表,
通过目的MAC能找到对应端口的情况;
如果找不到,交换机设置数 据报目的MAC为广播地址FF:FF:FF:FF:FF:FF,发送到其他所有端口,
目的主机返回响应后,交换再记录该主机MAC与端口的映射信息。
3. 主机 :网络分层从上到下封装
发送数据报时,发送端主机都需要先根据网络分层从上到下封装:
源IP与目的IP标识整个路途的起点和终点。
源MAC与目的MAC标识了每一跳的起点和终点。
此时,需要根据发送端主机(源主机)与接收端主机(目的主机)是否在同一网段,来设置下一跳设备:
- 源主机和目的主机在同一个网段时,下一跳设备就是目的主机;
- 发送端主机和接收端主机在不同网段时,
发送端主机是无法知道目的主机在哪,
此时会设置下一跳设备为网关设备。
网关,我们这里可以简单理解为,不同网段的网络互连时,需要使用网关设备。
通常的网关设备是路由器,可以划分公网和局域网(内网),同时还可以把局域网划分为多
个子网(不同网段)。
以上两种情况,下一跳设备IP地址都可以获取到,但该设备的MAC地址(即目的MAC)可能不知道,就需要使用以下ARP寻址
4. 主机&路由器:
ARP缓存表+ARP寻址,
首先,ARP是一个介于数据链路层和网络层之间的协议;
ARP协议建立了IP地址与MAC地址的映射关系。
在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址:
(1)主机和路由器中都保存了一张ARP缓存表:通过IP地址可以找到对应的MAC地址。
(2)根据下一跳设备的IP地址,在ARP缓存表中能找到对应的MAC地址,则可以设置目的MAC并发送数据报。
(3)如果找不到,则发送ARP广播数据报:目的MAC为广播地址,询问下一跳设备的MAC地址。
这个过程类似于QQ群喊话:张三(下一跳设备IP地址),我要给你发快递(发送数据报),请告诉我你的收货地址(MAC地址)。
5.路由器:路由+NAPT
路由器主要有两个作用。
-
网关
路由器作为网关,可以划分公网和局域网,
某些路由器还可以将局域网划分为多个子网。家庭用的路由器不能划分局域网子网,企业级专业路由器才能划分。
路由器作为网关:
- 划分局域网多个子网时,可以直接通过ARP寻址找到局域网任意主机。(这里的局域网就是路由器
下的多个子网组成的局域网)。 - 划分公网和局域网时,局域网内主机发送数据报到公网主机时,需要基于NAPT协议,将局域网主
机的IP地址和端口号,转换为路由器公网IP和端口号(指路由器中运行的程序的端口)。
局域网IP+端口需要转换为公网IP+端口,原因是接收端返回的响应数据报,目的IP和目的端
口无法使用局域网IP和端口。
2. 路由
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。
6. 冲突域
所谓的冲突,类似两个人(主机)在一个房间(网络范围)同时说话,
导致房间内其他人无法听清讲话的内容,
即产生了冲突。
冲突域中的网络通信,要解决冲突,
就得按时间顺序来发送多个数据报:
同一时刻,网络设备只能接收并转发一个数据报,
多余的会丢弃,让发送端主机重新发送。
主机之间通过网络设备(集线器、交换机)的物理端口、网线相连时,
两个主机在同一时刻同时发送数据报,
如果存在冲突,则该网络范围为一个冲突域(Collision Domain)。
冲突域是基于第一层物理层,又称为碰撞域。
-
集线器接收到数据报后,是将数据报简单的复制、转发到其他所有端口,
如果有两个数据报要同时转发,就会出现冲突。
整个集线器,即集线器的所有端口为一个冲突域。
-
交换机接收到数据报后,是将数据报转发到对应的一个端口:
两个数据报同时转发到不同端口不存在冲突,但同时转发到一个端口就出现冲突。
即交换机可以分割冲突域,分割后,一个端口为一个
冲突域。
7. 广播域
-
广播是指某个网络中的主机同时向网络中其它所有主机发送数据(IP、MAC地址设置为广播地址),
这个数据所能传播到的范围即为广播域(Broadcast Domain)。
广播域基于第二层数据链路层。-
集线器接收到广播数据报,仍是简单的复制、转发到其他所有端口,
所以集线器的所有端口为一个广播域。 -
交换机接收到广播数据报,会转发到其他所有端口;而路由器可以隔离广播域。
路由器某个LAN口网卡接收到广播数据报,
如果发现是同网段,则丢弃,
即广播数据不会扩散到路由器以外。
-
四 、 网络通信的基础
1. IP地址
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。
简单说,IP地址用于定位主机的网络地址。
- 格式:
IP地址是一个32位的二进制数,
通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。
如:100.4.5.6。
特殊IP:
127.*的IP地址用于本机环回(loop back)测试,通常是 127.0.0.1。
2. 端口号:
端口号用于标识定位主机中发送数据、接收数据的进程。
-
格式:
端口号是0~65535范围的数字,在网络通信中,
进程可以通过绑定一个端口号,来发送及接收网络数据。一个进程启动后,系统会随机分配一个端口(启动端口)程序代码中,
进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。进程绑定一个端口号后,
fork一个子进程,可以实现多个进程绑定一个端口号,
但不同的进程不能绑定同一个端口号。
3. 协议
协议,网络协议的简称,
网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。
如怎么样建立连接、怎么样互相识别等。
只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式。
-
协议三要素:
- 语法:
即数据与控制信息的结构或格式; - 语义:
即需要发出何种控制信息,完成何种动作以及做出何种响应 - 时序:
即事件实现顺序的详细说明。
- 语法:
-
知名协议默认端口:
系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,
这些端口预留给服务端程序绑定广泛使用的应用层协议。22端口:
预留给SSH服务器绑定SSH协议
21端口:
预留给FTP服务器绑定FTP协议
23端口:
预留给Telnet服务器绑定Telnet协议
80端口:
预留给HTTP服务器绑定HTTP协议
443端口:
预留给HTTPS服务器绑定HTTPS协议
以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,
但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。
4. 五元组
在TCP/IP协议中,用五元组来标识一个网络通信。
-
源IP:
标识源主机 -
源端口号:
标识源主机中该次通信发送数据的进程 -
目的IP:
标识目的主机 -
目的端口号:
标识目的主机中该次通信接收数据的进程 -
协议号:
标识发送进程和接收进程双方约定的数据格式
五元组在网络通信中的作用,类似于发送快递:
可以在cmd中,输入 netstat -ano 查看网络数据传输中的五元组信息。
5. 协议分层
对于网络协议来说,往往分成几个层次进行定义。
分层最大的好处,类似于面向接口编程:
定义好两层间的接口规范,让双方遵循这个规范来对接。
-
OSI七层参考模型
即Open System Interconnection,开放系统互连。是一个逻辑上的定义和规范,把网络从逻辑上分为了7层。
是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。
通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,
也即是以下 TCP/IP 五层(或四层)模型来实现。 -
TCP/IP 五层(或四层)模型
TCP/IP是一组协议的代名词,
它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层 的层级结构,
每一层都呼叫它的下一层所提供的网络来完成自己的需求。
-
应用层:
负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。应用层是应用程序实现。
我们的网络编程主要就是针对应用层。
-
传输层:
负责两台主机之间的数据传输。
如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。传输层和网络层由操作系统内核实现。
-
网络层:
负责地址管理和路由选择。
例如在IP协议中,通过IP地址来标识一台主机,
并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。
路由器(Router)工作在网路层。 -
数据链路层:
负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。
有以太网、令牌环网,无线LAN等标准。
交换机(Switch)工作在数据链路层。
数据链路层通过硬件和驱动程序实现。
-
物理层:
负责光/电信号的传递方式。
比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。
集线器(Hub)工作在物理层。
物理层通过硬件和驱动程序实现。
物理层考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。
-
-
网络设备所在分层
-
一台主机,它的操作系统内核实现了从传输层到物理层的内容,
也即是TCP/IP五层模型的下四层; -
一台路由器,它实现了从网络层到物理层,
也即是TCP/IP五层模型的下三层; -
对于一台交换机,它实现了从数据链路层到物理层,
也即是TCP/IP五层模型的下两层;(注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。
我们以下说的网络设备都是传统意义上的交换机和路由器) -
集线器,它只实现了物理层;
-
-
网络分层对应
网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。
以下为同一个网段内的两台主机进行文件传输:
以下为跨网段的主机的文件传输:
数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
6. 封装和分用
不同的协议层对数据包有不同的称谓,
在传输层叫做段(segment),
在网络层叫做数据报 (datagram),
在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,
每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,
到达目的主机后每层协议再剥掉相应的首部,
根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
- 数据封装:
- 数据分用: