TCP/IP 基础

来源:互联网 发布:数据新闻啥意思 编辑:程序博客网 时间:2024/06/16 20:49

电子科技大学 TCP/IP 协议详解 课程笔记


第一章 引言

1. 1 协议和标准

  • 协议: 一组控制数据通信的规则.
  • 协议三要素: 语法, 语义, 时序. 对比电话, 邮件系统
  • 标准化组织:
    • iso 国际标准化组织
    • ITU-T 国际电联-电信标准部
    • ANSI美国国家标准化局
    • IEEE 电气电子工程师学会 (以太网)
    • EIA 电子工业协会 (定义物理传输标准,)
  • 论坛
    • Frame relay forum (帧中继论坛)
    • Atm forum
  • 管理
    • FCC 联邦通信委员会

第二章

OSI 参考模型

  1. OSI (open system interconnection): 开发系统互连
  2. Reference Model, 参考模型
  3. 目的: 是两个不同的系统能够通信, 而不需要改变底层的硬件或软件逻辑.
    注意OSI 不是协议, 是网络体系结构的概念模型.

OSI模型的层次功能

0->>> 上面三层通常称为 应用支持层
应用层 –> 为用户提供网络 (端口)
表示层 —> 数据解释
回话层 —>
0->>>>

传输层 —-> 实现端到端的链接

0->>> 下面三层通常称为 网络支持层
网络层 —> 编址 (ip地址或者网络地址)
链接层
物理层 —> 比特流 (物理地址)


  • 对等层 两个系统内同一层直接
  • 对等进程 对等实体
  • 对等层协议 对等实体之间的协议.
  • 服务 同一个系统内下层对只能对上层提供服务 且不能夸层提供服务.
  • 接口 在每一次都有接口
  • ip协议是网络层
  • tcp是传输层协议
  • 每一层可以同时存在多个实体 (实体: 对应用层 IE, QQ邮件, FTP(文件传输)服务 都是实体, 同样他们有IE 需要的HTTP 协议, qq邮件的 SMTP协议, 文件传输的FTP协议)
  • 每一层可以同时存在多个协议
  • 对等实体: 存在通信关系的对等实体才是对等实体
  • PDU (protocol Data unit) 协议数据单元,对等实体直接传输的数据内容. 每一层都有自己的PDU.
  • PDU不同层的不同名称 数据链路层的pdu 叫帧, 在网络层叫分组, 在传输层叫数据段, 在应用层, 表示层, 会话层, 都叫数据
  • 封装: 每一层都把自己这一层的头信息添加到数据中,

TCP/IP协议族

层次模型

应用层 —-对比 OSI — 应用层, 表示层, 会话层
传输层 端口地址,用于区分不同的应用进程.
链路层 IP地址
网络接入层 —- 对比OSI—– 链路层, 物理层, 物理地址

  • OSI 是概念模型 TCP/IP 是标准.
  • 所有的网络应该是平等的, 不能根据不同物理网络的不同, 而作不同的处理.
  • 主机都包含在物理中, 但是物理网并不都是主机.
  • TCP: 为DNS, SMTP, FTP, HTTP等应用协议提供服务
  • UDP: 为DNS, TFTP, SNMP等应用协议提供服务
  • IP: LANs(局域网) MANs(城域网) WANs(广域网), 屏蔽了物理网的细节, 为TCP, UDP提供服务
  • socket 是TCP/ 和UDP 为应用层提供服务的接口.

编址

地址:
* 物理地址: 表示通信的节点, 节点由所属的局域网或广域网指定, 且在所使用的网络内必须唯一.链路地址/硬件地址. 不同网络类型, 物理地址格式可能不一样.
* IP地址: 标识通信节点的网络连接, 由internet指定, internet内唯一.网络地址.如192.168.1.147
* 端口地址: 标识通信进程, 有操作系统指定, 一台计算机内唯一.如8080端口.

用个例子来说, 如果把IP地址比作学校的名称, 物理地址表示的就是几年级几班, 端口地址就是每个班的学生的学号. 学校的名字是不能重复的, 每个学校内部的班级名称也是不能重复的, 但是两个学校之间的班级是可以重复的, 你可以有一年级一班, 我学校也可以有一年级一般, 同理, 在班级内部, 学生的学号是不能重复的, 但是班与班之间的学号是可以有相同的.

物理地址 应用于 链路层, IP 地址应用于 网络层(IP), 端口地址 应用于传输层(TCP/UDP)

