计算机网络
2024-06-17 19:46:49

计算机网络

第一章 概述

互联网两个重要基本特点

  • 连通性
  • 共享(资源共享)
    • 信息共享
    • 软件共享
    • 硬件共享

RFC

Request For Comment请求评论

  • 互联网草案
  • 建议标准 –> RFC文档
  • 互联网标准

互联网的边缘部分

边缘部分的主机又称为**端系统**

端系统之间的通信方式

  • 客户/服务器(C/S)方式
  • 对等(P2P)方式

互联网的核心部分

在网络核心部分起特殊作用的是**路由器(router),实现分组转发**

采用网状拓扑结构

电路交换

  1. 建立连接
  2. 同话
  3. 释放连接

缺点:线路的传输效率低

分组交换

分组交换采用存储转发技术

分组(packet)

计算机网络的性能

  1. 速率
  2. 带宽
  3. 吞吐量
  4. 时延
  5. 时延带宽积
  6. 往返时间

协议与划分层次

协议

为进行网络中的数据交换而建立的规则、标准或约定称为网络协议

  • 语法
  • 语义
  • 同步(时序)

计算机网络体系结构

  • 应用层
    • 通过应用进程间的交互来完成特定网络应用。
    • 定义的是应用进程间通信和交互的规则
  • 运输层
    • 负责向两台主机中进程之间的通信提供通用的数据传输服务
    • 传输控制协议TCP
    • 用户数据报协议UDP
  • 网络层
    • 负责为分组交换网上的不同主机提供通信服务
    • IP数据报 – 分组
  • 数据链路层
    • 帧(frame)
  • 物理层
    • 比特(bit)

物理层

基本概念

物理层的协议也被称为规程(procedure)

物理层的主要任务

  • 机械特性
  • 电气特性
  • 功能特性
  • 过程特性

信道

  • 单工通信:单向通信
  • 半双工通信:双向交替通信
  • 全双工通信:双向同时通信

调制

  1. 基带调制:仅仅对基带信号的波形进行变换 – 编码(coding)
  2. 带通调制:使用**载波(carrier)**进行调制,将频率提高并转换为模拟信号。

常用编码方式

  • 不归零制:正电平代表1,负电平代表0
  • 归零制:正脉冲代表1,负脉冲代表0
  • 曼彻斯特编码:位周期中心向下跳表示1,向上跳表示0
  • 差分曼彻斯特:在每一位的中心都有跳变。位开始边界有跳变代表0,没有代表1

基本带通调制方法

  • 调幅(AM)
  • 调频(FM)
  • 调相(PM)
  • 正交振幅调制QAM

信道的极限容量

信噪比

信号的平均功率和噪声的平均功率之比:S/N,用分贝(dB)做单位

信噪比

香农公式

香农公式

W为信道的带宽(Hz),S为信道内所传信号的平均功率,N为信道内部高斯噪声功率

香农公式表明:信道的带宽或信道中的信噪比越大,信息的极限传输速率就越高

传输媒体

  • 双绞线
  • 同轴电缆
  • 光缆

码分复用


网络层

划分子网

  • IP 地址利用率有时很低:A 类,B 类

构造超网

传输层

概述

应用层协议主要使用的传输层协议

  • TCP
    • SMTP、TELNET(远程终端协议)、HTTP、FTP
  • UDP
    • DNS、TFTP(简单文件传送协议)、RIP(路由信息协议)、DHCP(动态主机配置协议)、SNMP(简单网络管理协议)、NFS(w网络文件系统)

应用层使用的传输层协议

  • TCP:
    • SMTP、TELNET、HTTP、FTP
  • UDP:
    • DNS、TFTP、RIP、DHCP、SNMP、NFS、IP电话、流式多媒体

复用分用

  • 复用

    应用层所有的应用进程都可以通过传输层再传到网络层

  • 分用

    传输层从网络层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程

端口号

TCP/IP的传输层用一个16位端口号来表指一个端口,允许有65535个不同端口号

  1. 服务器端使用的端口号

    • 熟知端口号:0~1023

      应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP HTTPS
      熟知端口号 21 23 25 53 69 80 161 443
    • 登记端口号:1024~49151

  2. 客户端使用的端口号

    • 49152~65535
    • 又称为短暂端口号

用户数据报协议UDP

概述

UDP只在IP的数据报服务上增加了很少一点功能:复用分用、差错检测

  1. UDP是无连接的,即发送数据之前不需要建立连接,不需要使用套接字(ip:port)
  2. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维护复杂的链接状态表
  3. UDP是面向报文的,即应用层交付多少报文,UDP在添加首部后直接交付IP层
  4. UDP没有拥塞控制
  5. UDP支持一对一、一对多、多对一和多对多的交互通信
  6. UDP的首部开销小

UDP的首部格式

