
只读了前三章,到运输层为止
第一章 计算机网络和因特网
1.1 什么是因特网
什么是因特网?
回答这个问题有两种方式:一,描述因特网的硬件和软件组成;二,根据为分布式应用提供服务的联网基础设施来描述因特网
1.1.1 具体构成描述
- 连接到因特网的设备都可以称为主机或端系统
- 端系统通过通信链路(communication link)和分组交换机(packet switch)连接到一起
- 通信链路由不同类型的物理媒体组成,它们的传输速率以bps(bit per second)度量。
- 当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包用计算机网络的术语来说称为分组(packet)。
- 分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。(?疑问? 分组交换机怎么选择出通信链路?)
- 两种常见的分组交换机:路由器(router)和链路层交换机(link-layer switch)
- 一个分组从发送端系统到接收端系统所经历的一系列通信链路和分组交换机称为通过该网络的路径(route)
- 端系统通过因特网提供商(internet service provider, ISP)接入因特网
- 每个ISP自身就是一个由多台分组交换机和多段通信链路组成的网络
- 互联网就是将端系统连接起来,那么ISP本身也就必须互联。
- 端系统、分组交换机和其他因特网部件都要运行一系列协议(protocol)
- TCP(Transmission Control Protocol)和IP(Internet Protocol)是因特网中两个最重要的协议
1.1.2 服务描述
- 将因特网描述为应用程序的平台
- 与因特网相连接的端系统提供了一个套接字接口(socket interface),该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式
1.1.3 什么是协议?
协议(protocol)定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和/或接收一条报文或其他事件所采取的动作
1.2 网络边缘
因特网的端系统包括了桌面计算机、服务器和移动计算机
端系统也称为主机(host),因为它们运行应用程序,主机=端系统
主机又能进一步划分为两类:客户(client)和服务器(server)
1.2.1 接入网
- 接入网是指将端系统物理连接 到其边缘路由器(edge router)的网络
- 接入网分类
1.家庭接入:DSL、电缆、FTTH、拨号和卫星
家庭接入有两种主要类型:DSL(Digital Subscriber Line)和电缆- 使用DSL时,ISP是本地电话公司,每个用户的DSL使用现有的电话线与电话公司的数字用户接入复用器(DSLAM)进行交换数据。家庭DSL首先将接收到的数字信号转化为高频音,以通过电话线传输给本地中心局;高频音模拟信号在DSLAM中被转换回数字信号
- 使用电缆因特网接入时,利用了有线电视公司现有的有线电视基础设施
- FTTH(Fiber To The Home)
2.企业接入:以太网和WiFi
使用局域网(LAN)将端系统连接到边缘路由器。
以太网是目前最流行的局域网接入技术。
3.广域无线接入:3G和LTE(Long-Term Evolution)1.2.2 物理媒体
略1.3 网络核心
1.3.1分组交换
1.存储转发传输(store and forward transmission)
存储转发传输是指在交换机开始向输出链路传输分组之前必须接收到整个分组。
2.排队时延和分组丢失
3.转发表(forwarding table)和路由选择协议
1.3.2 电路交换
以下至第二章的笔记因为忘记保存丢失了,心痛
第二章 应用层
2.1 应用层协议原理
2.1.1 网络应用程序体系结构
网络应用程序应该有自己的结构,两种主流的体系结构是:客户-服务器体系结构(client-server architecture)、对等(P2P)体系结构(P2P architecture)
P2P体系结构
应用程序在主机对之间使用直接通信。
2.1.2 进程通信
网络程序间进行通信的实际是进程(process)。两个不同端系统上的进程通过跨越计算机网络交换报文(message)进行通信。
客户和服务器进程
网络应用程序由成对的进程组成,这些进程通过网络相互发送报文。例如在Web应用程序中,一个客户浏览器进程与一台Web服务器进程交换报文。
在一对进程之间的通信会话场景中,发起通信的进程是客户,等待联系的进程是服务器。
进程与计算机网络之间的接口
进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。套接字是同一台主机内应用层与传输层之间的接口。
进程寻址
一台主机上的进程为了向另一台主机上的进程发送分组,需要有目的进程的地址。为了表示接收进程,需要两个信息:目的主机的地址(IP地址)、目的主机中接收进程的标识符(端口号(port number))。
2.1.3 可供应用程序使用的运输服务
根据哪些参数选择需要的运输服务?
可靠数据传输、吞吐量、定时、安全性
1.可靠数据传输
能够确保完整、正确地运输数据
2.吞吐量
3.定时
4.安全性
2.1.4 因特网提供的运输服务
主要介绍了运输层两大服务 : TCP和UDP
TCP服务
面向连接服务、可靠数据传输服务
UDP服务
一种不提供不必要服务的轻量级运输协议。它是无连接的,提供不可靠数据传输服务
2.1.5 应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。
2.2 Web和HTTP
2.2.1 HTTP概况
HTTP是Web的应用层协议,它全称是 HyperText Transfer Protocol,超文本传输协议
HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。
HTTP的支撑运输协议是TCP
2.2.2 非持续连接和持续连接
一个客户做出的多个请求,服务器是使用一个TCP连接进行传输呢?还是使用多个不同的TCP分别对这些请求做出响应呢?前者是持续连接,后者是非持续连接。
1.采用非持续连接的HTTP
往返时间,(round-trip time,RTT),一个小分组从客户发出,经由服务器返回客户所需的时间。
2.采用持续连接的HTTP
2.2.3 HTTP报文格式
1.HTTP请求报文