目的地址分类: (物理地址和 IP地址)
* 单播: 单个接受者 (不是广播, 不是多播, 剩下的就是单播)
* 多播: 一组接受者 (必须是0x0100.5E开头的地址比如0x0100.5E00.0002 , 或者224. 开头的地址比如 224.0.0.2 )
* 广播: 网络中的所有系统. (全是1)

未完待续

第三章 底层网络技术

交换

  1. 电路交换: 以流的方式, 建立的是实在的物理电路
  2. 分组交换: 将数据按一块一块的数据报
    1. 数据报: 以数据报形式发送, 每一个数据报都有自己的路径, 导致接受的顺序不同, 不需要建立连接
    2. 虚电路: 先需要建立连接, 顺序到达, 建立的是逻辑电路
  3. 报文交换

广域网

在一个很大的地理范围内提供数据, 话音, 和视频信息的长距离传输
交换网络: 点到点式. 电路交换, 分组交换.
比较 LAN 和 WAN

项目 LAN WAN 信道 广播 点到点 网络构成 使用自己的通信设施 利用公用的, 或者租用的或者专用的通信设备

连接设备

  • 转发器/集线器: 物理层, 对收到的信号转发,放大, 在有别的端口发出.在由集线器构成的局域网(广播式发送)中, 一个主机发送信息所有主机都能监听的到, 为了避免冲突,所以在同一时刻只能有一台主机发送信息. 可以增加传输距离, 但是会影响网络性能.
  • 网桥/交换机: 数据转发发生在 数据链路层. 内部有维护地址表, 根据地址表判断是否需要转发, 如果发送地址与目的地址在同一接口, 则不需要经过网桥, 如果发送地址和目的地址在不同的接口上, 则会经过网桥转发.不同接口上的主机通信不会相互干扰. 也可是说网桥分割了冲突域. 不同的是网桥的地址维护是用软件实现的, 而交换机的地址维护使用硬件做的.
  • 路由器: 数据转发发生在网络层 环状, 总线状. 可以互联不同类型的物理网络
    网关:应用层 互联网类型不同时 协议栈不同时

这里写图片描述

网桥转发
A -> H 不在同一接口, 需要网桥转发(注意会由网桥物理层 - 链路层 -物理层转发出去)
这里写图片描述

A -> D 在同一接口, 不需要网桥转发
这里写图片描述

第四章 IP编址

IP地址结构

IP地址 通用标示符, 唯一标示互联网上的主机或能够参与网络层通信的设备
网络通信设备: 指的是每一个通信节点, 而不是指这些设备本身. 如路由器, 有多个IP, 那会为每一连接的主机分配IP.
如: 路由器. 网关也有, 但是集线器和网桥没有IP地址.
IP地址结构 32bit 二进制地址.

IP地址分类

一共分为5类
1. A类 最高比特为0 (0.0.0.0 - 127.255.255.255) 能够区分 2^7 个网络类型. 一个网络内能标识的最大的主机书 2^24
2. B类 最高两位比特 为1 0 ( 128.0.0.0 - 191.255.255.255)

种类 特征 地址范围 能标识的网络类型个数 一个网络内能标识的最大主机个数 A类 最高位为0 0.0.0.0-127.255.255.255 2^7 2^24 B类 最高两位为1,0 128.0.0.0-191.255.255.255 2^14 2^16 C类 最高三位为1.1.0 192.0.0.0-223.255.255.255 2^21 2^8 D类 最高四为1.1.1.0 224.0.0.0-239.255.255 - - E类 最高四为1.1.1.1 240.0.0.0-255.255.255.255 - -

4.3 特殊地址

特殊地址 NetId HostId 是否可以作为 源/目的地址 作用 网络地址 特定的 全0 都不可以 标识整个网络 直接广播地址 特定的 全1 目的地址 标识特定网络中的所有主机 受限广播地址 全1 全1 目的地址 标识源所在的网络内的所有主机 本网络上的本主机地址 全0 全0 源地址 用于向应当服务器请求自己IP时, 临时标识自己的源IP地址 本网络上的特定主机地址 全0 特定的 目的地址 标识源所在网络的特定主机 环回地址 127 任意 目的地址,但是不会发送到网络中去 对机器的协议做测试

* 注 本网络上的特定主机地址 Netid 全为0包括Netid标识也为0, 如C类网是从192开始的, 但是当使用本网络上的特定主机地址时,并不是192.0.0.X, 而是0.0.0.X.

单播 多播 广播

通信 地址 种类 其他 单播 可以作为源地址也可以作为目的地址 A类B类或C类 一个系统必须至少有一个唯一的单播地址 多播 只能作为目的地址 D类 可以有一个或多个多播地址, 也可以没有 广播 只能作为目的地址 - -

第五章 构成子网和超网

