一、网络概述
1.网络的特点
1.1电路交换网
电路交换网是早期的网络通信方式,在通信双方或多方之间,通过电路交换建立电路连接的网络,这种网络连接需要经历:建立连接、使用连接、断开连接三步,此过程中,物理通路都被通信双方独占,只有与当前连接断开,才能和其它连接。
但计算机数据是突发式的,就像我们微信聊天,可能码字需要十几秒,但发送数据就是那么一瞬间。早期的网络相当于我们在码字的过程中,通信双方都不能与其它人收发数据,显然这个网络结构不适合传输计算机数据。
1.2计算机网络
- 计算机网络的要求:
- 结构简单,可靠的传输数据;
- 能够连接不同种类的计算机,即独立于计算机之外的,不管何种设备,都可以遵循固定的格式访问网络;
- 所有网络节点同等重要,即网络由多节点相互交叉连接成网状结构,一个节点损坏,不影响其它网络连接。网络节点的核心部件是:路由器和交换机;
- 必须有冗余的路由,路由即网络路径。
2.分组交换
- 分组:因为网络一次传输的数据是有限制的,当我们传输较大的数据的时候,没法将其一次性全部传输。因此,将数据拆分成若干等分(注意:不同的分组系统,等份长度不一样)。每一个分组都必须包含首部,首部又包含了源地址和目的地址,因为需要知道发给谁,对方也需要知道谁发的;同时首部还包含了编号,是数据重组的必要信息,因为我们将数据分割若干等份发送,各个分组独立传输,因为路由不同,网络路况不同,对方收到的数据顺序可能是混乱的,因此需要编号确定其在文件中的哪一段,方便重组数据。
- 交换:
如上面的网络分布图,数据从 F 传到 G 的过程中,要经历几个节点,数据每到达一个节点,节点都会先将数据存储下来,检查其首部的目的地址信息,然后挑选合适的节点转发出去。
其特点:
- 以分组作为传输单位,即每个分组都是独立传输的;
- 独立的选择转发路由,从一台设备到另外一台设备,路径不止一条;
- 逐段占用,动态分配传输带宽,一台主机到另外一台主机会经历很多节点,两个节点间就是一段,只会占用当前所在段,路由上的其它段会被让出来给其它数据传输。
二、TCP/IP 简介
1.网络分层结构
1.1网络七层模型
七层模型:OSI/RM 开放互联模型,它是一种理论模型,是网络通信模型的标准,所有的协议的设计都要参考七层模型,下图左侧:
- 每层介绍(由下到上):
- 物理层:负责的是通信接口的标准,并不是实实在在的物理设备,可以理解为用于连接物理设备如:网卡的接口标准,接口电流强弱等;
- 数据链路层:负责帧数据的收发,最小的能在网络上独立传输的数据称为帧数据。这一层主要是网卡地址(mac 地址),是物理地址,交换机核心层。设备和设备通信(网卡和网卡的通信);
- 网络层:负责 IP 报文的收发,IP 地址是虚拟地址。路由器核心层,主要负责局域网的划分。主机和主机的通信(IP 地址和 IP 地址的通信)。
- 传输层:负责端口报文的收发,端口描述的是同一主机的不同进程,如:是发给电脑上的 qq 还是微信;
- 会话层:负责判断数据的通信状态,即目的主机是否可达,通过哪条链路转发出去;
- 表示层:将计算机能识别的二进制转换成用户能识别的数据;
- 应用层:具体的应用层协议,如微信应用有自己的应用层协议,微信数据该怎样拆包组包。
1.2 网络四层模型
四层模型:TCP/IP 协议,事实上的标准,上图的右侧:
-
各层介绍:
- 链路层:负责帧数据的收发,设备和设备(网卡和网卡的通信);
- 网络层:负责 IP 报文的收发,主机和主机(IP 和 IP 的通信);
- 传输层:负责端口报文的收发,进程和进程(端口和端口的通信);
- 应用层:具体的应用层协议。
-
四层模型,每层又包含不同协议,不同分支,见下图:
- 应用层协议:FTP 协议:文件传输协议、Telnet:远程登录协议、TFTP 简单文件传送协议、NFS:网络文件系统;
- 传输层协议:TCP:传输控制协议、UDP:用户数据报文协议;
- 网络层协议:IP:网际协议、ICMP :网络控制报文协议、IGMP :网络组管理协议;
- 链路层:ARP:地址解析协议,通过 IP 地址找网卡地址的协议、RARP:逆地址解析协议,通过 mac 地址找 IP 地址的协议。
- 数据在传输的过程中,是从一个主机的应用层开始一层层组包:
数据(应用层)+端口号(传输层)+IP(网络层)+MAC地址(链路层) // 组成一个帧数据,在链路层发出
收到数据以后再从链路层到应用层一层层解包,每一层只看当前这一层相关的数据,如果发现目的是自己,就将数据传到下一层继续解包,否则直接丢弃。
2.几种常用协议
2.1IP 网际协议
指为实现在一个相互连接的网络系统,从源地址到目的地传输数据包所提供必要功能的协议。
- 特征:
- 此协议并不可靠,它不能保证 IP 数据包能成功到达发送的目的地,只是提供传输所需的服务;
- 面向无连接:IP 并不维护任何关于后续数据包的状态信息,每个数据包的处理是相互独立的;
- IP 数据包可以不按发送顺序接收,因为每个数据有编号,IP 数据包中含有发送它的主机 IP 地址(源地址)和接收它的主机 IP 地址(目的地址)。
2.2 TCP 传输控制协议
TCP 传输控制协议:是面向连接的协议,包括:建立连接—使用连接----释放连接(虚拟连接),数据包中有序号和确认序号,具有排序检错、失败重传的功能,能保证数据传输的可靠性。一般用于大文件传输,如 HTTP、FTP、SMTP 都是基于 TCP 协议的。
2.3 UDP 用户数据报协议
UDP 用户数据报文协议:是面向无连接的协议,没有序号和确认序号,不排序、不检错、不失败重传,不具备数据传输的可靠性,但传输快,适合简单的应答服务。如 NFS、NTP、DNS 都是基于 UDP 协议的。
三、网络通信中的地址详解
1.MAC 地址
MAC地址,即物理网卡的地址,用于标识网络设备,类似于网卡的身份证号,且理论上全球唯一。
组成:以太网内的 MAC 地址是一个 48bit ,即 6 字节,高24位是厂商ID,低24位是设备ID。
可以通过命令ifconfig
查看当前 Linux 设备的网络配置,包含各种 IP 地址,MAC 地址,子网掩码等信息,win 系统通过 cmd 命令ipconfig
查看。
2.IP 地址
这里 IP 地址介绍 IPV4 协议的地址结构。
2.1 IP 地址的结构
- IPv4 地址由 32 位(4 字节)组成:包括网络 ID 和主机 ID;
- 网络 ID:标记主机在哪个网段,是 IP 地址中由子网掩码中 1 覆盖的连续位;
- 主机 ID:标记在某个网段的具体哪个位置,是 IP 地址中由子网掩码中 0 覆盖的连续位。
IP: 192.168.1.5
子网掩码:255.255.255.0 == 1111 1111 1111 1111 1111 1111 0000 0000
1 覆盖的连续点位是:高24位,0 覆盖的连续点位是低8位。
因此网络ID是192.168.1, 主机ID是5。
- IP 地址的特点:
- 子网 ID 不同的网络(即不同网段)不能直接通信,如果要通信则需要通过路由器转发;
- 主机 ID 全为 0 的 IP 地址表示网段地址.;
- 主机 ID 全为 1 的 IP 地址表示该网段的广播地址。
如:192.168.1.5/24 的网段地址为:192.168.1.0,广播地址为:192.168.1.255。
2.2 IPV4 地址分类
- A 类地址:默认 8bit 子网 ID,第一位为 0
子网掩码:255.0.0.0
IP 地址范围:0xxx xxxx.0000 0000.0000 0000.0000 0000~0xxx xxxx.1111 1111.1111 1111.1111
1111 广域网(国家---国家)
- B 类地址:默认 16bit 子网 ID,前两位为 10
子网掩码:255.255.0.0
IP 地址范围:10xx xxxx.xxxx xxxx.0000 0000.0000 0000~10xx xxxx.xxxx xxxx.1111 1111.1111
1111 城域网(城市---城市)
- C 类地址:默认 24bit 子网 ID,前三位为 110
子网掩码:255.255.255.0
IP 地址范围:110x xxxx.xxxx xxxx.xxxx xxxx.0000 0000~110x xxxx.xxxx xxxx.xxxx xxxx.1111 1111
局域网
-
D 类地址:前四位为 1110,多播地址;
-
E 类地址: 前五位为 11110,保留为今后使用。
其中最常用的是 A B C 三类地址。
- IP 地址又分公有 IP 和私有 IP:
- 公有IP:可以直接连接到互联网,访问互联网资源;
- 私有IP:只能在当前局域网使用。
类型 | 私有 IP 地址范围 |
---|---|
A类地址 | 10.0.0.1 ~ 10.255.255.254 |
B类地址 | 172.16.0.1 ~ 172.31.255.254 |
C类地址 | 192.168.0.1 ~ 192.168.255.254 |
- 回环IP:通常 127.0.0.1 称为回环地址,主要是测试本机的网络配置,即本机是否配置网卡,是否具备上网功能,能 ping 通127.0.0.1 说明本机的网卡和 IP 协议安装都没有问题。127.0.0.1~127.255.255.254 中的任何地址都将回环到本地主机中,不属于任何一个有类别地址,它代表设备的本地虚拟接口。
3.子网掩码
3.1子网掩码特征
子网掩码(subnet mask)又叫网络掩码或地址掩码,是一个 32bit (4字节)由 1 和 0 组成的数值,并且注意 1 和 0 必须分别连续。
如案例:案例 1:以下不合法的子网掩码是:D
A:255.255.255.0 B:255.255.255.128 C:255.255.128.0 D:255.128.255.0
解析:
A:1111 1111 1111 1111 1111 1111 0000 0000
B:1111 1111 1111 1111 1111 1111 1000 0000
C:1111 1111 1111 1111 1000 0000 0000 0000
D:1111 1111 1000 0000 1111 1111 0000 0000
上面转化为二进制后可以看到,A B C 的1和0都是分别连续的,而 D 1中穿插着0
- 子网掩码的特征:
- 用于指明 IP 地址中哪些位标识的是网络号,以及哪些位标识的是主机号;
- 必须结合 IP 地址一起使用,单独存在无意义;
- IP 地址中由子网掩码中 1 覆盖的连续位为子网 ID,其余0覆盖的连续位为主机 ID。
- 其表现形式有两种
192.168.1.5/255.255.255.0
192.168.1.5/24 // 24代表 1 连续位有24位
3.2通过掩码划分子网
划分子网:就是牺牲主机位,将局域网再划分成几个子网。
192.168.1.0000 0000
牺牲一位主机位,得:
192.168.1.0000 0000 和 .1000 0000 两个子网
牺牲两位主机位,得:
192.168.1.0000 0000 和 .0100 0000 和 .1000 0000 和 .1100 0000 四个子网
因此,根据规律,牺牲三位主机位,就能划分出:
000 001 010 011 100 101 110 111 8个 = 2^3 个子网
因此要划分的主机位数n:2^n >= 子网
- 这里以划分4个子网为例,需要牺牲2位主机位:
此时的子网掩码为:255.255.255.1100 0000 == 255.255.255.192
第一子网:
192.168.1.0000 0000 ~ 192.168.1.0011 1111
192.168.1.0 ~ 192.168.1.63/26
第二子网:
192.168.1.0100 0000 ~ 192.168.1.0111 1111
192.168.1.64 ~ 192.168.1.127/26
第三子网:
192.168.1.1000 0000 ~ 192.168.1.1011 1111
192.168.1.128 ~ 192.168.1.191/26
第四子网:
192.168.1.1100 0000 ~ 192.168.1.1111 1111
192.168.1.192 ~ 192.168.1.255/26
- 案例:将 192.168.1.0/24 划分成 10 个子网,正确的掩码是:
划分10个子网需要 2^4 >= 10,牺牲4位主机位
掩码为:192.168.1.1111 0000 = 192.168.1.240
4.端口
4.1端口概述
端口是传输层的概念,用于区分主机的不同进程,即具体到应用层的哪一个软件,是发的微信消息还是QQ消息。
- 端口的特点:
- 对于同一个端口,在不同主机中对应着不同的进程;
- 对于同一个主机,一个端口只能被一个进程拥有;
- 一个进程拥有一个端口后,传输层送到该端口的数据全部被该进程接收,同样,进程送交传输层的数据也通过该端口被送出;
- 多个端口可以对应一个进程。
4.2端口号
类似于前面多任务编程中的 pid 标识一个进程,在网络程序中,用端口号(port)来标识一个运行的网络程序。
-
特点
- 端口号是无符号短整型(unsigned short),范围 0 ~ 65535;
- 每个端口都拥有一个端口号;
- TCP、UDP 维护各自独立的端口号,即使同一个主机,UDP通信的进程和TCP通信的进程的端口号可以一样;
- 网络应用程序,至少要占用一个端口号,也可以占有多个端口号。
-
端口号分类
- 知名端口:由互联网数字分配机构(IANA)根据用户需要进行统一分配,例如:FTP—21,HTTP—80 等,范围:0~1023;
- 动态端口:应用程序通常使用的范围,注意端口号类似于进程号,同一时刻只能标志一个进程,可以重复使用,前提是当前进程退出,这个进程号才能给其它进程用,范围:1024~65535。
四、网络应用程序开发流程
1.C/S 架构
C/S 架构即 Client 客户端 / Srever 服务器架构。
1.1面向无连接
面向无连接是一种邮件抽象模型,基于 UDP 编程,因此其特征也和 UDP 编程类似:
- 邮件系统服务模式的抽象,即只管发送,不管对方有没有收到数据;
- 每个分组都携带完整的目的地址;
- 不能保证分组的先后顺序,各分组独立传输,不是先发的就先收到;
- 不进行分组出错的恢复和数据重传,不能保证数据传输的可靠性;
1.2面向连接
面向连接是一种电话抽象模型,基于 TCP 编程,因此其特征也和 TCP 编程类似:每一次完整的数据传输都要经过:建立连接、使用连接、断开连接三个过程。本质上,TCP 连接相当于一个管道,不但收发数据顺序一致,先发的先收到,而且内容相同,保证数据传输的可靠性。
TCP 面向连接的网络通信,之所以数据传输稳定,就是在于建立通信过程要经过复杂的三次握手和四次挥手,以及它每一次传输数据都会收到一个应答信号,来保证连接和传输的可靠性,而且连接一旦建立,相当于开辟了一条独立的路径让他们持续通信,就像打电话一样,两个人打电话的时候,是不能再和第三个人打电话的,除非挂断。这个后面会有具体章节讲解。
1.3客户端和服务器
在 C/S 架构中,一般在通信过程中往往都是 client 先发送请求,server 等待请求然后进行服务。
作为服务器,一般要固定其 IP 和端口,方便用户访问,不然,每次用户要访问服务器的时候,都要去查服务器的 IP 和端口是多少,这显然是不科学的;
作为客户端,我们平时使用过程中,一般 IP 就是本机 IP ,是电脑开机以后 DHCP 服务器自动分配的 IP ,通过应用程序发送数据的时候,端口也是随机分配的。
客户端知道服务器的 IP 和端口,主动去向服务器发送请求,服务器再收到请求以后拆包数据报文,也就能知道客户端的 IP 和端口了。但一个服务器往往不止服务一个客户端,因此一个端口是肯定不够的,服务器就会通过一个固定的端口监听客户端的连接请求,连接成功就会分配一个随机的临时端口为当前连接的这个客户端服务,具体的过程后面章节讲解。
2.B/S 架构
B/S 架构即 Browser 浏览器 / Server 服务器架构。使用的是基于 TCP 的 HTTP 协议,用于网络服务器开发,即网页开发。
目前不需要掌握,后面会有具体章节讲解,这里就先认识有这样一种架构即可。