概述
计算机网络
- 互联,自治设备的集合
- 功能组成上分为通信子网和资源子网
- 评价指标包括带宽和时延
- 协议定义两个对象之间交换报文格式及其响应
- 协议的三要素包括语法,语义和同步
- 从结构上划分为网络边缘,网络核心和接入网
功能
- 数据通信:最基本最重要的功能
- 资源共享
- 分布式处理
- 提高可靠性
- 负载均衡
参考模型
协议,服务和接口是关键。传输层(含)之上的称为端到端层。
OSI
- 应用层:用户与网络的界面
- 表示层:数据压缩、加密解密、数据交换
- 会话层:建立、管理和终止会话,完成同步
- 运输层:进程通信,可靠数据传输、流量控制、差错控制、服务质量、数据传输管理
- 网络层:传输数据报,实现流量控制、拥塞控制、差错控制和网际互连
- 链路层:组帧,差错检测、流量控制和传输管理
- 物理层:透明传输比特流
TCP/IP协议栈
- 应用层
- 运输层
- 网络层
- 链路层
- 物理层
应用层
原理
体系结构
- C/S体系结构:一个长期在线的服务器和若干客户端
- P2P:间断连接的主机之间直接通信
- 混合式
进程通信
- 网络中标识一个应用进程的信息包括端口号和IP地址。
- TCP提供可靠的数据传输,无差错、有序,同时有阻塞控制机制
- UDP是轻量级服务,提供不可靠的数据传输,不保证顺序和到达
HTTP
WebPage由对象组成,对象包括各种文件(html, jpg, etc.)
HTTP基于TCP,无状态记录。HTTP默认使用持续连接,但也可使用非持续连接。
对于非持续连接,每个TCP连接只传输一个对象就关闭,每个连接用时2个RTT+对象传输时间(RTT:往返时间,即一次客户与服务器通信所需的时间, 一个RTT用于前两次握手,第二个用于请求)。
HTTP1.1采用持续连接,如果采用流水线,甚至可以不等待响应就发送请求。
cookie使得HTTP拥有了身份识别等功能。
电子邮件
常用协议SMTP:
- 只支持7位ASCII码(可通过MIME来传输二进制内容)
- 一般不使用中间邮件服务器
- 使用只包含'.'(CRLF.CRLF)的行来表示邮件内容结 束
- 端口25
另有POP3,IMAP,基于TCP;POP协议不加密。
DNS
- 基于UDP,端口53
- 负责主机名到IP,主机别名、邮件服务器别名到主机名的转换
- DNS还可实现负载分配
- 分布式、分层存储
DNS查询路径
- 根DNS服务器:提供顶级域名服务器的地址
- 顶级域(com, org, edu, cn, etc.)都有对应的TLD顶级域服务器,其提供权威DNS服务器的IP
- 权威DNS服务器提供每个组织机构的所有主机名
- 本地DNS服务器:代理本地机器,进行查询
查询方式
- 递归查询:DNS客户端和本地DNS服务器之间,DNS客户端直接获得结果的过程
- 迭代查询:本地DNS服务器和其它服务器间,依次查询各级服务器地址的过程
DNS资源记录(RR)
RR=(Name, Value, Type, TTL)
Type取值及含义:
- A 主机名到IP的映射
- NS 域到权威服务器名称的映射
- CNAME 别名到规范主机名的映射
- MX 邮件服务器别名到规范主机名的映射
DNS报文格式
- 前12字节是首部,包含标识符,标志(问/答、以及查询方式等),以及后面几个段的大小
- 问题,包含查询的名称和类型
- 回答,响应查询的RR
- 权威,权威服务器的记录
- 附加信息
P2P文件分发
BitTorrent中所有对等方的集合称为一个洪流,互相下载文件块,下载顺序采用最稀缺优先技术。
FTP
- 两条TCP连接
- 控制连接21,数据连接20
- 跨平台,允许指明文件格式、权限和类型
- 控制信息全部使用7位ASCII,带外传送;控制连接始终联通。
- 匿名ftp可使用anonymous用户
Telnet
- TCP-23
传输层
- 主机才会有
- 进程间的逻辑通信
- 复用和分用
- 差错检测
多路复用和多路分解
不同端口->主机间的IP连接->不同端口
UDP
- 无连接
- 面向报文,每次发送完整的一个报文
- 不保证可靠交付
- 无拥塞控制,适合实时应用
UDP报文结构
头部4*2字节
- 2字节源端口号
- 2字节目的端口号
- 2字节长度(总长度)
- 2字节校验和(包含了伪首部:源IP,目的IP,协议号,全0一字节,UDP长度2字节)
UDP检验和
先对所有16-bit字进行求和,反码加法-溢出的1回卷(加到最低位),然后取反码,称为UDP校验和。 接收方将所有16-bit字进行求和并加上校验和,若获得0xFFFF则说明大概无差错
校验和并 非必须。如果不使用校验和,则将该字段置0.如果校验和结果为0,则将此字段置全1.
TCP
- 面向连接
- 点对点
- 可靠有序,不丢不重
- 全双工(双缓存)
- 面向字节流
TCP首部
20B固定首部:
- 2B源端口,2B目的端口
- 4B序号(本报文第一个字节的序号)
- 4B确认号(期望收到下一个报文的第一个字节序号)
- 1B数据偏移(TCP首部长度),单位4B
- 6位控制位:
- URG紧急位,配合紧急指针使用;无需排队
- ACK确认位;确认号有效。
- *PSH推送位;接收方尽快交付数据至应用进程
- *RST复位;连接中出现严重差错,必须释放连接再重新建立
- SYN同步位;标识连接请求/接受报文
- FIN终止位:发送方数据发送完毕,请求释放连接
- 2字节当前发送方的接收窗口大小
- 2字节检验和,和UDP相似(仅协议不同)
- 2字节紧急指针,指出紧急数据的字节数
还可包含长度可变的选项;总长度4B对齐。
TCP连接管理
- C/S模式
- 连接
- 客户端发送连接请求(SYN=1,seq=x)
- 服务端发送连接请求确认(SYN=1,ACK=1,seq=y,ack=x+1), 同时分配缓存和变量
- 客户端分配缓存和变量,发送确认(SYN=0,ACK=1,seq=x+1,ack=y+1),可携带数据
- 洪泛式攻击
- 断开
- 双方均可发起断开,设发起方为客户端
- 客户端发送连接释放报文段(FIN=1,seq=u)
- 服务端回送确认(ACK=1,seq=v,ack=u+1),客户到服务器的连接释放(半关闭)
- 服务端发送释放报文段(FIN=1,ACK=1,seq=w,ack=u+1)
- 客户端回送确认(ACK=1,seq=u+1,ack=w+1),等待计时器结束后彻底关闭连接
TCP可靠数据传输
- 保证双方字节流完全一致
- 累积确认
- 超时重传
- 自适应算法计算超时时间
- 快速重传:三个冗余ACK直接重传
TCP流量控制
- 基于滑动窗口
- 接收方根据接收缓存大小,通知发送方
- rwnd=0则不允许发送方继续发送新数据,但是可以重传旧的。
- 当收到0通知窗口时,持续计时器启动。计时器到期时,发送零窗口探测报文段;如果仍收到0,则重新设置持续计时器。
TCP拥塞控制
- 全局性问题,针对堵塞
慢开始&拥塞避免
- 默认cwnd=1
- 慢开始:在小于拥塞阈值时,指数增长
- 拥塞避免:在大于等于拥塞阈值时,一次增加一个MSS
- 当网络拥塞(超时)时,立即修改窗口为cwnd=1;然后新的拥塞阈值是刚才拥塞发生时窗口的值的一半
快重传&快恢复
- 收到了三个ACK时,执行快重传算法
- 快重传将cwnd调为新的拥塞阈值(刚才窗口的值的一半)
- 如此可以避免超时导致的慢开始,因此称为快恢复
题型
- 求某网络的最大cwnd尺寸(按段长度记录)
- 总是在拥塞避免阶段,求平均CWND和平均吞吐量,
- 窗口恢复时间
- 求估计RTT
- 信道效率:
网络层
网络层概述
网络层实际上有多种协议:IPv4和IPv6。
网络层功能
- 路由选择与分组转发
- 异构网络互联
- 拥塞控制
数据交换
电路交换
如:电话网络。
- 独占资源,使用效率低
- 延迟小,实时性强
- 无冲突,有序传输
- 灵活性差,无差错控制
报文交换
完整的报文被一次性从一个节点发送到下一处节点。未传输完成前,信息不会继续向下流动。
储存-转发是分组交换和报文交换的基本工作方式。
- 无需建立连接
- 动态分配线路
- 线路可靠性和利用性高
- 多目标服务
- 报文大小不稳定
- 有存储转发时延
分组交换
完整的报文被分组地进行报文交换。具有更高的效率,但是可能会导致额外的排队开销时延和丢包(排队缓冲区溢出)。
其中N为路径数,即节点数(含始末)-1;L为分组大小,R为传输速率
- 无需建立连接
- 动态分配线路
- 线路可靠性和利用性高
- 储存管理更容 易
- 有存储转发时延
- 额外传输的信息量
- 乱序到达时,需要重新排序
数据报与虚电路
- 都属于分组交换
- 虚电路提供连接服务
- 分组只携带虚电路编号
- 所有结点都维护相关信息
- 可永久可临时
- 数据报提供无连接服务
- 每个分组携带源和目的地址
- 路由器根据目的地址进行转发
路由算法
静态/非自适应算法
- 简便可靠
- 变化不大的网络中运行效果好
- 路由更新慢,不适合大型网络
动态/自适应算法
- 路由器之间交换信息
- 更新快,适合大型网络
- 算法复杂,增加网络负担
RIP协议/距离向量算法
- 适用于小网络
- 每个路由器维护到每一个目的网络的唯一最佳距离(跳数)记录
- 最多包含15个路由器
- 距离16表示不可达
- 仅和相邻的路由器交换自己的路由表
- 30s交换一次信息,然后根据信息更新路由表;如果超过180s没有收到邻居通告,则认为邻居丢失(更新路由表)