固定的3种IP网络规模
* C类 少于255台主机的网络
* B类 介于255–65635台主机的网络
* A类 超过 65535台主机的网络
这种划分方法造成地址的大量浪费, 所以产生了无类 IP 编制;
1. 子网划分 将一个IP类网划分成几个较小的子网. 多个物理网络共享同一个网络前缀, 这时候不能根据netId划分网络. 将两层网络结构, 划分成三层网络结构. 将hostid 划分为subnet id 和 host id.
1. 掩码: 由于引入了子网划分, 导致不能使用首字母判断子网络的大小,这时候引入了掩码的概念, 掩码不表示网络节点, 只表示网络的大小.
2. 1表示网络或子网部分, 0: 表示主机部分例如 202.115.12.0 表示B类网, 掩码为255.255.255.0. 表示可以有255个主机, 如果是202.115.12.192(11000000) , 掩码为 255.255.255.192表示可以有 2^6个主机
2. 超网划分 :
1. 定义: 将几个C类网合并成一个更大的地址范围. 分配一C类网不够, 一个B类网用不完.
2. 方法: 将Net id 的某些1 改成0
3. 使用场景: 路由聚合
4. 组织可以在超网范围内, 使用子网技术进行实际的ip地址分配

  1. 对比
    1. 子网: 将主机号的一部分 划分为 子网号
    2. 超网: 将网络号的一部分 划分为 主机号

第六章 IP分组的交付和路由选择

查看电脑 路由列表 命名 win: route print
1. Routed protocol: 沿选定的路径交付分组 协议 典型的协议是 IP协议
2. Routing protocol 寻找到达目的的最佳路径 协议

面向连接和无连接服务

- 面向连接 无连接 通信过程 建立连接-交付分组-终止连接 交付分组 路由选择 仅在建立连接时选路 每一个分组独立选路 传输路径 相同 可以不同

IP 通信采用无连接通信

直接交付和简洁交付

  1. 直接交付 分组目的与分组的发送接口在同一个IP 网络中
  2. 间接交付 分组目的与分组的发送接口不在同一IP网络中 将数据交给下一跳的 IP地址,
  3. 交付方式判断 分组目的的IP 与其发送接口是否在同一IP网络中 目的IP & 发送口掩码 是否等于 发送口掩码. 如果相等 是直接交付, 不相等 是间接交付
  4. 交付操作 地址映射:IP地址-> 物理地址.
    1. 直接交付: 目的IP地址->物理地址
    2. 间接交付: 下一跳IP地址->物理地址
  5. 在间接交付中 原IP和目的IP 永远不变, 但是每次交接交付的帧的原地址和目的地址, 是可以不一样的.

路由选择的方法

基本思想
1. 不是收到IP分组后,才为其选路, 而是预先获得所以目的的路由, 再交付分组
2. IP报文安装预定的路由转发
3. 是基于网络选路
4. 预定路由: 路由表
5. 路由表:
1. 可能的目的: 目的网络, 而不是目的主机.
2. 如何到达目的: 只思考如何到达下一跳问题, 而不是考虑全部路径

举例
目的网络IP地址 目的网络 掩码 下一跳地址 发送接口 I1 Mask1 直接交付 I11 I2 Mask2 I12 I11 I3 Mask3 I12 I11

特定主机路由

  1. 为某台主机单独指定一条路由
  2. 实现: 掩码值为1 — 主机掩码
  3. 作用: 更多控制, 投递路径. 安全

默认路由

  1. 实现: 目的网络地址 0.0.0.0 目的网络掩码 0.0.0.0

静态和动态路由选择

路由选择模块和路由表的设计

  1. 路由选择算法 匹配条件 目的IP & 路由表中目的掩码 = 发送Net
  2. 路由表排列顺序 直接路由->主机路由(掩码255.255.255.255)->网络路由->默认路由(0.0.0.0)
  3. 路由匹配查找 最长匹配查找. (匹配最多查找)

第七章 网际协议(IP协议)

