概述
什么是网络
节点和边,和大小形状无关
- 神经元网络
计算机网络
节点
-
主机节点
-
数据交换节点(交换机、路由器)
把节点连到一起的是链路
边:通信链路
- 接入网链路:主机连接到互联网的链路
- 主干链路:路由器间的链路
协议
什么是互联网Internet
从构成角度看
-
数以亿计的、互联的计算设备
- 主机(端系统)
- 运行网络应用程序
-
通信链路
- 光纤、同轴电缆、无线电、卫星
- 传输速率 带宽(bps)
-
协议(控制发送接收消息):对等层的实体在通信时要遵守的规范的集合叫协议
- TCP
- IP
- HTTP
协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输/接收其他事件方面所采取的动作
从服务角度看
- 使用通信设施进行通信的分布式应用
- Web
- 游戏
- 通信基础设施为应用提供通信服务
- 将发送和接收数据的应用与互联网连接起来
- 为应用提供服务选择
- 无连接的不可靠服务
- 面向连接的可靠服务
网络结构
- 网络边缘
- 主机
- 应用程序
- 网络核心
- 互连的路由器
- 网络的网络
- 接入网、物理实体
- 有线/无线通信链路
网络边缘
端系统(主机)
- 运行的应用程序
网络通信的两种方式
C/S (客户/服务器)模式
- 客户端向服务器发送请求接收服务
P2P(peer to peer)对等模式
- 很少(甚至没有)专门的服务器
网络之间通信的两种协议
采用网络设施的面向连接服务
TCP(Transmission Control Protocol)
- 可靠地、按顺序地传送数据
- 确认和重传
- 流量控制
- 发送方不会淹没接收方
- 拥塞控制
- 当网络拥塞时,发送方降低发送速率
采用基础设施的无连接服务
UDP(User Datagram Protocol)
- 无连接
- 不可靠的数据传输
- 无流量控制
- 无拥塞控制
使用TCP的应用
HTTP,FTP,Telnet,STMP
使用UDP的应用
流媒体、远程会议、DNS、Internet电话
网络核心
路由器的网状网络
基本问题:数据怎样通过网络进行传输
- 电路交换: 为每个呼叫预留一条专有线路
- 分组交换
- 将要传输的数据分为一个个单位:分组
- 将分组从一个路由器传到相邻路由器,一段段地最终从源端传到目标端
- 每段:采用链路的最大传输能力(带宽)
电路交换
端到端的资源被分配给 从源端到目标端的呼叫 “call”:
- 独享资源:每个呼叫一旦建立起来就能够保证性能
- 资源浪费:不共享,如果呼叫没有数据发送,被分配的资源就会被浪费
- 通常被传统电话网络采用
网络资源被分成片:
- 为呼叫分配片:比如将带宽分为24份,固定某次呼叫占用24份的其中一份
- 如果某个呼叫没有数据则其资源片处于空闲状态(不共享)
- 将带宽分成片
- 频分(FDM,Frequency-division multiplexing)
- 时分(TDM,Time-division multiplexing)
- 波分(WDM,(Wave-division multiplexing)
电路交换不是适合计算机之间的通信
- 连接建立时间长
- 计算机之间的通信有突发性,如果使用线路交换则浪费的片较多
- 即使这个呼叫没有数据传递,其所占据的片也不能够被别的呼叫使用
分组交换
以分组为单位的存储-转发方式:
- 网络带宽资源不再分为一个个片,传输时使用全部带宽
- 主机之间传输的数据被分为一个个分组
- 存储-转发:
- 再转发之前,节点必须收到整个分组
- 延迟比线路交换大
- 若到达速率>链路的输出速率
- 需要额外的排队时间
- 若路由器的缓存用完了分组将会被抛弃
- 分组的存储转发一段一段从源端传到目标端,按照有无网络层的连接,分成:
- 数据报网络:类似寄信,无连接
- 分组的目标地址决定下一跳
- 在不同的阶段,路由可以改变类似于问路
- 虚电路网络:类似打电话
- 每个分组都带标签(虚电路标识 VC ID ),标签决定下一跳
- 在呼叫建立时决定路径,在整个呼叫中路径保持不变
- 路由器维持每个呼叫的状态信息
- 数据报网络:类似寄信,无连接
网络核心的关键功能
路由:决定分组采用的源到目标的路径
转发:将分组从路由器的输入链路转移到输出链路
分组交换对比电路交换
同样的网络资源,分组交换允许更多用户使用网络
- 适合于对突发式数据传输
- 资源共享
- 简单,不必建立呼叫
- 过度使用会造成网络拥塞:分组延时和丢失
- 对可靠地数据传输需要协议来约束:拥塞控制z
接入网和物理媒体
Internet结构:网络的网络
分组延时、丢失和吞吐量
四种分组延迟
应用层
网络应用程序体系结构
客户-服务器模式
- 服务器:
- 一直运行
- 固定的IP和周知的端口号
- 扩展性较差,数据中心进行扩展
- 客户端
- 主动与服务器通信
- 与互联网间歇性的连接
- 可能是动态的ip地址
- 不直接与其他客户端通信
P2P(Peer to Peer)
- 几乎没有一直运行的服务器
- 任意端系统之间可以进行通信
- 每一个节点即使客户端也是服务器
- 自扩展性: 新节点带来新的服务能力,也带来新的服务请求
- 参与的主机间歇性连接且可以改变 IP 地址
- 难以管理
进程通信
(端系统之间进行通信的实际上是进程而不是程序。一个进程可以被认为是运行在端系统中的一个程序。)???
两个不同端系统上的进程通关跨域计算机网络交换报文进行相互通信
socket
进程通过一个称为套接字socket的软件接口向网络发送报文和从网络接收报文。可以理解成仓库、分拣器与传送带,仓库就是进程可以发送和接收文件,分拣器相当于socket把货物从传送带上放入仓库或把仓库中的货物放到传送带上,传送带就是传送货物的协议(TCP or UDP …)
应用程序开发者可以控制套接字在应用层的的一切,却对运输层几乎没有控制权。
应用程序开发者对于运输层的控制仅限于:
- 选择运输层协议
- 设定几个运输层参数
进程寻址
我们使用ip+port来定位目的地
因特网提供的运输服务
TCP
-
面向连接的服务
在应用层数据报文开始流动之前,TCP让客户端和服务端相互交换运输层控制信息,此阶段结束后会在他们之间建立起一个TCP连接
-
可靠的数据传送服务
通信进程能依靠TCP无差错按适当顺序交付所有发送的数据
UDP
-
是一种不提供不必要服务的轻量级运输协议,仅提供最小服务
-
无连接
-
不保证将报文送达,也有可能是乱序到达
Web(应用)和HTTP(协议)
Web
Web页面由对象组成,对象只是个文件(HTML文件、JPEG图形…),且他们可以通过一个URL地址寻址。
Web浏览器实现了HTTP的客户端
Web服务器失恋了HTTP的服务端,用于存储Web对象
HTTP
Web的应用层协议HTTP(HyperText Transfer Protocol)超文本传输协议
HTTP由两个程序实现:一个客户程序和一个服务程序,这两个程序运行在不同的端系统之间,通过交换HTTP报文进行会话
HTTP定义了Web客户端向Web服务器请求Web页面的方式,以及Web S向Web C传送Web页面的方式
HTTP使用TCP作为他的支撑运输协议
HTTP不保存关于客户的任何信息,所以说HTTP是一个无状态协议
持续连接和非持续连接
- 持续连接
- 服务器在发送完响应后依然保持TCP连接打开,在形同的的客户端与服务器之间的后续请求可以通过相同的TCP连接进行传送
- 一般来说,弱国一条连接经过一定的时间间隔(可以配置)仍未被使用,HTTP服务器就关闭该连接
- 非持续连接
- 每个TCP连接在服务器发送一个对象后就关闭连接
HTTP报文格式
请求报文
GET /x/space/upstat?mid=410739029&jsonp=jsonp HTTP/1.1
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
host: api.bilibili.com
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
第一行叫请求行,后继的行脚首部行
请求行包括方法字段、URL字段、HTTP版本字段
响应报文
Web缓存
Web缓存器也叫代理服务器,他能代表初始HTP服务其来满足HTTP请求的网络实体
部署Web缓存器的两个原因:
- Web缓存器可以大大减少对客户请求的响应时间
- 可以大大减少一个机构的接入链路到因特网的通信量
条件GET方法
缓存引入的新问题:Web缓存器中的对象副本可能是陈旧的
条件GET方法可以允许缓存器证实对象是最新的
通过给首部行中添加一个If-Modified-Since值是副本上次修改的时间,通过和Web服务器上该对象的修改时间进行对比来判断对象是否最新
与GET方法不同的是若副本就是最新的那么服务器的响应不会在此携带该对象,以减少带宽浪费
文件传输协议:FTP
电子邮件
SMTP
使用TCP
邮件报文(包括体部分)只能采用简单的7比特ASCII表示
STMP一般不使用中间邮件服务器发送邮件
对比HTTP
HTTP是一个拉协议,用户使用HTTP从服务器上拉取,TCP连接由用户建立
SMTP是一个推协议,发送邮件服务器把邮件推向接收邮件服务器,TCP连接由发送该文件的机器建立
SMTP要求报文(包括体部分)只能采用简单的7比特ASCII表示
HTTP不受限制
邮件访问协议
现在邮件访问使用了CS体系结构,用户在端系统运行客户程序来阅读电子邮件
如何通过用户代理获取邮件服务器上的邮件呢
通过邮件访问协议
POP3
POP3按照3个阶段进行工作:特许、事务处理和更新
特许:通过用户名和口令鉴别用户
事务处理:用户取回报文,还能对报文做删除标记或取消删除标记以及获取邮件的统计信息
更新:用户发出quit命令后结束POP3会话,删除被标记删除的报文
IMAP
基于Web的电子邮件
DNS: 因特网的目录服务
必要性
- IP地址标识主机路由器
- IP地址不适合人类记忆
- 人类倾向于使用有意义的字符串来表示互联网上的设备
- 因此存在IP与字符串互相转换的需求
作用
- IP地址与字符串转换
- 主机别名
- 邮件服务器别名
- 负载分配
DNS主要思路
分层的基于域的命名机制
若干分布式的数据库完成名字到 IP 地址的转换
运行在 UDP 之上端口号为 53 的应用服务
核心的 Internet 功能,但以应用层协议实现
DNS服务器结构
分布式数据库
还有一类重要的DNS叫本地DNS服务器也叫默认名字服务器,每个ISP都有一台本地DNS服务器,并不严格属于层次结构
名字解析过程
先找本地DNS服务器当与本地名字服务器不能解析名字时,联系根名字服务器顺着根 -TLD 一直找到 权威名字服务器
DNS缓存
一旦名字服务器学到了一个映射,就将该映射缓存起来
根服务器通常都在本地服务器中缓存着,使得根服务器不用经常被访问
可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致
解决方案: TTL (默认 2 天)
DNS记录和报文
DNS服务器存储了资源记录,资源记录提供了主机名到IP地址的映射
资源记录包含下列4个字段
Name & Value:取决于Type
Type:
Type = A,Name为主机名、Value为对应IP地址 (relay1.bar.foo.com,145.37.93.126,A)
Type = NS,Name为域(foo.com),Value是个知道如何获取该域中主机IP地址的权威DNS服务器的主机名(foo.com,dns.foo.com,NS)
Type = CNAME ,Value是别名为Name的主机名对应的规范主机名(foo.com,relay1.bar.foo.com,CNAME)
Type = MX,Value 是别名为Name的邮件服务器的规范主机名
TTL:该记录的生存时间,决定了资源记录应当从缓存中删除的时间