1 应用层
应用层的作用是为用户的应用程序提供网络服务,使得这些程序可以利用网络资源进行数据交换
- 为应用软件提供网络服务接口,使得应用程序能够发送和接收数据
- 应用层直接为用户的应用程序(如电子邮件客户端、Web浏览器和文件传输程序)提供服务,处理具体的应用细节
- 这一层关注的是用户最终能看到的界面部分,以及在这个界面上进行的各种操作,如数据的输入和输出。
(1)常用协议:文件传输协议(FTP)、电子邮件协议(SMTP、POP3)、万维网协议(HTTP)、域名解析协议(DNS)、超文本传输协议(HTTPS)
(2)传输单位 —— 消息
(3)网络应用模型
2 表示层
- 对接收到的数据进行解释、加密与解密、压缩与解压缩,即把计算机能识别的东西转换成人能识别的东西。
- 主要处理两个通信系统中交换信息的表示方式
(1)常用协议:JPEG
(2)传输数据 —— 数据
3 会话层
在网络中的两个节点(可以是同一台机器上的进程,也可以是不同机器上的进程)之间建立、管理和终止会话,确保数据按照正确的顺序传输,并且在会话或数据传输过程中发生错误时能够进行恢复。
(1)常用协议:ADSP、ASP
(2)传输数据 —— 数据
4 传输层
-
负责主机中两个进程之间的通信
-
端到端通信:指运行在不同主机内的两个进程之间的通信;
-
功能:差错控制(TCP)、流量控制(TCP)、复用分用(TCP、UDP)
复用:发送方不同的应用进程都可用同一个传输层协议传送数据(传输数据) 分用:接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程(交付数据) 网络层,只校验首部是否出差错而不检查数据部分;传输层,需要对收到的报文进行差错检测
(1)常用协议:TCP、UDP(QQ聊天数据传输方式)
(2)传输数据 —— TCP:报文段;UDP:用户数据报
套接字
套接字Socket=(IP地址:端口号)
套接字唯一地标识网络中的一台主机和其上的一个应用(进程)
TCP | UDP | |
---|---|---|
连接 | 面向连接 | 无连接 |
可靠性 | 可靠交付,三次握手建立连接、有确认、窗口、重传、拥塞控制机制 ,保证无错、完整按序到达 | 不可靠,尽最大努力交付,不保证正确性,无序达到 |
传输形式 | 字节流 | 数据报文段 |
传输速率 | 慢 | 快 |
首部开销 | 多(20~60字节) | 少(8字节) |
是否有状态 | 有状态,记录已发送消息的状态 | 无状态 |
是否提供广播 / 多播服务 | 只支持点对点 | 一对一、一对多、多对一、多对多 |
应用场景 | 网页浏览、文件传输、邮件传输、远程登陆、数据库操作 | 视频直播、实时游戏、域名转换 |
4.1 TCP协议
-
每条TCP连接只能有两个端点;
-
每条TCP连接只能是点对点的
-
TCP连接的端点叫做套接字( socket )
套接字Socket=(IP地址:端口号); TCP连接 = {socket1,socket2} = {(IP1 : prot1),(IP2 : prot2)} 套接字唯一地标识网络中的一台主机和其上的一个应用(进程)
4.1.1 TCP建立连接(三次握手)
(1)第一次握手
- 客户端向服务端发送请求,首部同步位SYN=1,选择一个初始序号seq=x
- SYN报文段不携带数据,序号消耗一个序号
- 客户进程进入SYN-SENT(同步已发送)状态
(2)第二次握手
- 服务器收到SYN报文—>同意连接---->服务器为TCP连接分配缓存和变量---->向客户端返回确认报文段
- 同步位SYN=1,确认位ACK=1,确认号ack=x+1,为自己选择一个初始序号seq=y【随便给】
- 确认报文段不能携带数据,需要消耗一个序号
- 服务器进程进入SYN-RCVD(同步收到)状态
(3)第三次握手
- 客户进程收到服务器进程的确认报文—>客户端为TCP连接分配缓存和变量
- 向服务器端返回一个报文段,对服务器确认报文进行确认
- 报文中ACK=1,确认号seq=y+1,自己序号seq=x+1
- 客户端进入ESTABLISHED(已建立连接)状态
- 此时TCP连接已经建立,服务器收到客户端的确认后,进入establish状态
为什么三次握手
- 阻⽌重复历史连接的初始化(主因)
1)当旧的SYN报⽂先到达服务端,服务端回⼀个ACK+SYN报⽂,客户端收到后可以根据⾃⾝的上下⽂,判断这是⼀个历史连接(序列号过期或超时),那么客户端就会发送 RST报⽂给服务端,表⽰中⽌这⼀次连接。
2)两次握⼿在收到服务端的响应后开始发⽣数据,不能判断当前连接是否是历史连接。
3)三次握⼿可以在客户端准备发送第三次报⽂时,客户端因有⾜够的上下⽂来判断当前连接是否是历史连接 - 同步双⽅的初始序列号
- 避免资源浪费
1)两次握⼿会造成消息滞留情况下,服务器重复接受⽆⽤的连接请求 SYN 报⽂,⽽造成重复分配资源。
2)只有两次握⼿时,如果客户端的SYN请求连接在⽹络中阻塞,客户端没有收到服务端的ACK报⽂,会重新发送SYN。
3)由于没有第三次握⼿,服务器不清楚客户端是否收到了⾃⼰发送的建⽴连接的 ACK 确认信号,所以每收到⼀个SYN 就只能先主动建⽴⼀个连接。
4.1.2 TCP连接释放(四次挥手)
(1)第一次挥手
- 客户端向服务端发出连接释放报文段----->停止发送数据,主动关闭连接
- 报文中终止控制FIN=1,序号seq=u(值等于前面已传送的数据的最后一个字节的序号+1)
- 客户端进入FIN-WAIT-1(终止等待1状态)
(2)第二次挥手
- 服务器收到连接释放报文段后发出确认
- 确认位ACK=1,确认号ACK=u+1,序号seq=v(值等于服务器前面已传送过的数据最后一个字节的序号+1)
- 服务器进入CLOSE-WAIT(关闭等待)状态
- 此时TCP连接处于半关闭状态,客户端到数据段的连接释放,但是服务器还可以向客户端发送文件,且客户端需接受
- 客服端收到服务器的确认---->进入FIN-WAIT-2(终止等待2)状态,等待服务器发出的连接释放报文段
(3)第三次挥手
- 服务器发出连接释放报文段,FIN=1,报文序号seq=w(在半关闭状态下服务器可能又发送了一些数据)
- 服务器重复上次已发送到确认号ack=u+1
- 服务器进入LAST-ACK(最后确认状态),等待客户端的确认
(3)第四次挥手
- 客户端收到服务器端发出的连接释放报文----->对此发出确认,将确认位ACK置为1,确认号ack=w+1,序号seq=u+1
- 客户端进入TIME-WAIT(时间等待状态)
- 在经过时间等待计时器设置的世界2MSL(最大报文段寿命)后,客户端进入CLOSE(关闭)状态
为什么四次挥手
服务端通常需要等待完成数据的发送和处理,所以服务端的ACK和FIN⼀般都会分开发送,所以需要四次挥手;
为什么TIME-WAIT等待时间是2MSL
1)MSL:报文最大生存时间。
2)⽹络中可能存在发送⽅的数据包,当这些发送⽅的数据包被接收⽅处理后又会向对⽅发送响应,所以⼀来⼀回需要等待 2 倍的时间。
3)2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的。如果在 TIME-WAIT 时间内,因为客户端的 ACK没有传输到服务端,客户端又接收到了服务端重发的 FIN 报⽂,那么 2MSL 时间将重新计时
4.2 重传机制
4.2.1 超时重传
超时重传时间(RTO)应该略大于报文往返时间(RTT),当超时重传时间(RTO)过长或过短:
4.2.2 快速重传
当收到三个相同的ACK报⽂时,会在定时器过期之前,重传丢失的报⽂段。
4.2 滑动窗口
引入窗口,指定窗口大小,窗口大小就是无需等待确认的序列大小 或 继续发送数据的最大值。
4.3 拥塞控制
拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载
拥塞往往表现为通信时延的增加
拥塞控制算法:
1)慢开始:当发送方每收到一个ACK,拥塞窗口cwnd的大小成指数增加,1-2-4-8-16-32;
2)拥塞避免:每当收到一个ACK,cwnd 增加 1;
cwnd < ssthresh ,使⽤慢启动算法。
cwnd >= ssthresh,使⽤拥塞避免算法。
3)快重传:当触发重传机制,则拥塞发生,
超时重传:ssthresh 设置为
c
w
n
d
2
\frac{cwnd}{2}
2cwnd,cwnd = 1
快速重传:当发送方连续收到3个重复的ack报文时,直接重传对方尚未收到的报文段;不必等待那个报文段设置的重传计时器超时;
4)快恢复:与快速重传同时使用,当发送方连续收到3个重复ACK,ssthresh 设置为
c
w
n
d
2
\frac{cwnd}{2}
2cwnd,然后cwnd从ssthresh开始使用拥塞避免算法。
4.4 流量控制
TCP利用滑动窗口机制实现对发送方的流量控制
5 网络层
- 负责在多个网络之间转发数据包,实现数据包的路由选择。
- 功能:路由选择、流量控制、差错控制、拥塞控制
(1)常用协议:IP、ICMP、ARP、OSPF、DHCP
(2)传输数据 —— 包 / 分组
5.1 分类编制的IPV4地址
5.1.1 IPV4地址类别
分类 | 最大可用网络数 | 第一个可用网络号 | 最后一个可用网络号 | 每个网络中的最大主机数 |
---|---|---|---|---|
A类(1~126) | 2 7 − 2 2^7 - 2 27−2 | 1 | 126 | 2 24 − 2 2^{24} - 2 224−2 |
B类(128~191) | 2 14 − 1 2^{14} - 1 214−1 | 128.1 | 191.255 | 2 16 − 2 2^{16} - 2 216−2 |
C类(192~223) | 2 21 − 1 2^{21} - 1 221−1 | 192.0.1 | 223.255.255 | 2 8 − 2 2^{8} - 2 28−2 |
A类网络中-2:除去全0(IP保留地址,本网络)、全1(环回测试地址)两类网络
B类、C类网络中-1:除去全0网络,即 128.0 和 192.0.0
主机数-2:除去全0(只能作为源地址)、全1(广播地址)
5.1.2 划分子网IPV4地址
未划分子网的ip地址:网络地址+主机地址
划分子网后的ip地址:网络地址+(子网网络地址 + 子网主机地址)
怎么进行子网划分?
- 假设对 C 类地址进行子网划分
- 网络地址 218.75.230.0,使用子网掩码 255.255.255.192 对其进行子网划分
- C 类地址中前 24 位是网络号,最后 8 位是主机号
- 根据子网掩码可知从 8 位主机号中借用 2 位作为子网号
- 由于子网网络地址被划分成 2 位,那么子网地址就有 4 个,分别是 00、01、10、11
- 划分后的 4 个子网如图所示
子网掩码和IP地址按位与,可以得到网络号
5.2 无分类编制的IPV4地址(CIDR)
为什么引入CIDR
- CIDR消除了传统的A类,B类和C类地址,以及划分子网的概念;
CIDR的作用?
- CIDR是一种归并技术,可以把小的网络汇聚成大的超网;
- CIDR可以更加有效地分配IPV4的地址空间,并且可以在新的IPV6使用之前允许因特网的规模继续增长;
CIDR的细节?
- CIDR的表示形式,最小地址,最大地址,地址数量,聚合网络数量,地址掩码
5.3 路由协议
5.3.1 距离-向量路由算法(RIP)
和谁交换信息: 仅和相邻路由器交换信息
交换什么信息: 自己的路由表
何时交换信息: 周期性交换(例:30秒)
5.3.2 链路状态路由算法(开放最短路径优先-OSPF)
5.3.3 路径-向量路由算法(BGP)
6数据链路层
-
在物理连接上提供可靠的数据传输
-
为网络层提供服务
-
功能:流量控制、差错控制,确保物理层传来的原始比特流无误地转换成数据帧。(封装成帧、差错检测、可靠传输)
-
采用点到点通信
点到点:节点直接相连,数据从一个节点直接传输到另一个节点,不需要经过任何中间节点。
(1)常用协议: PPP、STP
(2)传输数据 —— 帧
6.1 封装成帧
给上层交付的协议数据单元添加帧头、帧尾 —— 帧定界;
6.2 差错检测
(1)奇偶校验码
在待发送的数据后面添加1位校验码,使整个数据(包括校验位)中“1”的个数为奇数或者偶数
如果有奇数个位发生误码,可以检查出误码;如果有偶数个位发生误码,不能检查出误码(漏检)
(2)循环冗余校验CRC
CRC有很好的检错能力(漏检率非常低),可以检测出所有的单比特错误
6.3 可靠传输
(1)停止-等待协议SW
(2)回退N帧协议GBN
(3)选择重传协议SR
7 物理层
- 负责在物理媒介上传输原始的比特流。
(1)传输数据 —— 比特
7.1 通信方式
7.2 奈氏准则
- 在理想低通(无噪声、带宽受限)条件下,为了避免码间串扰,极限码元传输速率为2W Baud,W是信道带宽,单位是HZ。
- 带宽只有在奈氏准则和香农定理中单位是HZ,其余都是b/s。
理想低通信道下的极限数据传输率 = 2W *log2V
W是信道带宽,单位:HZ。V是码元的离散电平数目,即共有几种码元
- 在任何信道中,码元传输速率是有上限的,如果传输速率超过这个上限,就会出现严重的码间串扰问题,使接收端对码元的判决(识别)成为不可能;
- 如果信道的频带越宽,也就是能够通过的信号高频分量越多,那么就可以用更高速率传送码元而不出现码间串扰;
- 由于码元的传输速率受奈氏准则的制约,所以要提高数据的传输速率,就必须设法使每个码元能携带更多的个比特量的信息;
7.3 香农定理
在带宽受限且有噪声的信道中,为了不产生误差,信息的数据传输率有上限值
信噪比
信号的平均功率和噪声的平均功率之比,常记于S/N,并用分贝(dB)作为度量单位。
信噪比(dB) = 10 lg(S/N) (dB)
信道的极限数据传输速率 = W log2(1+S/N) (b/s)
W是带宽,单位:HZ。S/N是信噪比
- 信道的带宽越大或信道的信噪比越大,则信息的极限传输速率就越高。
- 对一定的传输带宽和一定的信噪比,信息传输速率的上限就确定了。
- 只要信息的传输速率低于信道的极限传输速率,就一定能找到某种方法来实现无差错传输。
- 香浓定理得出的是极限信息传输速率,实际信道能达到的传输速率要比它低很多