Ip协议位于网络层,
1. 特征:
1. 无连接 跨越多个异构物理网.
2. 不可靠: 尽最大努力交付.
2. 数据报
1. 格式 Header(20–60bytes) +data. 总长 20 - 65536 bytes
2. Header: 的组成
1. Ver: 版本
2. HLRN 以4个字节为单位, 占用20 - 60 个bytes 表示 首部长度. IP头长度
3. Total length 以字节为单位. 表示 IP 分组总长度 包括 header +data
4. Type of server 分组希望的服务质量 8 bits 一般很少使用. 默认使用 尽最大努力交付.
5. 分片控制字段:
1. 标识字段 Identification 16bits: 源站每发送一个分组, 标识+1
2. 标志字段 Flags. 3bits 第一个bit 保留 第二个bit: 分组不能被分片 第三个bit 1: 标识这个分片还没完. 0: 标识这个分片已经完了.如果表明不能分片, 且数据大于网络最大传输单元, 那么这个数据会被丢弃
3. Fragmenttation offset 13bit (以8个字节为单位, 也就是 13 * 8 bytes) 片偏移字段
6. 生存时间字段 TTL 8bits 最大255
1. 分组寿命: 防止路由成环是, IP被无限次转发
2. 取值 分组传输时间 + 路由转发处理时间
3. 实际: 源和目的之间的路由器个数 (下一跳个数)
4. 路由器转发时将TTL 值减1. TTL值为零时 丢弃该分组, 目的主机接受是不去检查TTL
7. 协议字段 Protocol 8 bits 其中 4表示IP 41表示 IPv6 6 表示TCP 17表示UDP
8. checksum 16bits 校验和字段 只校验header 信息, data部分交给高层协议来校验.
###IP分组处理
1. 合法性检查 1. 版本 2 长度 3 TTL 4 Protocol 5 checksum 6 IP 地址.
#### 分片操作
1. 不同网络传输最大长度不同, 分片大小也不同. 分片时对数据部分分片. 不包括header部分.
2. 仅仅由路由器执行 转发分组时.
3. 确实需要分片时才分片
4. 每一个分片都需要包含IP首部
5. 数据报可以被多次分片.

举例说明

假设原始分组数据一共 3999bits. 某网络 最大传输单元1420bits, 这就需要切片. 分成 1420 1420 1220 三个切片. 第一个切片 后面还有所以 Flag是 .第三个切片后面没有了 所以Flag是0. 切片偏移. 第一个切片是起始位置偏移是0. 第二个切片, 偏移是 1420 / 8 = 175. 第三个切片 是 (1420 + 1420) / 8 = 350

IP分组操作


接着上面的假设, 如果切片2 在传输过程中. 又遇到一个 MTU 更小的网络 假设为820bits. 那么这时候,需要对切片2 再次切片. 但是需要注意的是 因为切片2 后面还有切片. 所以对这次的切片 flag 都是1. 不管分片多少次. 只有真正的最后一片flag 才为零. 偏移字段也是一样, 只相对于原始分组. 而不是对分片.

对切片再次切片

重组操作

根据源IP地址和标识. 来判断是否是同一批数据的不同切片.重组的时候根据偏移标识,将数据重组. 去掉header后,将数据交给上层协议.

第八章 ARP和RARP

查看自己电脑ARP缓存的命令 ‘arp -a’

ARP address resolution Protocol

IP 地址 转换成 mac地址. 采用的方法有静态映射表法, 和动态映射方式. ARP 就是一种动态映射表法.
在网络模型中, 处于网络层, 与IP在同一层,

工作原理

请求者以广播发送请求, 接受者检查目标IP 是否是自己的IP,如果是则将自己的mac地址以单播的形式返回给请求者. 请求者收到返回后 更新自己的ARP 缓存表

分组格式

Htype(2) + Ptype(2) +HL(1) + PL(1) + OP(2) + sMac(6) + sIP(4) + tMac(6) + tIP(4) = 28
1. hardware :
1. hardware address len 硬件地址长度
2. Protocol address 冷 协议地址长度
2. Protocol Type : operaton 1: Request 2:repley
3. 发送方的硬件地址
4. 发送者的协议地址
5. 目标硬件地址: 请求者不知道目标硬件地址, 所以不填写. 但是作为应答者, 这个必须填写
6. 目标协议地址.

ARP 封装

ARP 分组直接封装在数据链路数据帧

IP分组和ARP分组交互

主机A ip分组发送前, 先检查ARP 缓存中是否有IP分组对应的mac地址. 如果有就直接发送. 如果没有, 就发送ARP请求, 等待回应. 带等待回应期间, 如果收到相同的IP发送请求. 先将请求缓存起来. 待收到相应后, 在发出. 并且会将收到回应缓存起来. 以被下次使用.
其他host 接受到ARP请求后, 发现目的IP不是自己, 但是因为请求中带有主机A的 IP 和mac 所以也会更新自己的缓存表, 这种方式称为自学习方式.

代理ARP

  1. 路由器不会转发广播消息
特点:
  1. 针对具体的网络接口实现,
  2. 多个IP地址与一个mac地址的映射关系
  3. 保留网络外部特性, 隐藏内部网络的结构
  4. 更新ARP绑定时. 发现已有的绑定与新绑定的不一样, 会使用新的