UDP的首部只有8个字节,每两个字节一个字段

  1. 源端口
  2. 目的端口
  3. 长度:其最小值是8(仅包含首部)
  4. 检验和:检测数据报是否有差错

检验和

在首部之前添加12个字节的伪首部


传输控制协议TCP

概述

  1. TCP是面向连接的传输层协议,即传输数据前要建立TCP连接,之后要释放TCP连接
  2. TCP连接只有两个端点
  3. TCP提供可靠交付的服务:无差错、不丢失、不重复、按序到达
  4. TCP提供全双工通信
  5. 面向字节流

可靠传输的工作原理

理想的传输条件有以下两个特点:

  • 传输信道不产生差错
  • 接收方来得及处理收到的数据

但实际网络传输不是理想状态,故:

  • 可以在出现差错时让发送方重传出现差错的数据
  • 在接收方来不及处理数据时,及时告诉发送方降低发送速度

停止等待协议

每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组

  • 出现差错使用超时重传,超时计时器的重传时间应当比数据再分组传输的平均往返时间更长一点
  • 确认丢失或迟到时,发送方会重传分组,接收方收到后丢弃重复分组并返回确认。
  • 此即为自动重传协议ARQ
  • 信道利用率低

连续ARQ协议

TCP的首部格式

首部固定20字节,后面有 4n 字节是根据需要而增加的选项

  1. 源端口和目的端口,4字节
  2. 序号,4字节。范围是[0,2^32 - 1]。该序号为报文段的数据的第一个字节的序号(面向字节流)
  3. 确认号,4字节。期望收到对方下一个报文段的第一个数据字节的序号
  4. 数据偏移,1字节(4位)。
  5. 保留,6位。
  6. URG ACK PSH RET SYN FIN,6位。
  7. 窗口,2字节。
  8. 检验和,2字节。
  9. 紧急指针,2字节。
  10. 选项,长度可变,最长可达40字节。填充字段是为了使整个TCP首部长度使4字节的整数倍

TCP的流量控制

设A向B发送数据,在连接建立时B向A发送接收窗口大小 rwnd = xx

TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,时间到了就发送一个零窗口探测报文段(仅携带1字节的数据)。

糊涂窗口综合征:接收方在缓存刚有一点小空间的时候就急忙把窗口大小信息发送给发送方

TCP的拥塞控制

TCP拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复

慢开始:

  • 由小到大逐渐增大拥塞窗口数值

  • SMSS数值 大于2190 小于2190大于1095 小于1095
    窗口大小 2 * SMSS 3 * SMSS 4 * SMSS
  • 每收到一个对新的报文段的确认,拥塞窗口增加最多一个SMSS。

  • 拥塞窗口每次增加量 cwnd = min(N, SMSS),N为确认报文段所确认的字节数

拥塞避免:

  • 为了防止 cwnd 增长过大,还需要设置一个**慢开始门限(ssthresh)**。
  • 当 cwnd < ssthresh 时,使用慢开始;当 cwnd > ssthresh 时改用拥塞避免;相等时两者皆可
  • 拥塞避免算法是让 cwnd 使用**加法增大(Additive Increase)**,即经过一个 RTT 后 cwnd + 1
  • 当网络出现超时的时候,调整门限 ssthresh = cwnd / 2,同时设置 cwnd = 1,进入慢开始阶段

快重传:

  • 采用快重传可以让发送方尽早发现个别报文段的丢失
  • 接收方即使收到了失序的报文段,也要立即发出对已收到报文段的确认。
  • 当发送方收到**连续三个对同一报文段的重复确认(3-ACK)**时,立即进行重传

快恢复:

  • 当发送方知道只是丢失了个别报文段时,执行快恢复算法
  • 设置 ssthresh = cwnd / 2,cwnd = ssthresh,并开始执行拥塞避免算法

TCP的连接建立

设 A 是客户主机,B 是服务主机。发送数据TCP建立连接过程要经过三次握手,即 A 和 B 之间交换三个TCP报文段

  • B 的TCP进程创建传输控制快 TCB,服务器从 CLOSEDLISTEN(收听) 状态
  • A 的客户进程也创建TCB,向 B 发出连接建立请求:SYN = 1, seq = x,消耗一个序号。此时 A 进入 **SYN-SENT(同步已发送)**状态
  • B 收到连接建立请求报文段后,如同意建立连接,则向 A 发送确认:SYN = 1, ACK = 1, ack = x + 1, seq = y,同样消耗一个序号。此时 B 进入 SYN-RCVD(同步收到) 状态
  • A 收到 B 的确认后,还要向 B 发送确认:ACK = 1, seq = x + 1, ack = y + 1,ACK 报文段可以携带数据,如果携带则不消耗序号。此时 A 进入 ESTABLISHED(连接已建立) 状态
  • B 收到 A 的确认后,也进入 ESTABLISHED 状态

