
概述
ISP
互联网服务提供者ISP,又称互联网服务提供商
电路交换
建立连接、通话、释放连接
特点
- 在通话的全部时间内,通话的两个用户始终占用端到端的通信资源
- 线路传输效率低
分组交换
存储转发
优点
高效、灵活、迅速、可靠
计算机网络的性能指标
- 速率:数据的传输速率,bit/s(bps),也称为数据率
- 带宽:1、信号具有的频带宽度,单位赫兹;2、单位时间内网络中某信道所能通过的“最高数据率”,单位bit/s
- 吞吐量:单位时间内通过某个网络的实际数据量
- 时延:数据从网络的一端传送到另一端所需的时间。也成为延迟或迟延
发送时延
主机或路由器发送数据帧所需要的时间,也称传输时延
发送时延=数据帧长度(bit)/发送速率(bit/s)
传播时延
电磁波在信道中传播一定距离需要花费的时间
传播时延=信道长度(m)/电磁波在信道上的传播速率(m/s)
处理时延
主机或路由器在收到分组时需要花费一定时间进行处理
排队时延
分组进入路由器后要先在输入队列中排队等待处理,路由器确定转发接口后,还要在输出队列中排队等待转发
计算机网络体系结构
- OSI:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层
- TCP/IP:应用层、运输层、网际层IP、链路层
- 五层协议的体系结构:应用层、运输层、网络层、数据链路层、物理层
物理层
数据链路层
链路:从一个节点到相邻节点的物理线路
数据链路:链路+通信协议
信道分类
- 点对点信道
- 广播信道
基本问题
封装成帧、透明传输、差错检测
封装成帧
将网络层传下来的分组添加帧首部和尾部,构成一个帧
透明传输
某一个实际存在的事物看起来好像不存在一样
无论什么样的比特组合的数据,都能按照原样没有差错地通过这个数据链路层
差错检测
循环冗余检验CRC,检测比特差错
点对点协议PPP
用户计算机和ISP进行通信时所使用地数据链路层协议
三个组成部分
- 一个将IP数据报封装到串行链路地方法
- 链路控制协议LCP
- 网络控制协议NCP
PPP帧格式

| 协议字段 | 意义 |
|---|---|
| 0x0021 | IP数据报 |
| 0xC021 | LCP的数据 |
| 0x8021 | 网络层控制数据 |
PPP协议的工作状态

建立连接
- 用户拨号接入ISP,建立物理连接
- 用户个人电脑向ISP发送一系列LCP分组,建立LCP连接
- 网络控制协议NCP给新接入的用户分配一个临时的IP地址
连接释放
- NCP释放网络层连接,收回IP地址
- LCP释放数据链路层连接
- 最后释放物理层连接
共享媒体通信资源
静态划分信道
频分复用、时分复用、波分复用、码分复用
动态媒体接入控制
随机接入、受控接入
CSMA/CD协议
CSMA/CD表示载波监听多点接入/碰撞检测
- 多点接入:许多计算机以多点接入的方式连接在一根总线上
- 载波监听:边发送边监听。不管发送数据之前还是发送数据之中,每个站必须不停地检测信道
- 碰撞检测:边发送数据边检测信道上的信号电压的变化情况
单程端到端传播时延记为τ,发送数据的站点最多经过两倍端到端的传播时延(2τ)即可知道是否发生碰撞,2τ称为争用期
截断二进制指数退避算法
- 基本退避时间为争用期2τ
- 从离散的整数集合[0,1,…,(2k-1)]中随机一个数r,重传推后的时间为r倍的争用期。k=Min[重传次数,10]
- 重传16次仍不成功时,丢弃该帧,向高层报告
CSMA/CD要点
- 准备发送:适配器从网络层获得一个分组,添加以太网帧的首部和尾部,组成以太网帧,放入适配器的缓存中。发送之前,先检测信道
- 检测信道:若检测到信道正忙,则继续不停的检测,一直等待信道转为空闲,在96比特时间(帧间最小间隔)内信道保持空闲,就发送这个帧
- 边发送边监听:
- 发送成功:争用期内未检测到碰撞。回到1
- 发送失败:争用期内检测到碰撞。立即停止发送,并按规定发送人为干扰信号。适配器执行指数退避算法,返回步骤2。
- 重传16次不成功,停止重传并向高层报告
网络层
静态路由和动态路由
- 静态路由时由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓扑结构不经常变化的网络。其缺点是不能动态地适应网络的变化,当网络状况变化后必须由网络管理员修改路由表
- 动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时跟新路由表的内容。动态路由可以自动学习网络的拓扑结构,并更新路由表。其缺点是路由广播信息将占据大量网络带宽
传输层
两个协议:用户数据报协议UDP、传输控制协议TCP
UDP
- UDP是无连接的
- 尽最大努力交付
- 面向报文
- 无拥塞控制
- 支持一对一,一对多,多对一和多对多通信
- 首部开销小
TCP
- 面向连接
- 点对点
- 可靠交付
- 全双工
- 面向字节流
可靠传输工作原理
停止等待协议:每发送完一个分组就停止发送,等待对方的确认,收到确认后发送下一个分组
- 无差错
- 出现差错接收方丢弃分组;超时重传,发送方等待确认,超时后重传分组
- 确认丢失和确认迟到
连续ARQ协议
累积确认:对按序到达的最后一个分组发送确认
TCP报文首部格式
TCP报文格式
- 确认号:期望收到对方下一个报文段的第一个数据字节的序号
- 紧急URG
- 确认ACK
- 推送PSH
- 复位RST
- 同步SYN
- 终止FIN
TCP流量控制
发送方窗口不能超过接收方给出的接收窗口的数值
TCP拥塞控制
- 慢开始
- 拥塞避免
- 快重传
- 快恢复