RARP 反向ARP

用途

给无硬盘机器引导,动态IP地址配置, 向一台特定的主机请求自己的IP

格式

与ARP相同

操作

Request : 广播发送 sIP, tIP, sMac = tMac, 只有启动了 RARP服务的服务器会相应该Request
reply: 仅由RARP 服务器单播发送

局限

由于RARP 只能获得ip地址, 无法获得掩码, 默认网关ip, dns
现代通常使用 DHCP 和 BOOTP 协议替代 RARP

第九章 ICMP协议 internet control message protocol.

在网络层, 在IP之上实现.逻辑上与IP同在网络层. 传递过程无连接.
1. IP协议:
1. 只有一种报文格式: IP数据报
2. 功能: 传递数据
3. 缺点: 无法应付可能出现的能力
2. ICMP协议
1. IP的辅助协议
2. 为IP提供差错报告机制, 只是报告机制,不是差错修复机制.
3. 为其它层(TCP/UDP)提供辅助功能
3. IP分组传输出现差错时, 会产生相应的ICMP报文
4. ICMP差错报告只能发送给IP分组的源站.
5. 出错点可能不是当前的节点路由器. 也可能是中间传输过程出错.
6. 反向传输路径可能与原路径不同.
7. 源站队ICMP报告的错误可能无能为力
8. ICMP在实际用途广泛, 但对网络的控制能力较弱
9. 直接封装在IP分组中

报文类型

  1. 差错报告
  2. 测试查询

第十一章 UDP

  1. UDP处在传输层中
  2. 传输层的功能
    * 作为应用程序和网络操作的中介物
    * 创建进程到进程的通信
    * 提供差错控制和流量控制
  3. 传输层协议
    * TCP 传输控制协议
    * UDP 用户数据报协议

进程到进程的通信

端口

端点 = IP地址 + 协议端口
根据IP地址找到目的主机, 根据传输协议的port找到对应的进程
1- 1023: 熟知端口
1024 - 49151: 注册端口
49152 - 65535 : 动态端口

数据报格式

UDP Header + Data
source portnumber 16 bits : 65507 = 65535 - 20 - 8; UD分组封装在IP分组中, 所以要减去IP header 长度 20bits, 再减去UDP header 长度 8 bits

校验和

校验内容: 伪首部 + UDP首部 + 数据
伪首部: 根据IP首部的部分信息形成, 不与UDP报文一起发送到网络上.
为什么要有伪首部信息. 因为UDP首部只有端口信息, 没有IP信息.保证信息交付到正确的主机
校验和是可选的. 如果本身是高可靠性的开销, 可以不适用校验和

UDP的操作

  1. 位应用进程提供无连接的网络通信服务
    • 无连接, 无确认. 面向报文单元
    • 报文会丢失, 乱序, 重复, 连接速率快慢不均
    • 封装在IP报文中, 与IP的通信过程类似
    • 应用进程自行考虑UDP 不可靠的问题
  2. 对IP协议增强
    • 主机多目标通信的区分. 允许多个通信并发进行,而不会产生混淆

UDP的应用

  1. 简单. 简短的应用
    • 简单的请求–响应通信, 如查询操作, 网络管理
    • IP phone, 利用UDP快捷的特点
    • 自己内部具有流量控制和差错控制的进程 如TFTP
    • 组播或广播应用
    • 某些路由协议如 RIP
  2. 一般使用方式 — 客户/ 服务器模式
    • 服务端: 固定守候在特点端口, 提供服务
    • 客户端: 动态绑定任意端口, 想服务器端口 发出请求, 获得服务响应

第12章 TCP

  1. 高层应用的需求
    * 传输大量的数据, 要求可靠的通信服务
    * 自身的可靠性机制弱, 但要求可靠的服务
    * 底层网络和IP网络是不可靠的, 无连接的投递, 无法满足可靠服务
  2. TCP
    * 提供通用的, 可靠的 进程到进程的通信服务
    * 提供统一的数据流 投递服务接口.
  3. 报文 vs 数据流

    – 报文 数据流 投递单位 报文 byte 接收顺序 报文按顺序接收, 连续报文流, 有报文边界 byte按序接收, 连续字节流,无边界 接收的内容 大小和顺序严格与发送方一致 顺序严格与发送方一致 发送 报文前后不能合并 可以合并成大小不一的数据块

协议概述