2.HTTP响应报文



2.2.4 用户与服务器的交互:cookie
HTTP服务器是无状态的,也就是说它不清楚客户的信息。但是有一些时候希望知道客户的信息以提供更好的服务,完成这个任务的就是cookie
2.2.5 Web 缓存
2.2.6 条件GET方法
可以用来检查Web缓存器中的内容是否是最新的
2.3 因特网中的电子邮件
因特网电子邮件系统的主要组成部分:用户代理(user agent)、邮件服务器(mail server)、简单邮件传输协议(simple mail transfer protocol,SMTP)
2.3.1 SMTP
SMTP用于将邮件从发送方邮件服务器发送到接收方邮件服务器

2.3.2 与HTTP的对比
HTTP是一个拉协议,SMTP是一个推协议
2.3.3 邮件报文格式
2.3.4 邮件访问协议
2.4 DNS:因特网的目录服务
因特网上的主机使用多种方式进行标识,一种方法是用主机名(hostname),也可以使用IP地址进行标识。
2.4.1 DNS提供的服务
DNS,domain name system,域名系统,提供将主机名转换为IP地址的服务。DNS是:①一个由分层的DNS服务器(DNS server)实现的分布式数据库;②一个使得主机能够查询分布式数据库的应用层协议。 DNS 服务器通常是运行 BIND ( Berkeley Internet Name Domain)软件[BIND 2012 ]的 UNIX机器。DNS协议运行在UDP之上,使用53号端口。
2.4.2 DNS工作机理概述
用户主机上运行的某些程序需要将主机名转换为IP地址,这些程序先调用DNS客户端,客户端通过53端口发送和接收报文以完成主机名到IP地址的转换。
DNS服务器大致有三类:根DNS服务器、顶级域DNS服务器(top level domain,TLD)、权威DNS服务器
2.4.3 DNS记录和报文
所有DNS服务器存储资源记录(resource record,RR)。

1.DNS报文

2.在DNS数据库中插入记录
2.5 P2P文件分发
2.6 视频流和内容分发网(Content Distribution Network, CDN)
2.7 套接字编程:生成网络应用
2.7.1 UDP套接字编程
2.7.2 TCP套接字编程
与UDP不同,TCP是一个面向连接的协议。这意味着在客户和服务器能够开始互相 发送数据之前,它们先要握手和创建一个TCP连接。TCP连接的一端与客户套接字相联 系,另一端与服务器套接字相联系。当创建该TCP连接时,我们将其与客户套接字地址 ( IP地址和端口号)和服务器套接字地址(IP地址和端口号)关联起来。使用创建的TCP 连接,当一侧要向另一侧发送数据时,它只需经过其套接字将数据丢进TCP连接。这与 UDP不同,UDP服务器在将分组丢进套接字之前必须为其附上一个目的地地址。
欢迎套接字(serverSocket):所有客户的起始接触点
连接套接字(connectionSocket):为每个客户单独生成的套接字
第三章 运输层
运输层位于应用层和网络层之间,为运行在不同主机上的应用进程提供直接的通信服务起着重要的作用。
3.1 概述和运输层服务
运输层分组称为报文段(segment)
网络层分组称为数据报
3.1.1 运输层和网络层的关系
3.1.2 因特网运输层
3.2 运输层的多路复用与多路分解
多路复用与多路分解即是将网络层提供的主机到主机的交付服务拓展到不同主机上运行的应用程序的进程之间的交付服务
将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(demultiplexing)
在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(这将在以后用于分解)从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用(nmhiplexing)。
可以看到,多路分解与复用是互逆的工作,多路复用负责收集,多路分解负责分发。

1.无连接的多路复用与多路分解(UDP)

