计算机网络的基本概念
计算机网络的概念和特点
- 概念:计算机网络是一些相互连接、自主的计算机集合,是在协议控制下,以实现资源共享和数据通信为目的的多个具有独立功能的计算机系统。
- 特点
- 连通性Connectivity
- 共享 Sharing
互联网定义
- ,它起源于美国,数量巨大互联形成的互联网络
- ,是覆盖全球、实现全球数据通信和资源共享的计算机网络
计算机网络性能(网络性能指标)
-
带宽 bandwidth
- 原指信号的频带宽度为赫
- 该单位是比特每秒或比特每秒b/s(bit/s)”
- 单位换算
千比每秒 | kb/s | 10^3 b/s |
---|---|---|
-
时延 delay
-
指数据从网络(或链路)的一端传输到另一端所需的时间(一个报纸或分组,甚至比特)。有时也叫延迟或延迟
-
网络的延迟由以下组成
- 发送延迟(传输延迟)
- 传播时延
- 处理时延
- 排队时延
-
总时延 = 发送时延 传播时延 处理时延 排队时延
-
对于高速网络链路,我们只提高数据
发送速率
,而不是比特在链路上传播速率
-
链路带宽的增加可以减少数据的发送延迟
-
往返时延RTT(Round-Trip Time)表示从发送端发送数据到发送端收到接收端的确认(接收端收到数据后立即发送确认),总共经历延迟
-
-
吞吐量 Throughput
- 数据量表示在单位时间内通过某个网络(或信道、接口)
- 吞吐量更常用于测量现实世界中的网络,从而知道通过网络实际可以测量多少数据。
- 网络带宽限制吞吐量
-
利用率
- 信道利用率
- 指某信道使用时间的百分之几(有数据通过)
- 完全空闲的信道的利用率是零
- 信道利用率越高越好。当信道利用率增加时,信道引起的延迟会迅速增加
- 网络利用率
- 全网信道利用率的加权平均值
- 信道利用率
网络系统结构(协议的三个要素)
分层的好处
- 独立性:每层都实现了相对独立的功能,并提供了相对独立的服务。某一层不需要知道下一层的具体实现,只需指导如何使用下一层服务
- 灵活性:只要接口不变,任何一层内部都会发生变化,对其他层没有影响。每层都可以独立发展
- 可分割:各层可独立选择最佳技术实现
- 易于实现:整个系统分为几个小子系统,大大降低了实现和维护的难度
- 易于标准化:每层都有明确的规定
三要素
- 数据和控制信息(消息)的结构或格式
- 什么什么控制信息,完成什么行动,做出什么响应
- 事件实现顺序的详细说明
参考模型
- OSI
- TCP/IP
例题
物理层
传输媒体媒体
数据通信的基本知识(存储和转发,奈奎斯特准则) 香农公式)
存储转发
存储和转发计算机网络领域使用最广泛的技术之一。以太网交换机的控制器首先缓存输入端口的数据包,首先检查数据包是否正确,并过滤掉冲突包的错误
奈奎斯特标准
奈奎斯特定理,又称奈氏标准,指出极限码元的传输率在理想的低管(无噪音,带宽有限)信道中为2W波特,W是理想的低通道带宽,单位是Hz
如果用V表示每个码元的离散电平数(码元的离散电平数是指有多少个不同的码元,如16个不同的码元,则需要4位二进制位,因此数据传输率是码元传输率的四倍) 理 想 信 道 下 的 极 限 数 据 传 输 率 = 2 W l o g 2 V 理想信道下的极限数据传输率 = 2Wlog2V 理想信道下的极限数据传输率=2Wlog2V
香农公式
香农定理给出了带宽受限且有高斯白噪声干扰的信道的极限数据传输率,当用此速率进行传输时,可以做到不产生误差 信 道 的 极 限 数 据 传 输 率 = W l o g 2 ( 1 + S / N ) 信道的极限数据传输率 = Wlog2(1 + S/N) 信道的极限数据传输率=Wlog2(1+S/N)
信道复用技术
码分复用
频分复用
例题
数据链路层
数据链路层的基本概念
- 结点:数据链路层上的结点主要是主机和路由器。由物理线路联接起来的两个结点,又叫相邻结点
- 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路
- 数据链路:两络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路
- 帧:链路层的协议数据单元,作用是封装网络层数据报
差错检测
CRC
CRC(Cyclic Redundancy Check),即循环冗余校核,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法,主要用来检测或校核数据传输或者保存后可能出现的错误。CRC利用除法及余数的原理,实现错误侦测的功能,具有原理清晰、实现简单等优点
观看B站教学视频
举例说明:
点到点链路的停止/等待协议
停止等待协议(stop-and-wait)是最简单但也是最基础的数据链路层协议。很多有关协议的基本概念都可以从这个协议中学习到。停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
无差错情况
有差错情况
每发完一个数据帧时,必须保留它的副本。数据帧和确认帧必须编号。每当发送一个帧时就启动一个计时器。
-
数据帧丢失或出错
-
ACK丢失
-
ACK迟到
信道利用率
SW协议的缺点及改进方向
- 缺点: 信道远远没有被数据比特填满
- 改进方向: 产生了两种协议,连续ARQ和选择重传ARQ
滑动窗口协议,连续ARQ与选择重传ARQ
滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量
当发送方发送大量的数据包时,接收方并不一定有能力全部接受。为解决这一矛盾,窗口控制应运而生。
既有窗口控制,便有发送窗口和接收窗口
当发送窗口和接收窗口的大小均为1时,该窗口协议就是等待重传协议了,故等待重传协议也叫做ARQ(Automatic Re Transmission Query)
但普通的ARQ信道利用率太低,当发生发送数据包丢失或ACK丢失等时,便会发生超时重传,这样RTT时间会大大增多,使得信道利用率大大降低,便有了连续ARQ和选择重传ARQ
连续ARQ
此时,我们增大发送窗口。大小区间为 ( 1, pow(2, n) - 1 ]
其中n为传输数据的bit数量
当某一个数据帧出错时,即使后面的N个数据帧正确到达,也要被被丢弃。并返回最后一个正确返回的ACK,提示发送方从第一个出错的数据帧处重新发送。
选择重传ARQ
连续ARQ的缺点也非常明显,当数据帧出错时,发送方会回退N帧进行重传,浪费了时间。
为解决这一问题,加大接收窗口和接收缓存,
使用广播信道的数据链路层(CSMA/CD)
局域网的数据链路层
- 局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限
- 主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场
- 可以按照网络拓扑结构对局域网进行分类:
- 星形网
- 环形网
- 总线网
- 树形网
- 数据链路层的两个子层
- 逻辑链路控制 LLC (Logical Link Control)子层
- LLC子层与传输媒体无关,一般不考虑LLC子层
- 媒体接入控制 MAC (Medium Access Control)子层
- 决定谁获得媒体的使用权,即解决问题
- 逻辑链路控制 LLC (Logical Link Control)子层
- 适配器
CSMA/CD协议
-
CSMA (Carries Sense Multiple Access) 是一种具有信道检测功能的分布式介质访问控制方法
-
在坚持CSMA的基础上增加冲突检测CD(Collision Detection)
-
CSMA/CD 表示载波监听多点接入/碰撞检测
- 多点接入: 说明这是总线型网络,许多主机以多点的方式连接到总线上
- 载波监听: 每个主机必须不停的监听信道.在发送前,如果监听到信道正在使用,就必须等待
- 碰撞检测: 在发送中, 如果监听到信道已有其他主机正在发送数据,就表示发生了碰撞.虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞
-
具体实现
- 记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 争用期 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 截断二进制指数退避算法 来确定。从离散的整数集合 {0, 1, …, (pow(2,k)-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间
- 当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告
以太网
以太网是一种计算机局域网技术。IEEE组织的[IEEE 802.3](https://baike.baidu.com/item/IEEE 802.3/3684685)标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是应用最普遍的局域网技术,取代了其他局域网技术如令牌环、FDDI和ARCNET
简单来说,以太网就是一种规范局域网如何工作的标准,也是现在最流行最普及的一套解决方案
使用广播信道的以太网
- 使用集线器的星形拓扑
- 传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线
- 这种以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器(hub)
- 以太网的信道利用率
- 一个帧从开始发送,经可能发生的碰撞后,将再重传数次,到发送成功且信道转为空闲(即再经过时间 τ 使得信道上无信号在传播)时为止,是发送一帧所需的平均时间
- 以太网的MAC层
- MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)
- 一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址
- 以太网帧格式
- 类型 标记上层使用的协议
- 数据 长度在46-1500之间 如果太小则需要填充
- FCS 帧检验序列 使用的是CRC检验方法
扩展的以太网
- 在物理层上扩展
- 用集线器组成更大的局域网都在一个碰撞域中
- 优点
- 使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信
- 扩大了局域网覆盖的地理范围
- 缺点
- 碰撞域增大了,但总的吞吐量并未提高
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来
- 优点
- 用集线器组成更大的局域网都在一个碰撞域中
- 在数据链路层扩展以太网
- 在数据链路层扩展局域网是使用网桥
- 网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发.网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口
- 优点
- 过滤通信量
- 扩大了物理范围
- 提高了可靠性
- 可互连不同物理层、不同 MAC 子层和不同速率(如10 Mb/s 和 100 Mb/s 以太网)的局域网
- 缺点
- 存储转发增加了时延
- 在MAC 子层并没有流量控制功能
- 具有不同 MAC 子层的网段桥接在一起时时延更大
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞。这就是所谓的广播风暴
- 优点
- 网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发.网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口
- 交换机
- 交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射.正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容
- 在数据链路层扩展局域网是使用网桥
虚拟局域网
- 虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。
- 使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网
无线局域网
WLAN(Wireless Local Area Network)
- 采用无线通信技术的局域网
- 提供了移动接入的功能
- 节省投资,建网速度较快
- 支持便携设备联网
CSMA/CA协议
例题
0比特填充法,5个连续1后添加0 接受窗口同时受发送窗口的限制
网际层
网际协议IP
网际协议IP是TCP/IP体系中两个最主要的协议之一.
与之配套使用的还有四个协议:
- 地址解析协议 ARP Address Resolution Protocol
- 逆地址解析协议 RARP Reverse Address Resolution Protocol
- 网际控制报文协议 ICMP Internet Control Message Protocol
- 网际组管理协议 IGMP Internet Group Management Protocol
虚拟互联网络
- 物理层中继系统 转发器
- 数据链路层中继系统 网桥
- 网络层中继系统 路由器
- 网络层以上的中继系统 网关
IP数据包格式
- 版本 : 有 4(IPv4)和 6(IPv6)两个值;
- 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
- 区分服务 : 用来获得更好的服务,一般情况下不使用。
- 总长度 : 包括首部长度和数据部分长度。
- 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
- 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
- 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
- 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
- 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
- IP数据报分片
分类的IP地址
- 分类
- 无分类
- 无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化
- 一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网
地址解析协议 ARP 与逆地址解析协议RARP
-
ARP实现由IP地址得到MAC地址
- 每个主机都有一个ARP高速缓存表,里面有本局域网上的各主机和路由器的IP地址到MAC地址的映射表
- 如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射
-
RARP 使只知道自己硬件地址的主机能够知道其 IP 地址(现已很少使用)
网际报文控制协议ICMP
- ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议\
- ICMP的种类
- ICMP 差错报告报文
- 终点不可达
- 源点抑制(Source quench)
- 时间超过
- 参数问题
- 改变路由(重定向)(Redirect)
- ICMP询问报文
- 回送请求和回答报文
- 时间戳请求和回答报文
- 应用
- Ping 测试连通性
- Traceroute 跟踪一个分组从源点到终点的路径
- ICMP 差错报告报文
路由选择协议
基本概念
- 静态路由选择策略
- 非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化
- 动态路由选择策略
- 自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大
自治系统AS(Autonomous System)
- 在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由
内部网关协议 IGP(Interior Gateway Protocol)
在一个自治系统内部使用的路由选择协议
- RIP
- RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达
- RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址
- OSPF
- 向本自治系统中的所有路由器发送信息,这种方法是洪泛法
- 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示
- 只有当链路状态发生变化时,路由器才会发送信息
外部网关协议BGP(External Gateway Protocol)
- 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中
- AS 之间的路由选择很困难
- 互联网规模很大;
- 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
- AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
- BGP 只能寻找一条比较好的路由,而不是最佳路由
- 每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息
无类别域间路由CIDR(Classless Inter-Domain Routing)
-
无类别域间路由(CIDR) CIDR是开发的一项技术
-
超网合并
- 超网(Super Netting)是与子网类似的概念,IP地址根据子网掩码被分为独立的网络地址和主机地址。与子网划分(把大网络分成若干小网络)相反,它是
- 如上图,原本两个网段的网络部分不相同,子网掩码是/24。将两个网段合并,与子网划分相反,掩码主机位增加,网络位减少,子网掩码向左移动一位,让两个网段的网络位部分相同。合并之后的子网掩码是255.255.254.0,网段是192.168.0.0/23.而且合并之后192.168.0.255也可以作为正常IP使用,不再是广播地址,因为其主机位已经不都是1了。(主机位多了一位0)
- 网段合并规律
- 将子网掩码向左移动N位,合并2的N次方个网段。即子网掩码左移1位能够将能够合并两个网段,左移2位,能够合并四个网段,左移3位,能够合并8个网段
IP多播
- 与单播相比,在一对多的通信中,多播可大大节省网络资源
虚拟专用网VPN和网络地址转换 NAT
-
VPN
-
由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
- 有三个专用地址块:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
- 有三个专用地址块:
-
VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网
-
VPN的实现主要使用了两种基本技术:和
- VPN定义了两个内部网络的路由器之间通过Internet建立的通信隧道,使用IP-in-IP封装后在隧道中转发数据报
- 为了保证保密性,隧道发送路由器把内网IP数据报加密后,封装为外网IP数据报的数据部分在外网中进行传输
- 隧道接收路由器收到数据报后,从外网数据报中取出数据部分,将数据报解密,还原成内网数据报,然后转发该数据报
-
VPN的分类
- 内联网VPN:只是机构内部网络所构成的VPN
- 外联网VPN:有时一个机构的VPN需要又某些外部机构参加进来,这样的VPN即为外联网VPN
- 远程接入VPN:公司员工在外地接入公司的VPN,即可远程接入VPN
-
-
NAT
-
显然为每个主机再申请一个全球IP地址是不现实的,需要使用
- 这种方法需要在专用网连接到因特网的路由器上安装NAT软件,装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IP
- 所有使用本地IP地址的主机在和外界通信时都要在 NAT 路由器上将其本地IP地址转换成外网 IP才能和因特网连接
- 为了更有效的利用NAT路由器的全球IP地址,将传输层的端口号也利用上,这样就可使多个专用网内的主机同时公用一个NAT路由器的全球IP地址,此时叫做
-
例题
运输层
协议概述
进程之间的通信
- 运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
- 两个主机进行通信实际上就是两个主机中的应用进程互相通信。
- 应用进程之间的通信又称为。
两个主要协议
- 用户数据报UDP(User Datagram Protocol)
- 传输控制协议TCP(Transmission Control Protocol)
端口
- 软件端口和硬件端口
- 在协议层间的抽象的协议端口是软件端口
- 路由器或交换机上的端口是硬件端口
- 三类端口
- 熟知端口 0-1023
- 登记端口号 1024-49151
- 客户端口号或短暂端口号 49152-65535
用户数据协议报UDP
UDP概述
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信
- UDP为应用层提供
- :不保证数据从发送端正确地传送到目的端,也无须为应用层数据保存副本,出现问题时(丢包,错序达到等)
UDP协议
只是简单地通知应用程序发送失败。因此,使用UDP协议
的应用程序通常需要自己处理数据确认、超时重传等逻辑 - : 不需要建立连接也可以发送数据。通信双方每次发送数据都需要指定接收端的地址
- :每个UDP数据包都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据将被截断
- :不保证数据从发送端正确地传送到目的端,也无须为应用层数据保存副本,出现问题时(丢包,错序达到等)
UDP首部格式
- 16位源端端口/目的端口
- 16位数据包长度:标志UDP首部与发送数据的长度之和,大小为2^16,即64K
- 16位校验和: 用于校验接受的数据与发送的数据是否一致,不一致则丢弃。
- 校验方法:CRC
基于UDP的协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议、
- DHCP:动态主机配置协议
- BOOTP:启动协议(用于无盘设备启动)
- DNS:域名解析协议
传输控制协议TCP
TCP主要概念
-
TCP协议为应用层提供
- : 通过超时重传、数据确认等方式来确保数据报被正确地发送至目的端
- : 双方都必须先分配必要的内核资源以建立全双工的连接,才能开始数据的读写
- :基于流的数据没有边界限制
-
TCP的连接
- TCP连接的端点叫做套接字(socket)或插口
- Socket = IP: Port
- TCP连接的端点叫做套接字(socket)或插口
TCP首部格式
-
16位源端口/目的端口:表示源端口/目的端口的端口号,源端口有时可以不设置
-
32位序号: 序号是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小。序号不会从 0 或 1 开始,而是在建立连接时由计算机生成的随机数作为其初始值(
ISN
,初始序号值),通过SYN
包 传给接收端主机。后续报文中序号值将被设置为ISN
+报文携带数据的第一个字节在整个字节流中的偏移 。如:后续 某个TCP报文段 传送的数据是字节流中的 第 1025~2048 字节 ,那么该报文段的序号值为ISN
+1025 -
32位确认序号: 对发送端发来的TCP报文段的响应,其值是 。而发送端接收到这个确认序号以后可以认为在确认序号以前的数据都已经被正常接收。TCP通过序号和确认序号来实现包序管理,确保TCP数据是有序交付的
-
4位数据偏移:标识该TCP头部有多少个32bit。所以TCP头部最长是60字节
-
6位保留位:保留今后使用
-
6位标志位
- URG(Urgent Flag):该位为 1 时,表示包中有需要紧急处理的数据
- ACK(Acknowledge): 该位为1时,确认应答的字段变为有效。携带ACK标志的称为确认报文段
- PSH(Push Flag): 该位为1时,表示接收端应该立刻从 TCP接收缓冲区中读走数据,传输给上层的应用。为0时,则不需要立即读取而是先进行缓存
- RST(Reset Flag): 该位为1时,要求接收方重新建立连接。携带RST标志的称为
- SYN(Synchronize Flag):SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。携带SYN标志的称为
- FIN(Finish Flag):该位为 1 时,表示通知对方本端今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为 1 的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。不过,主机收到FIN设置为 1 的TCP端以后不必马上回复一个FIN包,而是可以等到缓冲区中所有数据都已成功发送而被自动删除之后再发。携带FIN标志的称为
-
16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方 还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
-
16位校验和:由发送端填充,用于检验接收的数据(TCP头部+数据部分)与发送的数据是否一致,
- 校验方法:CRC
-
16位紧急指针:是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据(带外数据)的下一个字节的序号
TCP可靠传输
-
基于8种机制
-
确认应答
- 确认报文(ACK报文)是保证数据可靠传输的核心机制
-
延时应答
- 基于确认应答机制,但接收端收到发送端发来的数据后并
- 立即返回ACK应答的话,这时候的接收缓冲区中的数据还没能够处理,缓存区的剩余大小就是窗口大小
- 但实际上应用程序可能很快就会读走接收缓冲区中的内容,因此我们 ,等待缓存区中数据被处理,那么剩余的缓存区就会大些
- 基于确认应答机制,但接收端收到发送端发来的数据后并
-
捎带应答
- 在延时应答的基础上,接受方和发送方都是,所以,我们在发送数据的时候,将ACK以搭顺风车的方式发送给对方
-
超时重传
- 实际网络中会有丢包的可能, ,该定时器在TCP报文段第一次发送时启动。如果未收到接收方的 ,TCP模块将 并
-
滑动窗口
- 已在数据链路层做过介绍
-
流量控制
- 出现原因:接收端处理数据的速度是有限的,如果发送端发的太快,导致接收端的缓冲区满, 这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应
- 解决方案
- TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区
- 发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认
- 接收端将放入 TCP 首部中的,通过ACK报文通知发送端。窗口大小字段越大,说明网络的吞吐量越高
- 发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数
- 如果接收端缓冲区满了,就会将窗口置为0,这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,询问接收端当前
- 如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍
- 🚩而在传输过程中,发送窗口(SWND)的大小并不仅仅取决于接收窗口(RWND),还取决于下文将提到的拥塞窗口(CWND)
-
拥塞控制
-
出现原因:提高网络利用率、降低丢包率,并保证网络资源对每条数据流的公平性
-
组成部分
- 慢开始(slow start)
- 拥塞避免 (congestion avoidance)
- 快速重传(fast retransmit)
- 快速恢复(fast recovery)
-
解决方案
-
基于滑动窗口协议,引入
- 发送窗口(SWND)是接收窗口(RWND)和拥塞窗户(CWND)中的较小值
- 发送开始的时候,定义拥塞窗口初始值为 IW(Initial Window) ,大小为 1个MSS(最大报文长度)
-
慢开始
-
TCP模块一开始并不清楚网络的实际情况,因为需要用一种试探的方式平滑地增加CWND的大小。但慢启动实际上并不慢,
-
为了避免网络拥塞,拥塞控制定义了(slow start threshold size)。当CWND大小超过该值时,TCP拥塞控制将进入拥塞避免阶段
- CWND < SSTHRESH 慢开始算法 指数增大
- CWND > SSTHRESH 拥塞避免算法 加法增加
- CWND = SSTHRESH 两者即可
-
-
拥塞避免
- SSTHRESH = CWND / 2
- CWND = MSS
-
快速重传
- 只要发送方收到三个重复确认(加上一个正常确认,总共发送了4个ACK报文),就立即重传确认序号指向的数据
-
快速恢复
- 当出现了快重传的情况时,就说明当前网络状况存在问题,但是又由于我们能够连续三次收到确认应答,就说明了当前的问题并不是很严重,没有必要重新进行慢开始
- SSTHRESH = CWND / 2
- CWND = SSTHRESH
- 实行拥塞避免算法(跳过了慢开始)
-
-
-
TCP连接管理机制
-
三次握手
-
简单来说,Three-Way Handshake值得就是建立一个TCP连接时,需要客户端与服务端总共发送3个包,以确认双方的接受能力和发送能力是否正常,为后面的可靠性传输做准备。实质上就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息
-
刚开始时,客户端处于关闭状态,服务端处于监听状态
-
🙋♂️第一次握手🙋♀️:给客户端发送一个SYN报文,并指明客户端的初始化序列号ISN。此时客户端处于
SYN_SENT
状态。首部的同步位SYN=1,初始序号SEQ=X,SYN=1的报文段不携带数据,但要消耗掉一个序号 -
🙋♂️第二次握手🙋♀️:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于
SYN_RCVD
的状态 -
🙋♂️第三次握手🙋♀️:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于
ESTABLISHED
状态。服务器收到 ACK 报文之后,也处于ESTABLISHED
状态,此时,双方已建立起了连接 -
为什么是三次,两次不可以吗
- 三次握手的意义
- 第一次 确认 Client有发送能力
- 第二次 确认 Server有接受能力 和 发送能力
- 第三次 确认 Client有接受能力
- 两次首先不能确保Client和Server都具备了发送接受能力,其次举个例子
- 如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源
- 三次握手的意义
-
半连接队列
- Server第一次收到SYN后,处于SYN_RCVD状态。此时双方还没有建立完全连接,服务器会把这种状态下请求连接放在一个队列里,我们将其称为半连接队列
-
ISN不是固定的,是动态生成的,避免黑客攻击
-
三次握手过程携带数据吗
- 第一次和第二次不会携带数据,避免攻击者在SYN报文中塞入大量数据,使服务器崩溃
- 第三次可携带数据。此时客户端已处于ESTABLISED阶段
-
SYN攻击
-
Client在短时间内伪造大量不存在的IP地址,向Server不断发送SYN数据包。Server收到SYN数据包,做ACK确认,并等待Client确认,由于源地址是伪造的,并不存在,因此Server需要不断重复发送ACK。同时,伪造的SYN数据包长时间占用半连接队列,导致队列满被丢弃,引起网络拥塞甚至瘫痪
-
属于典型的DoS/DDoS攻击
-
解决方法
- 可通过命令来检测
netstat -n -p TCP | grep SYN_RECV
- 缩短超时时间
- 增加最大半连接数
- 使用SYN Cookies技术
-
-
-
四次挥手
- 用于终止一个TCP连接
- 刚开始时,双方均处于ESTABLISHED状态
- 🙋♂️第一次挥手🙋♀️:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于
FIN_WAIT1
状态。 即发出(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认 - 🙋♂️第二次挥手🙋♀️:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于
CLOSE_WAIT
状态 - 🙋♂️第三次挥手🙋♀️:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于
LAST_ACK
的状态 - 🙋♂️第四次挥手🙋♀️:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于
TIME_WAIT
状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入CLOSED
状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于CLOSED
状态
- 为什么是四次
- 当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。,因此不能一起发送。故需要四次挥手
- 2MSL等待状态
- TIME_WAIT状态也成为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime),它是任何报文段被丢弃前在网络内的最长时间。这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段
- 等待2MSL的意义
- 保证客户端发送的最后一个ACK报文段能够达到服务端
- 防止已失效的连接请求报文段出现在本连接中
- 客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段
TCP的有限状态机示意图
例题
应用层
域名系统DNS
DNS概述
- DNS是一个分布式数据库,提供了主机名和IP地址之间相互转换的服务。分布式指的是每个站点仅保留它自己的那部分数据
Internet域名结构
- 层次结构,从上至下依次为:根域名、顶级域名、二级域名
域名服务器
- 一个服务器所负责管辖的范围叫做区(zone)
- 每一个区设置的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射
- DNS可以使用UDP或者TCP进行传输,端口号位53.大多数情况下使用UDP传输
DNS劫持(DNS Hijacking)
- 通过劫持DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果。比如将
nuist.edu.cn
的IP修改为某黄色网站IP,给学生带来不好的冲浪体验。或者修改为黑客的钓鱼网站,窃取用户个人信息
DNS污染(DNS Pollution)
- 又名域名服务器缓存污染或者域名服务器快照侵害。指一些刻意制造或无意中制造出来的域名服务器分组,把域名指往不正确的IP地址,这是一种DNS缓存投毒攻击。由于DNS查询没有任何的认证机制,且基于无连接不可靠的UDP协议,因此DNS的查询很容易被篡改
文件传送协议FTP
FTP概述
- FTP是因特网上使用得最广泛的文件传送协议
- FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限
- FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件
基本工作原理
- FTP通过TCP连接,并通过两个连接来传送一个文件
- 控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答
- 数据连接:用来传送一个文件数据
- 根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式
- 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号
- 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机
- 主动模式要求客户端开放端口号给服务