可靠投递服务特点

  1. 面向数据流的传输
    * 无结构字节流: 没有边界, 内容任意
  2. 虚电路连接
    * 尽管IP网络是无连接的. 但是在TCP的端点上, 却可以看做是面向连接的通信
  3. 有缓冲的传达–提高传输效率
    * 应用进程: 使用自己认为适宜的任意大小的数据片
    * TCP 协议软件: 根据网络情况选择适当的收发缓冲区. TCP对上层提供服务是按字节流的方式, 但是对下层协议, 并不是来一个字节就发送一个自己, 而是有一定的缓冲区, 等缓冲区满了, 在交付给下层协议发送, 对于缓冲区的大小, 其实是由当前网络环境的最大发送能力决定的.
    * Push: 强制发送滞留的数据. 无论缓冲区的数据是否达到标准, 都强制发送.
  4. 双全工服务 可以同时双向发送数据
  5. 捎带确认方式: 确认信息放在发送数据的报文中一起发送.

报文段格式 segment

控制字段

  1. UTG: 紧急位
  2. RST: 连接复位
  3. ACK: 1: 头部携带了确认信息
  4. SYN:连接建立
  5. PSH: push
  6. FIN:连接拆除

数据流. 报文段

TCP 在对上和本层使用的都是数据流, 但是对下层. 为了提供效率, 采用的是报文段

紧急指针与带外数据

  1. 带外数据(segment)
    • 位于数据字段的开始
    • 不在数据流中排队, 直接递交到上层
    • 提供快速传递数据的功能
  2. 紧急指针:指向外带数据的最后一个字段. 外带数据从第一位开始, 到紧急指针指向的位结束

选项字段

  1. 单字节
    • 无操作
    • 选项结束
  2. 多字节
    • 最大报文段长度. 一个MSS太小, 网络利用率太低. MSS太大, 需要分片, 就有可能丢失, 丢失后TCP需要重传, 降低成功率. 通信中常用双方MSS选项进行MSS值的协商.
    • 窗口比例因子: 允许TCP一次发送数据的大小.首部中定义的窗口大小为2^16. 为解决大的吞吐量网络, 采用 新窗口大小= 首部中定义的窗口大小 * 2^比例因子.
    • 时间戳 用了计算往返时间

差错控制

TCP的可靠性

  • 按序
  • 无差错
  • 不丢失, 不重复

机制

检查: 检验校验和. 确认. 超时

确认机制: 带重传的肯定确认.
  • 接收方接收到正确的数据后, 向源站发送ACK报文
  • 发送方重传错误报文 (包括 受损报文, 丢失报文)

累积确认

  • ACK number 是接收方希望接收的下一个字节
  • 对ACK number以前的所有字节的确认. 将ACK number以前的定时器 失效.

超时重传机制

发送方发送数据时启动一个定时器, 在定时器结束, 没有收到确认数据. 没有收到包括: 1. 发送数据丢失 2 确认信息丢失, 都会认为是没有收到确认信息, 会触发重传.
对于确认信息的丢失, 接受方会再次接受到接收过的数据, 这时候 接收方会将数据直接丢掉, 并会告知接收方, 超时定时器不合理.
纠正: 重传

超时定时器 发送方 接收方 假设描述 定时器1启动 发送方发送数据1 - 接收方接收到数据1则发送接收确认消息 定时器2启动 发送方发送数据2 - 1.收到数据1, 且收到数据2. 发送确认信息. 收到数据2, 没有收到数据1, 等待收到数据1在发送确认信息 定时器3启动 发送方发送数据3 - 确认收到数据1.2.3后发送确认信息, 否则不发送 定时器1 超时 发送方没有收到1的确认信息,发送方重新发送 接收方接收到信息 已经收到过数据1. 直接丢弃, 并反馈给发送方, 2. 没有接收过数据1, 发送确认信息 定时器2超时 发送方没有收到1,2的确认信息, 重发1,2 接收方, 接收到1,2 已经接收过的直接丢弃, 没有接收过的接收, 发送确认信息

滑动窗口

  • 窗口: 发送方在收到确认信息之前, 发送缓冲区中还可以继续发送数据流的长度
  • 滑动: 滑动的动力是确认信息的到达. 随着确认信息的不断到达, 窗口也在不断向前滑动.
TCP的发送窗口
  • TCP 的发送窗口包括 已确认 窗口(已发送待确认, 可以发送未发送) 不允许发送, 三个部分
  • 发送窗口大小动态可变. 接收方告知当前接收缓冲区大小. 发送方告知调整后的发送窗口大小
  • 极端情况, 接收方告知发送方可用缓冲区为0, 发送方停止发送.
  • 重新发送的条件 1. 收到接收缓冲区不为0的通知.
  • 试探性发送 收到缓冲区为0后, 等待一段时间后, 发送小的报文试探
TCP的接收缓冲区

*TCP 的接收缓冲区包括 以提交 已排序待提交, 零散数据, 空白段 4个部分

