1. 网络分类
根据覆盖范围可以分为个域网、局域网、城域网、广域网
(1)个域网:10m的半径内,进行短距离通信,如蓝牙
(2)局域网:覆盖一个房间几台电脑 或 公司的一栋楼,如公司内网
(3)城域网:一个城市或几个城市之间,如宽带
(4)广域网:范围超大,如移动通信网络、卫星网络
2. 网络核心功能
网络的核心功能是:路由和转发
(1)路由:确定数据分组从源到目标所使用的路径(全局操作)
当数据包进入网络设备,设备会读取数据包的目的 IP 地址,根据这个 IP 地址和路由表,就能决定应该把数据包发送到哪里,这个过程就是路由
(2)转发:路由器或交换机将接收到的数据分组转发出去(本机操作)
利用了 MAC 地址,设备将数据包发送到目标设备
3. 网络模型
3.1 OSI 七层模型
OSI 模型是国际标准化组织 ISO 提出的概念模型,从下至上依次为:
(1)物理层:单位是比特,在设备之间透明传输比特流
- 将数据转化成 0 和 1
(2)数据链路层:单位是帧,实现相邻节点之间的传输,保持数据正确顺序和完整性
- 规定了 0 和 1 的分包形状,确定了网络数据包的形状
(3)网络层:单位是数据报,控制报文通过网络的路由选择 ,实现主机与主机的通信
- 需要确定计算机的位置,IPv4、IPv6来确定
(4)传输层:单位是报文段(TCP)或用户数据报(UDP),为端到端提供可靠安全的服务
- 每一个应用程序会在网卡注册一个端口号,该层就是端口与端口的通信
(5)会话层:建立和维持会话,保持会话同步
(6)表示层:解决不同系统之间的通信问题
- eg:Linux 下的 QQ 和 Windows 下的 QQ 可以通信
(7)应用层:提供网络服务的接口
OSI 七层模型是正统意义上的国际标准,但实现过于复杂,因而 TCP/IP 模型被广泛使用,这才是事实上的国际标准
3.2 TCP/IP 四层模型
互联网协议套件 IPS 最核心的两个协议是 TCP 和 IP,因而也被称为 TCP/IP 协议族,它具有四层网络结构,从下至上依次:
(1)网络接口层:确定网络数据包的形状
- 物理层、数据链路层
(2)网络层
(3)传输层
(4)应用层
- 会话层、表示层、应用层
3.3 五层模型
TCP/IP 四层模型没有给出网络接口层的具体内容,因此在学习和开发中,通常将网络接口层替换为 OSI 七层模型中的数据链路层和物理层来进行理解
4. 网络常见协议
4.1 应用层
DNS :实现域名到 IP 地址的映射,DNS 缓存能够加快网络资源的访问
DNS 域名解析分两种方式:
(1)迭代查询
客户端发送 DNS 请求给根域名服务器后,没找到就依次向上顶级域名、二级域名不断查找,直到解析出 IP 地址,这个过程是需要客户端不断向域名服务器发送请求的
(2)递归查询
客户端发送 DNS 请求给根域名服务器后就不用管了,根域名会把请求不断向上发送,直到解析出 IP 地址后,根域名就把 IP 地址发送给客户端
HTTP:超文本传输协议,明文传输,默认端口号 80
HTTPS:超文本传输安全协议,在 HTTP 基础上使用 SSL/TLS 来加密报文,默认端口号 443
WebSocket:基于 TCP 的全双工通信协议
FTP:文件传输协议
电子邮件发送、接收过程:用户代理用 SMTP 协议向邮件服务器发送邮件,邮件服务器之间发送邮件也是用 SMTP,最后用户用 POP3 协议从邮件服务器读取邮件
4.2 传输层
4.2.1 TCP
TCP 是面向连接的、可靠的、基于字节流 的传输协议,全双工模式
TCP 主要特点有:慢启动、拥塞控制、快速重传、可恢复
三次握手
第一次握手:客户端发送 SYN = 1 的标志,并随机生成一个初始序列号 。此时客户端进入 SYN-SENT 状态,等待服务器的确认
第二次握手:服务器接收到请求后,回复带有 SYN = 1 和 ACK = 1 的标志,确认号的值为客户端序列号 + 1,并随机生成自己的初始序列号。此时服务器进入 SYN-RCVD 状态,等待客户端的最终确认
第三次握手:客户端收到服务器的响应后,发送 ACK = 1 的标志,确认号为客户端序列号 + 1,自己的初始序列号也要 + 1,此时建立连接完成
为什么需要三次握手:为了确保双方的接收和发送 的能力都是正常的;防止已经失效的连接请求报文段突然又传送到了服务端,因而产生错误,简单来说,防止服务端的等待浪费资源
例如:客户端发送的第一个连接请求报文段并没有丢失,只是因为网络节点延迟导致一段时间后才传到服务器,这本来已经是一个失效的报文段,但是服务器以为是客户端发送的新请求,就会确认报文段。如果不采用"三次握手",那服务器发送确认后这个连接就建立起来了,但客户端并没有发起请求所以不会理会服务器;服务器又一直等待客户端发送数据,这样就白白浪费资源了
四次挥手
第一次挥手:客户端发送 FIN = 1 标志 和 自己的序列号 ,表示它准备关闭连接,客户端进入 FIN-WAIT-1 状态
第二次挥手:服务器收到关闭请求后,发送 ACK = 1 标志,确认号 为客户端序列号 + 1,服务器进入 CLOSE-WAIT 状态
-
服务器处于半关闭状态,即客户端没有数据要发送了,但是服务器还可以给客户端发送数据
-
客户端接收到确认后,进入 FIN-WAIT-2 状态,等待服务器发送连接释放报文
第三次挥手:服务器想断开连接了,发送 FIN = 1 和 ACK = 1 标志,并指定自己的序列号 ,服务器进入 LAST-ACK 状态,等待客户端的确认
第四次挥手:客户端收到关闭请求后,发送 ACK = 1 标志,确认号 为服务器序列号 + 1;客户端进入 TIME-WAIT 状态,等待 **2MSL(最长报文段寿命)**的时间
- 服务器收到确认 报文后,进入 CLOSED 状态
- 客户端经过 2MSL 的等待后 ,也进入 CLOSED 状态,此时 TCP 连接彻底断开
为什么要四次挥手:在建立连接时,SYN 和 ACK 可以放在同一个报文 里发送,但是关闭连接时,当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的,所以需要四次挥手
为什么要等待 2MSL 的时间:为了确保服务器正常收到了 ACK 报文,如果没有收到的话,服务器会重新发送 FIN 报文,客户端再次收到 ACK 报文后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文
4.2.2 UDP
UDP 是无连接的、面向报文的,提供不可靠的数据交付,会出现分组丢失、重复、乱序等现象,但实时性较好,工作效率比 TCP 高
TCP 只能是 1 对 1 的,UDP 支持 1 对 多;TCP 首部有 20 字节, UDP 只有 8 字节
4.3 网络层
IP:整个 TCP/IP 协议族的核心,为传输层提供数据分段,同时也能组装数据供传输层使用。它将多个单个网络连接成一个互联网,实现大规模的网络互联
ICMP:用于在 IP 主机、路由器之间传输控制信息,当 IP 无法访问目标、IP 路由器无法按照当前传输速率转发数据包时,会自动发送 ICMP 消息
路由器寻址原理:
(1)路由器收到数据包,提取目标 IP 地址及子网掩码,计算出目标网络地址
(2)根据目标网络地址查找路由表,找到的话就按照对应的出口发送到下一个路由器
(3)没有找到就看有没有默认路由,有的话就按照对应出口发送到下一个路由器
(4)还没有找到就给源 IP 发送一个出错的 ICMP,表明没法传递该数据包
4.4 数据链路层
ARP:根据 IP 地址获取物理地址,主机发送消息时会将包含目标 IP 的 ARP 请求广播到局域网络上的所有主机,并接受返回消息,以此来确定物理地址;收到的物理地址和 IP 地址会缓存到 ARP,下次查询就会先去看缓存有没有,没有再进行广播
PPP:点对点协议,用来拨号或专线方式建立点对点连接发送数据