使用三报文握手建立TCP连接

为什么不使用两次握手?

  • 如果 A 在向 B 发送连接建立请求时,第一次请求在网络滞留,第二次发送成功建立,在释放连接后,第一次请求又到达 B。如果采用两次握手,B 收到连接建立请求后就进入 ESTABLISHED 状态,浪费了 B 的资源
  • 采用三次握手 A 就不会理睬 B 发送的数据

为什么不适用四次握手?

  • 三次握手足够建立连接

TCP的连接释放

设 A 是客户主机,B 是服务主机。TCP的连接释放需要经过四次挥手过程。

  • 假设 A 先向 B 发送连接释放报文段,并停止发送数据:FIN = 1, seq = u,u 是发送的最后一个字节的序号加1,此时 A 进入 **FIN-WAIT-1(终止等待1) **状态,等待 B 的确认。
  • B 收到连接释放请求后发出确认:ACK = 1, ack = u + 1, seq = v,v 等于 B 发送的最后一个字节的序号加1。此时 B 进入 CLOSE-WAIT(关闭等待) 状态,此时的 TCP 连接处于半关闭 状态,即 A 已经没有数据要发送,如果 B 要发送数据,A 仍要接受。
  • A 收到 B 的确认后,进入 FIN-WAIT-2(终止等待2) 状态,等待 B 发出的连接释放报文段。
  • 若 B 已经没有要发送的数据,则应用进程通知 TCP 释放连接:FIN = 1, ACK = 1, ack = u + 1, seq = w,此时 B 进入 LAST-ACK(最后确认) 状态。
  • A 在收到 B 的连接释放报文段后,对此发出确认:ACK = 1, seq = u + 1, ack = w + 1,前面 FIN 消耗了一个序号,此时 A 进入 TIME-WAIT(时间等待) 状态,经过时间等待计时器设置的时间 2MSL 后,A 进入 CLOSED 状态
  • B 收到 A 的确认后进入 CLOSED 状态。

TCP连接释放过程

为什么要等待 2MSL(最长报文段寿命)


应用层

域名系统DNS

概述

域名系统DNS(Domain Name System)能够把互联网上的主机名字转换为IP地址

域名服务器

  • 根域名服务器
  • 顶级域名服务器
  • 权限域名服务器
  • 本地域名服务器

文件传送协议

HTTP协议

HTTP1.0和HTTP1.1

HTTP协议本身是无连接的,建立在TCP连接上。

HTTP1.0

  • 每请求一个文档就有两倍RTT的开销(建立TCP连接+请求响应)

HTTP1.1

HTTP/1.1使用持续链接,有非流水线方式流水线方式两种工作方式

  • 非流水线方式
    • 节省了建立TCP连接的开销
    • 收到前一个的响应后才返回下一个请求
    • 当服务器发送一个响应后,TCP连接处于空闲状态,浪费服务器资源
  • 流水线方式
    • 客户在收到响应报文前就能够接着发送新的请求报文
    • 所有对象只需花费一个RTT时间

报文结构

请求报文

  • 请求行
    • 方法 URL HTTP版本
  • 首部行
  • 空行
  • 请求体

响应报文

  • 状态行
    • 版本 状态码 短语
  • 首部行
  • 空行
  • 响应体

状态码

状态码 短语 含义
200 OK 响应成功
301 Moved Permanently 请求对象已被永久转移,新的URL定义在响应报文的首部行,客户端将自动获取
400 Bad Request 通用的差错代码,请求不能被服务器理解。
401 Unauthorized 未认证,缺乏相关权限
402 Payment Required 保留,将来使用
403 Forbidden 通用的差错代码,请求不能被服务器理解。
404 Not Found 被请求的文档不在服务器上,有可能因为请求 URL 出错。
405 Method Not Allowed 客户端中请求的方法被禁止,例如限制 POST 方式但使用了 GET 访问。
500 Internal Server Error 客户端中请求的方法被禁止,例如限制 POST 方式但使用了 GET 访问。
502 Bad Gateway 作为网关或代理工作的服务器尝试执行请求时,从远程服务器收到了一个无效响应。

HTTPS

HTTP over SSL

客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将「服务器公钥放在数字证书」(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。

SSL连接过程

  1. Client发起一个HTTPS的请求

  2. Server把事先配置好的公钥证书返回给客户端。

  3. Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书),如果验证通过则继续,不通过则显示警告信息。

  4. Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。

  5. Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。

  6. Server使用对称密钥加密明文内容A,发送给Client。

  7. Client使用对称密钥解密响应的密文,得到明文内容A。SSL建立

  8. Client再次发起HTTPS的请求,使用对称密钥加密请求的明文内容B,然后Server使用对称密钥解密密文,得到明文内容B。