TCP窗口的大小

TCP的窗口大小是由 窗口通告值(接收方告知当前可用缓冲区大小), 拥塞窗口 两者的最小值决定.
1. 拥塞窗口特性
1. 加速递减.
* 一旦出现丢失报文, 则拥塞窗口减半, 按指数递减
* 发送窗口内数据超时期时间加倍,
2. 慢启动
* 拥塞窗口 每收到一个确认, 拥塞窗口增加一个MSS
* 当拥塞窗口 = 窗口告知值的一半是, 只有当窗口内所有报文段都收到确认, 才增加一个MSS

TCP的糊涂窗口综合征

TCP发送方的窗口大小由 窗口告知值 和 拥塞窗口 两者的最小值决定. 如果接收方处理数据的速度特别慢, 导致可用缓冲区特别小, 这时如果按照窗口告知值大小发送, 很多的浪费网络资源.
* 解决办法:
1. 推迟窗口通告, 接收方在零窗口通知发出后, 并不是一有缓冲区就告知发送方, 而是等待缓冲区大小达到接收缓冲区的一半时, 或者达到最大报文段长度时, 才发送.
2. 推迟确认, 接收方在可用缓冲区很小时, 推迟确认的发送, 当窗口增加到一定程度, 或者有消息要发出, 或者将要超时时, 再将确认消息发出.
3. 延迟发送, 发送方并不是一有数据就立刻发送, 而是聚集到一定数据的数据后再发送.

TCP 连接管理

初始序号

  • TCP使用随机的初始序号值
  • 双方都必须知道对方的初始序号才能正常通信.
  • 双方都需要确认对方得到了自己的初始序号.
  • 确保报序号发送到对方, 就有了三次握手方式建立连接.

TCP 三次握手建立连接

方向 数据格式 Client -> server 请求连接 seq: Client的数据起始序号, ack为空, SYN:1 表示建立连接(ack表示期望获得的启示数据序号) Client <- server 同意连接, 向Client发送连接请求 seq: server端的数据起始序号, ack: Client起始序号+1, SYN:1 Client -> server 确认连接 seq: Client端的起始序号+1, ack: server端的其实序号+1, SYN:1, 这次连接可以携带数据

TCP 连接的拆除 四次握手

  • TCP 连接拆除的发起方只能关闭自己发送数据的能力, 不能关闭接收数据的能力(为了避免接网络延迟导致的数据没有完全收到), 而且可以发送确认信息.
方向 数据格式 说明 Client -> Server seq: Client发送的序号, ack:为空, FIN:1 表示Client向Server发送数据结束 Client 请求结束连接 Client <- Server Seq: Server发送的序号, ack:Client发送的序列号+1 表示同意Client向Server 结束请求, 此时, Client不能再向Server发送数据, 但是可以接收Server向Client发送的消息, 也能发送确认消息 Client <- Server Seq:Server的发送序号, ack: Client的发送序号+1 FIN:1 Server 向Client请求结束连接 Client -> Server Seq:Client的发送序号. ack:Server的发送序号+1 表示同意Server向Client 请求请求, 此时Server不能再向Client发送数据, 但是可以接收Client发送的数据,也能发送确认信息

TCP连接复位

  • 异常中断连接
  • 复位到无连接状态, 强制拆除, . 立即终止. 发送RST = 1 报文. 无需对方确认

第13章 路由协议

Metric & Convergence

  • Metric(度量)不同, 产生的最短路径不同, 相同的Metric 才具有可比性,
  • Convergence(收敛): 采用相同的路由协议的所有路由器对整个网络拓扑具有一致性的认识,
  • 收敛时间:从不一致到一致所经历的时间,

自治系统和内外部路由协议

RIP Routing information Protocol

  • 选路信息协议, 功能位于应用层, 实现在网络层, 固定端口520
  • 内部路由协议
  • 距离向量算法: 路由器定时向他相邻的(直连的) 发送自己的整张路由表,
  • 举例说明
    路由器C的路由表
网络 跳数 Net2 4 Net3 8 Net6 4 Net8 3 Net9 5

路由器C发送给相邻路由器的路由表, 跳数需要加一

网络 跳数 Net2 5 Net3 9 Net6 5 Net8 4 Net9 6

路由器B的路由表

网络 跳数 下一跳 Net1 7 A Net2 2 C Net6 8 F Net8 4 E Net9 4 F

收到路由器C发送的路由表后, 做如下分析
Net1 没有更新直接保留
Net2 由2跳更新到5跳
Net3 B表中没有, 插入
Net6 B表中由F出, 需要8跳, 现在由C出需要5跳, 所以更新为由C出, 5跳
Net8 信息一致保留
Net9 B表中跳数更少, 保留

