计算机网络
主要内容
- 计算机网络和互联网
- 应用层
- 传输层
- 网络层:数据平面
- 网络层:控制平面
- 数据链路层和局域网
- 网络安全
- 无线和移动网络
- 多媒体网络
- 网络管理
计算机网络和互联网
什么是互联网: 分布式的应用和支持分布式应用提供通讯服务的基础设施
网络边缘
- 主机
- 应用程序
网络核心
- 互联的路由器
- 网络的网络
接入网
- 有线或无线通信链路
物理媒体
Internet 结构和ISP
端系统通过ISPs连接到互联网
互联网的结构是网络的网络
分组延时、丢失和吞吐量
分组延时:分组排队产生延时
- 节点处理延时
- 检查bit级差错
- 检查分组首部和决定将组导向何处
- 微秒数量级或者更少
- 排队延时
- 在输出链路上等待传输的时间
- 取决于路由器的拥塞程度
- 传输延时
- R=链路带宽
- L=分组长度
- 将分组发送到链路上的时间为L/R
- 存储转发延时
- 微秒数量级到毫秒级
- 传播延时
- d=物理链路长度
- s=媒体传播速度(2*10^8 m/s)
- 传播延时为d/s
- 几微秒到几百毫秒
丢失:分组到达时,没有可用的缓冲区,分组就会被丢掉
吞吐量:在源端和目标端之间传输的速率(数据量/时间)
瞬间吞吐量:在一个时间点的速率
平均吞吐量:在一段时间内的平均值
协议层次和服务模型
计算机网络是一个复杂的系统
层次化的方式可以实现这种复杂的网络功能
- 如:大洋两岸的哲学家交流,通过他们的翻译人员,将见解翻译成同一种语言,再通过通讯人员传输见解,达到交流的目的
将网络功能明确分层,每一层实现其中一个或一组功能,功能中有上层可以使用的功能——服务
本层协议实体相互执行本层的协议动作,实现本层功能,通过接口为上层提供更好的服务
利用下层提供的服务,实现本层协议
本层的服务,借助下层服务实现的本层协议实体之间交互带来的新功能+更下层所提供的服务
Internet协议栈
- 应用层:网络应用
- 为人类或其他进程提供网络应用服务
- 如:ftp,smtp,http,dns
- 传输层:主机之间的数据传输
- 在网络层提供的端到端通信基础上,细分为进程到线程,将不可靠的通信变成可靠通信
- 如:TCP,UDP
- 网络层:为数据从源到目的选择路由
- 主机到主机之间或端到端的通信,不可靠
- 如:IP,路由协议
- 链路层:相邻网络节点之间的数据传输
- 两个相邻点的通信,可靠或不可靠
- 如:PPP,802.11(wifi),Ethernet
- 物理层:在线路上传输bit
应用层协议原理
网络应用的原理:
- 网络应用协议的概念和实现方面
- 传输层的服务模型
- 客户-服务器模式
- 可扩展性差
- 可靠性差
- 服务一直在线,等需要时直接访问,但想要扩展比较难
- 对等模式(p2p)
- 难以管理,任意节点之间都可以通信,每个节点都可以上线和下线,节点上线时告诉服务器已经上线
- Napster(cs架构和p2p组合)
- 各个节点上线时,告诉分发服务器已上线并说明自己所拥有的资源,当有客户想要访问资源时,请求服务器,服务器告诉客户,在哪个节点上有,客户再访问目标节点,获取资源
- 经典例子:迅雷
进程通信
- 进程:在主机上运行的应用程序
- 在同一主机内,进程之前使用操作系统定义的进程间通信机制通信
- 不同主机,通过交换报文进行通信
分布式进程通信需要解决的问题
- 进程标识和寻址
- 传输层-应用层提供的服务如何进行
- 位置:层间界面的SAP
- 形式:应用程序接口API
- 每次传输都携带大量信息,繁琐不便于管理,使用socket本地标识双方的通信关系,TCP socket:源IP,源端口,目标IP,目标端口
- 如何使用传输层提供的协议,实现报文交换
TCP:
- 可靠,一般用于文件和邮件的传输协议
- 流量控制:发送方不会淹没接收方
- 拥塞控制:网络拥堵时,能抑制发送方
- 时间保证,最小吞吐量保证和安全
- 客户端和服务端之间需要建立连接
UDP:
- 不可靠传输,一般用于音视频的传输
网络应用的实例:
- 互联网流行的应用层协议
- HTTP
- FTP
- 默认21端口
- telnet默认23端口
- web默认80端口
- 默认21端口
- SMTP/POP3/IMAP
- DNS
编程:
- Socket API
web和HTTP
web:由一些对象组成,对象可以是HTML文件,图像 ,Java程序,音视频等
web页包含一个最基本的html文件,文件中会包含若干对象的引用
每个对象都通过url进行引用
url:通用资源定位符,由以下部分组成
- 协议名
- 用户
- 口令
- 主机名
- 路径名
- 端口
HTTP超文本传输协议
HTTP基于TCP协议,是不稳定的
用户和服务器的状态:cookies
客户端第一次访问服务端,服务端创建一个新的cookies,存储在服务端,并给客户端返回cookies ,客户端再次访问时,携带cookies,就能建立长期连接
FTP
默认端口号为21
流程:
- 客户端与服务器通过21端口联系,使用TCP协议
- 客户端通过连接控制获得身份确认
- 客户端通过连接控制发送命令浏览远程目录
- 服务器收到文件传输命令时,服务器打开数据连接
- 文件传输完成后,服务器关闭连接
- 服务器会打开第二个TCP连接用于传输第二个文件
- 服务器会维护用户的状态信息
默认端口25
组成部分:
- 用户代理
- 第三方软件,又叫邮件阅读器,如outlook
- 邮件服务器
- 邮箱中管理和维护发给用户的邮件
- 邮件传输协议:SMTP
- 发送email报文
传输的三个阶段:
- 握手
- 传输报文
- 关闭
DNS域名解析
为其他应用服务的应用,提供域名到ip地址的转换服务
IP地址用于标识网络上的地址,但是不便于记忆和使用,人们更加偏向于使用有意义的字符串来标识地址,于是IP地址和字符串的映射关系就很有必要
工作原理:
- 分层命名
- 分布式数据库
目的:
- 主机名到IP地址的转换
- 主机别名到规范名的转换
- 负载均衡
域名分层:
如:www.baidu.com.cn ,从后往前看,每一个域管理其下的子域,也就是右边管理左边,域之间以点分隔,域的划分是逻辑的,不是物理的
TTL:time to leave 失效时间
P2P应用
集中化目录:在应用中存放资源目录,各个客户端又充当着服务器的角色,从而达到文件共享
完全分布式:
混合体:
CDN
上下文
多媒体传输方式:
- CBR:以固定的速率编码
- VBR:视频编码速率随时间的变化而变化
存储视频的流化服务:
之前是将视频整个下载完成之后再播放,时效性差,体验不好,所以流化,先下载一部分到缓冲区,下载完这一部分就开始播放,然后播放的同时下载后面的部分
视频流化DASH:智能地请求对应的资源
将视频均等切割为若干小块,每个小块以多种码率编码,根据下载的带宽以及其他情况,可以随时切换编码块,选择高码率下载还是低码率下载
cdn:网络内容分发
在全球部署很多缓存节点,将内容预先部署到缓存中,客户访问时,通过域名解析重定位找到离客户最近的缓存节点提供服务,解决客户群体较大,服务器和带宽限制问题
目的:让内容靠近客户
TCP套接字(socket)编程
TCP建立socket连接的流程:
- 服务端创建welcomeSocket
- 绑定本地IP和端口号
- 建立connectSocket等待客户端的连接请求
- 创建客户端的socket
- 绑定客户端的IP和端口号
- 指定服务端的IP和端口号
- 客户端向服务器端发起连接请求
- 服务器端应答,socket连接建立
- 客户端发送
UDP套接字(socket)编程
udp建立socket连接的流程:
- 服务器建立ServerSocket
- 绑定本地的IP和端口号
- 建立connectSocket等待客户端的连接请求
- 创建客户端的socket
- 绑定客户端的IP和端口号
概述和传输层服务
多路复用和解复用
发送方主机的多路复用:
从多个socket接收来自多个进程的报文,根据socket对应的IP地址和端口号等信息对报文段用头部加以封装(头部信息用以解复用)
接收方主机多路解复用:
根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的socket和对应的应用进程
UDP
用户数据报协议