计算机网络
教材:
计算机网络-自顶向下方法第七版
Computer networking_ a top-down approach-Pearson (2017)
计算机网络(第五版)—— Andrew S.Tanenbaum, David J.Wetherall
视频:
中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
课程主要内容
- 计算机网络和互联网
- 应用层
- 传输层
- 网络层:数据平面
- 网络层:控制平面
- 数据链路层和局域网
- 网络安全
- 无线和移动网络
- 多媒体网络
- 网络管理
每一章大致分为两部分,前半部分介绍这一层次的原理,包括这一层次的主要功能和提供的服务。每一层的功能都通过向上层提供的接口向上层提供服务,然后是这个功能借助于下层所提供的服务怎么样在功能实体的内部通过软硬件的安排来实现这个功能;后半部分为实例部分,以互联网当前这个层次用的比较多的协议作为例子来讲解。
Chapter 1 Computer Networks and the Internet
在本章中将概述计算机网络和互联网
This first chapter presents a broad overview of computer networking and the Internet. The goal is to paint a broad picture and set the context for the rest of this book.
脉络:
- 介绍一些terminology(基本术语)和概念。
- 研究构成网络的基本的硬件、软件组件。
- 从the network’s edge开始,研究在网络中运行的end systems(端系统)和network applications(网络应用程序)。
- 探索the core of a computer network,研究传输数据的links、switches,以及连接end systems和the network core的the access networks 和 physical media。认识到互联网是网络的网络,并了解这些网络是如何与彼此相连的。
- 研究计算机网络中的delay, loss, and throughput of data和提供端到端吞吐量和延迟的简单定量模型。这些模型考虑到了transmission, propagation, and queuing delays。
- 介绍计算机网络中的一些关键架构原则,即protocol layering和service models。
- 了解计算机网络容易受到多种不同类型的攻击,并考虑如何提高计算机网络的安全性。
- 最后简要介绍计算机网络的历史。
1.1 What Is the Internet?
节点:
- 主机及其上运行的应用程序
- 路由器、交换机等网络交换设备
边: - 接入网链路(access?):主机连接到互联网的链路(即主机与网络交换设备之间的边)
- 主干/骨干链路(backbone):网络交换设备之间的边
对于互联网
它的节点是数以亿计互联的计算设备和分组交换设备构成,之间以通信链路相连?通信链路传输速率指标为带宽(bps/bit per second)。
协议主要以TCP/IP为主
协议定义:对等层的实体在通信的过程中应该遵守的规则的集合。
协议发送接收的称作协议数据单元(Protocol Data Unit),在不同层次指代的含义不一样
例:如规定实体之间什么时间发送报文,什么时间接收报文,按什么规则解析报文格式
1.1.1 A Nuts-and-Bolts Description
过去,The Internet is a computer network that interconnects billions of computing devices throughout the world. 但是现在,有许多nontraditional Internet “things” 比如笔记本电脑, 手机, 平板, 电视, 游戏机, 车, 手表等被连接到了互联网中. Indeed, the term computer network 听起来有些过时。所以在互联网术语中,这些设备被叫做hosts or end systems。
End sytstems由a network of communication links(通信链路) and packet switches(分组交换机)。有许多种communication links,由许多不同的physical media(物理媒介)组成,包括coaxial cable(同轴电缆), copper wire(铜线), optical fiber(光纤), and radio spectrum(无线电频谱)。不同的links传输数据的速率不同,单位为bits/second(带宽)。
一个端系统向另一个端系统发送数据时,发送方需要对数据分段,并对每段加上header bytes。The resulting packages of information, known as packets in the jargon of computer networks,然后这些packets被发送到接收方,在那再重新组装为初始数据。
A packet switch接收从某条输入communication links到达的packet,并将其转发到某条输出communication links上。Packet switches有许多种类,现在常见的两种类型是routers(路由器) and link-layer switches(链路层交换机)。前者通常用于the network core,后者通常用于access networks。
一个packet从发送方到接收方所经过的communication links and packet switches的序列称为route or path through the network
以高速公路运输网络为例,则a packet可以看作一辆装载了货物的卡车,communication links类似于高速公路或公路、packet switch类似于交叉路口,而end system类似于建筑物。
End systems通过Internet Service Providers(ISPs)访问互联网。每个ISP本身就是a network of packet switches and communication links。ISPs 提供a variety of types of network access 给the end systems,同时也提供Internet access to content providers, connecting Web sites and video servers directly to the Internet. The Internet将所有相关的端系统彼此连接起来,则给端系统提供access的ISPs也必须相连。较低层次的ISPs通过国家的、国际的较高层次的ISPs(Level 3 Communications, AT&T, Sprint, and NTT)相连。较高层次的ISPs是由high-speed routers interconnected with high-speed fiber-optic links组成的。每个ISP network都是独立管理的,运行IP协议,遵从一定命名和地址规则。
End systems, packet switches, and other pieces of the Internet都运行protocols(协议)。这些协议控制着在互联网中信息的发送和接收。The Transmission Control Protocol(TCP) 和the Internet Protocol(IP) 是互联网中最重要的两个协议。IP协议指定了在routers和end systems之间发送和接收的packets的格式。The Internet’s principal protocols被统称为 TCP/IP
鉴于协议对互联网的重要性,每个人都要对协议及其作用达成一致认识是重要的,这样人们可以创造systems and products that interoperate。这也是标准起作用的地方。Internet standards由Internet Engineering Task Force(IETF)发展制定。The IETF standards documents被称为requests for comments (RFCs)。RFCs最初只是general requests for comments以解决互联网先驱面对的network and protocol design problems。RFCs tend to be quite technical and detailed。RFCs定义了TCP、IP、HTTP和SMTP等协议。Ethernet(以太网)和wireless WiFi standards由The IEEE 802 LAN/MAN Standards Committee [IEEE 802 2016]定义。
Figure1.1中术语一栏:
Host/End system, Server, Mobile, Router, Link-layer switch, Modem, Base station
1.1.2 A Services Description
上述讨论了many of the pieces that make up the Internet。但还可以从另一个完全不同的角度来描述the Internet,as an infrastructure that provides services to applications。除了传统的e-mail和Web surfing, Internet applications include mobile smartphone and tablet applications, including Internet messaging, mapping with real-time road traffic information, music streaming from the cloud, movie and television streaming, online social networks, video conferencing, multi-person games, and location-based recommendation systems。这些应用被称作distributed applications,因为他们包含多个彼此交换数据的端系统。重要的是,互联网应用程序在端系统上运行,而不是运行在the packet switches in the network core。尽管packet switches加速端系统之间的数据交换,但他们并不关心应用程序 that is the source of sink of data。
进一步地探索what we mean by an infrastructure that provides services to applications.当你开发完了一个分布式互联网应用程序后,the programs running on the different end systems will nee to send data to each other。问题在于描述the Internet as a platform for applications。那么一个运行在端系统的应用程序该怎么指示互联网发送数据到运行在另一个端系统的另一个应用程序呢?
连接到互联网的end systems提供一个socket interface(套接字接口) that 规定在一个端系统上运行的程序如何要求互联网基础设施向另一个端系统上运行的特定目标程序发送数据。这个互联网套接字接口是发送方程序必须遵守的一套规则,以便互联网能将数据传送到目标程序。
the Internet 给应用程序提供多种服务,当我们开发一个互联网应用程序时,也必须为我们的互联网应用程序选择某一个互联网服务。
1.1.3 What Is a Protocol?
由Human protocol场景可知,我们需要specific messages we send, and specific actions we take in response to the received reply messages or other events(such as no reply within some given amount of time)。还存在另一种协议情况是the transmission and receipt of messages, and a set of conventional actions taken when these messages are sent and received.
网络协议类似于人类协议, 只是交换信息和采取行动的实体是一些设备的软硬件组件。在互联网中的所有包含两个或以上的远程通信实体的活动都要受协议的制约。
定义一个协议的关键元素是the exchange of messages and the actions taken when these messages are sent and received。
即一个protocol定义了在两个或更多通信实体之间交换的messages的格式和次序,以及发送和接收message或其他事件采取的动作
1.2 The Network Edge
Access Network——the network that physically connects an end system to the first router on a path from the end system to any other distant end system
Today, the two most prevalent types of broadband residential access are digital subscriber line and cable.
A residence typically obtains DSL Internet access from the same local telephone company (telco) that provides its wired local phone access.
边缘系统
接入网将边缘接入到核心
网络核心的作用就是数据交换
C/S模式(客户端服务器模式):
缺点在于可扩展性较差,即随着请求载荷的增加,它的能力是下降的。同时它的下降是到达某一阈值后断崖式地下降。
P2P模式(Peer-Peer):
Peer指的是对等体,也是一个分布式应用进程,特点是每个节点即既是客户端也是服务器。
基础设施向应用进程提供的通信服务有两种方式:面向连接和无连接
面向连接服务的特点:通信之前要“握手”,即接收方和发送方都要都做好准备。
面向连接和有连接时有区别的,前者在于连接状态只有端系统维持。
TCP服务可靠保序,流量控制
UDP无连接
数据链路层
接下来学习的是网络模型中的第二层——数据链路层。这涉及到两台相邻机器如何实现可靠有效的完整信息块(称为帧)通信的方法。相邻指的是两台机器通过一条通信信道连接起来。
数据链路层的设计问题
数据链路层使用物理层提供的服务在通信信道上发送和接收比特。它要完成如下基本功能:
- 向网络层提供一个定义良好的服务接口。
- 处理传输错误。
- 调节数据流,确保慢速的接收方不会被快速的发送方淹没。
为了实现这些目标,数据链路层从网络层获得数据包的时候,会将这些数据包封装成帧以便传输。每个帧包含一个帧头、一个有效载荷(用于存放数据包)以及一个帧尾。
提供给网络层的服务
数据链路层的功能是为网络层提供服务。最主要的服务是将数据从源机器(发送方)的网络层传输到目标机器(接收方)的网络层。为描述方便,接下来以发送方指代源机器,接收方指代目标机器。
实际的传输过程中,我们的数据会经由发送方的网络层,数据链路层,物理层,再到接收方的物理层,数据链路层,网络层。但该过程可以抽象成两个数据链路层的进程使用一个数据链路协议进行通信。两者可以建模如下:
接下来,我们基于后者抽象模型进行描述。
数据链路层实际提供的服务因具体协议而有所差异。一般情况下,数据链路层通常会提供以下3种可能的服务:
- 无确认的无连接的服务(Unacknowledged connectionless service)
- 有确认的无连接的服务(Acknowledged connectionless service)
- 有确认的有连接的服务(Acknowledged connection-oriented service)
具体的,无确认的无连接服务是指发送方向接收方发送独立的帧,接收方对这些帧不作确认。显然这忽视了数据受损的情况,因此这类服务适用于错误率很低的场合,此时差错恢复过程可以留给上层完成,或者是实时通信的场合,此时数据迟到比数据受损更糟糕。
那么有确认的无连接服务。此时数据链路层同样没有使用逻辑连接,但其发送的每一帧都需要进行确认。这种服务下,发送方可以知道帧是否正确到达目的地,并且如果一个帧在指定的时间间隔内还没有到达,发送方可以重新发送(超时重发)。此类服务适用于不可靠的信道,比如无线系统,802.11(WiFi)就是典型的例子。
最后是有确认的有连接的服务。这显然是在数据链路层向网络层提供的最复杂的服务。发送方和接收方在传输任何数据前要建立一个连接。连接上发送的每一帧都被编号,数据链路层确保发出的帧都会被接收方真正接收,并且每个帧将按正确的顺序被接收,且只被接收一次。因此,有连接的服务相当于为网络层提供了一个可靠的比特流。它适用于长距离且不可靠的链路,比如卫星信道或长途电话电路,即丢失确认可能导致一个帧被收发多次,因而浪费带宽。
当使用有连接的服务时,数据传输必须经过三个不同的阶段。在第一个阶段,要建立连接,双方初始化各种变量和计数器,这些变量和计数器记录了哪些帧已经接收到,哪些帧未被接收到。在第二个阶段,才真正传输一个或多个数据帧。在最后一个阶段,连接被释放,所有的变量、缓冲区以及其他用于维护该连接的资源也随之被释放。
注意,在数据链路层提供确认,只是一种优化手段。这也会带来相应的代价。如果提供确认是必需的,就不会有无确认的服务存在。提供确认所导致的额外开销可能有
- 带宽消耗:发送方每传输一个数据帧,接收方需要发送一个确认帧(ACK)。这些确认帧会占用额外的带宽。
- 延迟:传输确认帧会导致一定的延迟,尤其是在长距离通信中。
- 处理开销:发送方和接收方需要额外的计算资源来处理确认帧
- 重传开销:如果由于错误未能收到确认帧,发送方必须重传数据帧,这会消耗额外的带宽和资源,并可能增加整体传输时间。
……
成帧
背景:数据链路层要对物理层向其提供的原始比特流进行处理。物理层所传递的比特流不能保证没有错误,因此数据链路层有必要的话,也需要检测错误和纠正错误。
做法:通常数据链路层将连续的比特流拆分成多个离散的帧,为每个帧计算一个称为校验和的令牌,并将该校验和放在帧中一起进行传输。接收方收到帧的时候,便重新计算该帧的校验和判断传输是否出错。
显然,我们要考虑如何拆分比特流,既要容易识别帧,同时占用的信道带宽也要尽可能得少。
书中介绍了四种方法
- 字节计数法:利用头部中的一个字段来标识该帧中的字符数。数据链路层看到字符计数值时,就知道该帧到哪里结束。字节计数法缺陷明显,计数值有可能在传输中发生错误而混淆变化,导致无法找到下一帧的正确起始位置。
- 字节填充的标志字节法:
- 比特填充的标志比特法
- 物理层编码违禁法:
滑动窗口协议
回退N协议(Go-Back-N)
考虑一个帧到达接收方所需要的传输时间加上确认帧返回的传输时间。那么长发送时间、高带宽和短帧三者组合在一起,会大大地降低效率。例如:
考虑一个卫星信道,往返传播延迟为500ms,即过去要250ms,回来要250ms。
假设在该信道发送一个1000位的帧(相较带宽而言的短帧),只需要20ms。那么在t=20ms的时候,该帧被完全发送出去;直到t=270ms的时候,该帧才完全到达接收方;在t=520ms的时候,确认帧才回到发送方,而且这还是最好的情况。
我们会发现,发送方从发送帧到确认帧返回的这段时间里,总计520ms的时间,只利用了发送帧的20ms,即有96%的时间是被阻塞的,或者说,只有4%的有效带宽被利用了
如上问题是受到如下限制的结果:发送方在发送下一帧之前必须等待前一帧的确认。显然,我们可以考虑是不是可以放宽限制,允许发送方在阻塞之前发送多达w个帧,以获得更好的带宽利用率。
那么新的问题便是,如何找到一个合适的w值,使得发送方可以连续发送帧,并且在发送窗口被填满之前,前面发送的帧的确认就已返回(避免阻塞)。首先,我们需要知道在一帧从发送方传播到接收方期间信道上能容纳多少帧。