2.面向连接的多路复用与多路分解(TCP)
3.Web服务器与TCP
3.3 无连接运输:UDP
TCP可以提供可靠的数据传输,是不是无脑选择TCP协议呢?不是的,原因有以下几点
关于发送什么数据以及何时发送的应用层控制更为精细
UDP没有拥塞控制机制,因此它能够在接收到应用进程的数据后立即将其传递给网络层。实时应用偏爱UDP协议
无须建立连接
显然,相比TCP,可以省去建立连接的时延
无连接状态
分组首部开销小
UDP首部8字节
TCP首部20字节
3.3.1 UDP报文段结构

UDP首段有4个字段,每个字段两个字节,共8个字节64比特。
长度字段指示该报文段的字节数,首部+应用数据
3.3.2 UDP检验和
检验和提供了差错检测功能。
3.4 可靠数据传输原理

3.4.1 构造可靠数据传输协议
1.经完全可靠信道的可靠数据传输
有限状态机(Finite state machine,FSM)
2.经具有比特差错信道的可靠数据传输
主要方法是重传机制,基于这样重传机制的可靠数据传输协议称为自动重传请求(Automatic Repeat request, ARQ)协议。
ARQ协议中还需要另外三种协议功能来处理存在比特差错的情况:
- 差错检测
- 接收方反馈
- 重传
3.经具有比特差错的丢包信道的可靠数据传输
在发送方设置等待时间限制,当分组丢失或应答(ACK/NAK)丢失或传输时间超过超时时间限制时,发送方会重新发送上一个分组
3.4.2 流水线可靠数据传输协议
3.4.1里设计的是一个停等协议,效率不是很高。


- 需要附加序号范围以标识分组和报文
- 发送方和接收方都需要缓存多个分组
- 引入新的差错处理机制:回退N步(Go-Back-N,GBN)和选择重传(selective repeat,SR)
3.4.3 回退N步
GBN协议也常常被称为滑动窗口协议(sliding-window protocol)

3.4.4 选择重传
3.5 面向连接的运输:TCP
3.5.1 TCP连接
TCP是面向连接的(connection-oriented)
客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应,最后,客户再用第三个特殊报文段作为响应。前两个报文段不承载“有效载荷”,也就是不包含应用层数据;而第三个报文段可以承载有效载荷。 由于在这两台主机之间发送了 3个报文段,所以这种连接建立过程常被称为三次握手 (three- way handshake)
MSS,Maximum Segment Size,最大报文段长度,传输层报文段里应用层数据的最大长度
MTU,Maximum Transmission Unit,最大传输单元,链路层帧长度

3.5.2 TCP报文段结构

- 源端口号和目的端口号用来实现多路分解和多路复用
- 检验和用来识别差错
- 32比特的序号字段(sequence number field)和32比特的确认号字段(acknowledgment number field) 这些字段被TCP发送方和接收方用来实现可靠数据传输服务
- 16比特的接收窗口字段(receive window field),该字段用于流量控制,指示接收方愿意接受的字节数量。
- 4比特的首部长度字段(header length field),该字段指示了以32比特的字为单位 的TCP首部长度
- 可选与变长的选项字段(options field),该字段用于发送方与接收方协商最大报文段长度(MSS)时,或在高速网络环境下用作窗口调节因子时使用。首部字段中还定义了一个时间戳选项
- 6比特的标志字段(flag field) ACK比特用于指示确认字段中的值是有效的,即 该报文段包括一个对已被成功接收报文段的确认。RST、SYN和FIN比特用于连 接建立和拆除,我们将在本节后面讨论该问题。在明确拥塞通告中使用了 CWR和 ECE比特,如3.7.2节中讨论的那样。当PSH比特被置位时,就指示接收方应立 即将数据交给上层。最后,URG比特用来指示报文段里存在着被发送端的上层实 体置为“紧急”的数据。紧急数据的最后一个字节由16比特的紧急数据指针字段 (urgent data pointer field)指出。当紧急数据存在并给出指向紧急数据尾指针的时 候,TCP必须通知接收端的上层实体。(在实践中,PSH、URG和紧急数据指针并 没有使用。为了完整性起见,我们才提到这些字段。)
1.序号和确认号
这两个号码是TCP可靠传输的关键部分。
一个报文段的序号是该报文段首字节的字节流编号
确认号是接收方希望得到的下一个人字节的序号
3.5.3 往返时间的估计与超时
1.估计往返时间
2.设置和管理重传超时间隔
3.5.4 可靠数据传输
3.5.5 流量控制
流量控制:调节发送方的发送速率以匹配接收方的接收速率,避免接收方缓存溢出
拥塞控制:因为IP网络的拥塞而遏制发送方的发送速度
这两个控制相似,但是完全不同
3.5.6 连接管理
建立连接:三次握手
拆除连接:四次挥手
3.6 拥塞控制原理
3.6.1 拥塞原因与代价
3.6.2 拥塞控制方法
端到端拥塞控制
网络辅助的拥塞控制