TCP连接建立
三次握手
- 最初两端的TCP进程都处于CLOSED(关闭)状态,A主动打开连接,B被动打开
- B的TCP服务器进程先创建传输控制快TCB,准备接受客户进程的连接请求,然后服务器进程就处于LISTEN(收听)状态
- 一次握手:A的TCP客户进程也是首先创建传输控制块TCB,A向B发送连接请求报文段,同步位SYN=1,同时选择一个初始序号seq=x。SYN报文段不能携带数据,但要消耗掉一个序号,TCP客户进程进入SYN-SENT(同步已发送状态)
- 二次握手:B接受连接请求后,同意建立连接,向A发送确认,SYN和ACK位都置1,确认号ack=x+1,选择一个初始序号seq=y。TCP服务进程进入SYN-RCVD(同步收到)状态
- 三次握手:TCP客户进程收到B的确认后,向B发送确认,确认报文ACK置1,确认号ack=y+1,自己的序号seq=x+1。ACK报文段可以携带数据,不携带数据不消耗序号。TCP连接建立,A进入ESTABLISHED(已建立连接)状态
- B收到A的确认后,也进入ESTABLISHED状态
TCP连接释放
四次挥手
- 一次挥手:初始A和B处于ESTABLISHED状态。A向B发出连接释放报文,并停止发送数据,主动关闭TCP连接。A把连接释放报文首部的终止控制位FIN置1,序号seq=u。A进入FIN-WAIT-1(终止等待1)状态。FIN不携带数据,消耗掉一个序号
- 二次挥手:B收到连接释放报文后即发出确认,确认号ack=u+1,学号seq=v。B进入CLOSE-WAIT(关闭等待)状态
- A收到B的确认后进入FIN-WAIT-2(终止等待2)状态。等待B发出的连接释放报文
- 三次挥手:B没有向A发送的数据,B向A发出连接释放报文,FIN=1,假定序号seq=w,重复发送过的确认号ack=u+1。B进入LAST-ACK(最后确认)状态
- 四次挥手:A收到B的连接释放报文后,对此发出确认,确认报文段ACK置1,确认号ack=w+1,序号seq=u+1。A进入TIME-WAIT(时间等待)状态。等待2MSL时间进入CLOSE状态
TCP粘包、拆包问题
原因
- 拆包
- 要发送的数据大于TCP发送缓冲区的大小,将会发生拆包
- 要发送的数据大于最大报文段长度MSS
- 粘包
- 要发送的数据小于发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去将会发生粘包
- 接收端的应用层没有及时的读取接受缓冲区的数据
解决方法
- 发送端给每个数据包添加首部,首部中包含数据包的长度,这样接收端在收到数据后,通过读取首部长度字段便知道每个数据包的实际长度
- 发送端将每个包封装为固定长度,不足的补0,接收端从接收缓冲区读取固定长度的数据
- 在数据之间设置边界,如特殊符号,接收端通过边界拆分不同的数据包