分析完后得到下面结果

网络 跳数 下一跳 Net1 7 A Net2 5 C Net3 9 C Net6 5 F Net8 4 E Net9 4 F

RIP报文格式

  • 广播地址 255.255.255.255
  • 封装在UDP报文中, UDPport = 520.
  • 发送整张路由表, 并不是将整张表的信息都发出, 只发送IP地址和Metric.

RIP定时器

  1. 正常周期定时器 15-30秒 发送一次
  2. 询问定时器,发现某个网络不可达到时 发送询问, 启动定时器. 180秒,
  3. 询问定时器失效后 启动定时器 120秒, 没有收到回应,删除这条路由信息.

RIP 存在的问题1. 路由环路

假设存在如下网络 网络1 ——- 路由器A—— 网络2 ——- 路由器B —– 网络三.
连个路由器连接三个网络, 假设在某一时刻 网络1 不可到达, 路由器A作为直连网络, 可以第一时间获得这个信息, 并将路由表中网络1的跳数设置为无限大. 但是因为RIP协议是定时向邻居发送路由表信息的, 且发送的时间是在25秒到30秒内随机的, 也就是说可能存在这种可能, 路由器将网络1跳数设置为无限大后, 收到了路由器B发来的路由信息. 这是路由器B到网络1的跳数是2, 所以路由器A会更新自己的路由表, 将到达网络1的的下一跳设置为B. 跳数为2. 这样就形成的路由环路

解决办法
1. 立即更新: 当网络拓扑有改变时,不必等待自己更新周期在发送,而是在随机等待一段时间后发送
2. 水平分割:

OSPF (open short path First)

  • 内部路由协议
  • 链路状态路由算法
  • 周期性向网络中所有的路由器,发布链路状态信息, 计算路径过程是: 先形成网络拓扑数据库, 在根据算法得出最短路径.
  • 链路:与邻居路由器之间的网络,
  • Area: 保函在AS中一些网络, 主机, 和路由器的集合.

BGP-4

外部路由协议

第15章 BOOTP协议和DHCP协议

BOOTP 协议

  • 使用场景:1. 引导无硬盘计算机或第一次启动的计算机, (不知道自己IP的计算机)
  • 在服务器上由管理员手动设置IP地址与Mac地址的绑定关系
  • 发送方式: 广播
  • 端口: Client 68 Server: 67
  • 过程描述:

    Client端发送广播, 信息包括 源mac地址. 源ip地址(0.0.0.0), 目的mac地址(为空,或全零), 目的IP地址(255.255.255.255) 端口68
    区域内所有主机收到广播后, 递交到UDP层, UDP检查自己的应用进程中是否有端口为68的进程, 如果有就交给该进程, 没有则直接丢弃
    Server 接收到广播后, 以单播,或广播的形式, 将Client的IP地址返回, 形式为: ServerMac地址, ServerIP地址, ClientMac地址, ClientIP地址. 端口 67
    如果是广播发送, 区域内的主机接收到信息后, 递交到UDP层. UDP 检查自己的应用进程里是否有端口为67的进程, 如果有则交给该进程, 该进程还有检查信息里的Mac地址是否是自己的, 如果不是则丢弃.
    如果是单播发送, Client还是要检查广播里的Mac地址. 因为Clinet当前不知道自己的mac地址, 所以无法根据IP地址检查是否是自己需要的信息,

DHCP

  • 动态主机配置协议
  • 在服务器上动态配置协议, 不需要管理员手动配置
  • 是BOOTP的扩充和增加, 且兼容BOOTP
  • 支持有限期间的静态,动态配置
  • 过程:
    Client 发送DHCPDiscover 广播, 向服务器请求地址.
    Server 检查自己的IP地址池, 有 则返回DHCPOffer
    Client 收到DHCPOffer 发送请求DHCPRequest告诉Server 自己要使用Offer里的地址信息
    Server 收到DHCPRequest后,如果同意则返回DHCPACK, 允许使用
    Client 只有收到Server 的DHCPACK 时, 才能使用Offer里的信息.

第16章 DNS

名字空间

域名空间

  • 域名 当前节点到根节点的层次, 用点区分.
  • 区: 域名服务器所负责或授权的范围.
  • 域名服务器 (DNS服务器): 将域名映射为IP地址, 将IP地址映射为域名(反向查询)
  • 实现: 递归解析, 迭代解析
  • 端口 53. 可以使用TCP(响应报文长度 >512字节) 也可以使用UDP (响应报文长度 <= 512字节)