A. [计算机网络之一] 网络基础知识
协议就是计算机与计算机之间通过网络实现通信时事先达成的一种 “约定”。这种 “约定” 使那些由不同的厂商、不同的 CPU 以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能够实现通信。
TCP/IP、AppleTalk(仅限苹果计算机使用)、SNA(IBM)、DECnet(DEC)、IPX/SPX(Novell)
分组交换是指将大数据分割为一个个叫做包的较小单位进行传输的方法。
ISO (International Organization for Stardards,国际标准化组织)制定了国际标准 OSI (Open System Interconnection,开放系统互联参考模型),但是没有得到普及,反而是随 Apanet 而生的 TCP/IP 协议在大学研究机构和计算机行业的推动下成为实际的业界标准。
每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定服务。上下层之间进行交互所遵循的约定叫做 “接口” ,同一层之间交互所遵循的约定叫做 “协议” 。
协议分层参考了计算机软件中的模块化开发。
单播、广播、多播、任播。
一个地址必须明确地表示一个主体对象,在同一个通信网络中不允许有两个相同地址的通信主体存在。
有层次性的地址方便高效地找到通讯目标(eg: 快递地址国家、省市区)
MAC地址有唯一性但没有层次性。
以太网、无线、帧中继、ATM、FDDI、ISDN。
NIC(Network Interface Card,网络接口卡),计算机必须有网卡才能接入网络。
物理层面上延长网络的设备。将电缆传递过来的光电信号经过波形调整和放大之后传递给另一个电缆。
集线器 :提供多个端口的中继器。
数据链路层面连接两个网络的设备。 不同网络可能采用了不同的数据链路,数据传输的速率可能完全不一样 ,网桥会缓存一个网段传输到另一个网段的数据帧,再重新生成信号作为全新的帧转发给另一个网段(这里我理解不同数据链路帧的格式不一样,所以网桥需要缓存数据并转换位另一个数据链路中的帧格式)。
网桥的其他作用:
① 根据数据帧中的 FCS 检查数据帧是否已损坏,是则不转发;
② 自学习MAC设备来自哪些网络,并记录在地址转发表中(地址转发表记录硬件地址与网络的映射关系);
③ 过滤功能控制网络流量。
交换集线器 :每个端口都相当于一个网桥。
网络层面上连接两个网络、并对分组报文进行转发的设备。
应用场景:广域网加速器、特殊应用访问加速、防火墙。
将传输层到应用层的数据进行转发和翻译的设备。
代理服务器 :控制流量和出于安全考虑,客户端和服务端无需在网络上直接通信,而是从传输层到应用层对数据和访问进行各种控制和处理。
研发基于分组交换技术的 ARPANET,取代容灾性差的中央集中式网络。
单个网络无法解决所有通信问题,开始研究网络互连技术,出现了 TCP/IP,并首先被 BSD UNIX 采用,随之被广泛使用变得流程,所有使用 TCP/IP 协议的计算机都能利用互连网相互通信。
围绕大型计算机中心建设计算机网络,即 NSFNET(国家科学基金网),它是一个三级网络,分为主干网、地区网和校园网。这种三级计算机网络覆盖了全美主要的大学和研究所,并成为互联网中的主要组成部分。
NSFNET 逐渐被商用的互联网主干网替代,政府机构不再负责互联网的运营。用户接入互联网需要通过 ISP(Internet Service Provider:互联网服务提供商)。
IXP(Internet eXchange Point)互联网交换点 的作用是允许两个网络直接相连并交换分组,而不需要再通过第三个网络(如上图中的主干 ISP)来转发分组。
所有的互联网标准都是以 RFC 的形式在互联网上发表的,但并非所有的 RFC 文档都是互联网标准。
制定互联网的正式标准要经过以下三个阶段
(1)互联网草案
(2)建议标准
(3)互联网标准
由所有连接在互联网上的主机组成。这部分是用户直接使用的额,用来进行通信和资源共享。
由大量网络和连接这些网络的路由器组成。这部分视为边缘部分提供服务的(提供连通性和交换)。
① 电路交换的起源
② 电路交换的特点
在使用信道时,信道两端的两个用户始终占用端到端的通信资源,线路上真正传送数据的时间比例很小,传输效率很低。
③ 电路交换的步骤
建立连接 (占用通信资源)→ 通话 (一直占用通信资源)→ 释放连接 (归还通信资源)
电报通信采用基于存储转发原理的报文交换,整个报文被发送到相邻结点,存储下来,再转发到下一个结点。
① 分组交换的特点
把一个完整的报文划分为一个个分组,每个分组传送到相邻结点后,存在下来查找转发表,在转发到下一个结点。
② 分组交换的优缺点
优点:每个分组可以经过不同的路由,使得有更好的可靠性,也能充分利用网络性能。
缺点:分组控制信息有一定开销,路由器存储转发时需要排队导致产生时延,无法确保通信时端到端所需的宽带。
① 广域网 WAN(Wide Area Network) 广域网的作用范围通常为几十到几千公里,是互联网的核心,其任务是通过长距离运送主机锁发送的数据。连接广域网各结点交换机的链路一般都是高速链路,具有较大的通信量。
② 城域网 MAN(Metropolotan Area Network) 城域网的作用范围一般是一个城市,作用距离约为 5 ~ 50 km。可以为一个或几个单位所用欧,也可以是一种公用设置,用来将多个局域网进行互联。目前很多城域网采用的是以太网技术。
③ 局域网 LAN(Local Area Network) 局域网一般用微型计算机或工作站通过高速通信链路相连(速率通常在 10 Mbit/s 以上),但地理上则局限在较小的范围(如 1 km 左右)。在局域网发展的初期,一个学校或工厂往往只拥有有个局域网,但现在局域网已非常广泛地使用,学校或企业大都拥有多个互连的局域网(这样的网络常称为 校园网 或 企业网 )。
④ 个人局域网 PAN(Personal Area Network) 个人局域网就是在个人工作的地方把属于个人使用的电子设备用无线技术连接起来的网络,因此也常称为 无线个人局域网 WPAN(Wireless PAN) ,其范围很小,大约在 10 m 左右。
① 公用网(pulic network) 电信公司出资建造的大型网络。
② 专用网(private network) 某个部门为满足本单位的特殊业务工作的需要而建造的网络。这种网络不向本单位以外的人提供服务,例如,军队、铁路、银行、电力等系统均有本系统的专用网。
接入网(Access Network) ,又称为本地接入网或居民接入网。
数据的传输速率,也称为数据率或比特率,单位为 bit/s(比特每秒)(或 b/s,有时也写为 bps,即 bit per second)。
1 kbit/s = 1 × 10³ bit/s,1 Mbit/s = 1 × 10^6 bit/s,1 Gbit/s = 1 × 10^9 bit/s,1 Tbit/s = 1 × 10^12 bit/s
吞吐量表示在单位时间内通过某个网络的实际的数据量,单位同速率带宽。
时延是指数据从网络的一端传送到另一端所需的时间,网络时延由几个部分组成:
网络总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
[误区] 光纤的传播速率实际上比铜线要慢,但是光纤的带宽却比普通的双绞线要快,这是因为光信号的抗干扰性强,并且可以通过波分复用的信道复用技术,达到一路光纤传输多路信号的效果。
时延带宽积表示信道中可以容纳多少比特。
在计算机网络中,往返时间 RTT(Round-Trip Time)是一个重要的性能指标,因为在许多情况下,互联网上的信息不仅仅单方向传输而是双向交互的。
使用卫星通信时,发送时延很短,主要消耗在来回传播时延上,即往返时间相对较长。
利用率有信道利用率和网络利用率两种。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率为零。网络利用率则是全网络的信道利用率的加权平均值。
D0 表示网络空闲时的时延,D 表示网络当前的时延,U 表示利用率,则
U = 1 - D0/D,变形一下,有
信道利用率不是越高越好,因为信道利用率增大时,网络时延也会增加,因为排队时延增大。所以当 U 趋于 1 时,D 会趋于无限大,所以 信道或网络的利用率过高会产生非常大的时延 。
费用、质量、标准化、可靠性、可扩展性和可升级性、易于管理和维护。
① 语法,即数据与控制信息的结构或格式;
② 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应;
③ 同步,即时间实现顺序的详细说明。
① 各层独立;
② 灵活性好;
③ 结构上可分割开;
④ 易于实现和维护;
⑤ 能促进标准化工作。
计算机网络的各层及其协议的集合就是网络的体系结构。
实体 :表示任何可发送或接收信息的硬件或软件进程。
协议 :协议是水平的,控制两个对等实体进行通信的规则的集合。
服务 :服务是垂直的,下层通过接口向上层提供服务。
服务访问点 :SAP(Service Access Point),同一系统中相邻两层的实体进行交互的地方。
B. 计算机网络基础知识(一)
参考:计算机网络 谢希仁 第7版
一、现在最主要的三种网络
电信网络(电话网)
有线电视网络
计算机网络 (发展最快,信息时代的核心技术)
二、internet 和 Internet
internet 是普通名词
泛指一般的互连网(互联网)
Internet 是专有名词,标准翻译是“因特网” 世界范围的互连网(互联网)
使用 TCP/IP 协议族
前身是美国的阿帕网 ARPANET
三、计算机网络的带宽
计算机网络的带宽是指网络可通过的最高数据率,即每秒多少比特。 描述带宽也常常把“比特/秒”省略。
例如,带宽是 10 M,实际上是 10 Mb/s。注意:这里的 M 是 106。
四、对宽带传输的错误概念
在网络中有两种不同的速率:
信号(即电磁波)在传输媒体上的传播速率(米/秒,或公里/秒)
计算机向网络发送比特的速率(比特/秒),也叫传输速率。 这两种速率的意义和单位完全不同。
宽带传输:计算机向网络发送比特的速率较高。 宽带线路:每秒有更多比特从计算机注入到线路。 宽带线路和窄带线路上比特的传播速率是一样的。
早期的计算机网络采用电路交换,新型的计算机网络采用分组交换的、基于存储转发的方式。 分组交换:
在发送端把要发送的报文分隔为较短的数据块
每个块增加带有控制信息的首部构成分组(包)
依次把各分组发送到接收端
接收端剥去首部,抽出数据部分,还原成报文
IP 网络的重要特点
每一个分组独立选择路由。
发往同一个目的地的分组,后发送的有可能先收到(即可能不按顺序接收)。 当网络中的通信量过大时,路由器就来不及处理分组,于是要丢弃一些分组。 因此, IP 网络不保证分组的可靠地交付。
IP 网络提供的服务被称为:
尽最大努力服务(best effort service) 五、最重要的两个协议:IP 和 TCP
TCP 协议保证了应用程序之间的可靠通信,IP 协议控制分组在因特网的传输,但因特网不保证可靠交付.
在 TCP/IP 的应用层协议使用的是客户服务器方式。
客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。
客户服务器方式所描述的是进程之间服务和被服务的关系。
当 A 进程需要 B 进程的服务时就主动呼叫 B 进程,在这种情况下,A 是客户而 B 是服务器。
可能在下一次通信中,B 需要 A 的服务,此时,B 是客户而 A 是服务器。
注意:
使用计算机的人是“用户”(user)而不是“客户”(client)。
客户和服务器都指的是进程,即计算机软件。
由于运行服务器进程的机器往往有许多特殊的要求,因此人们经常将主要运行服务器进程的
机器(硬件)不严格地称为服务器。
例如,“这台机器是服务器。” 意思是:“这台机器(硬件)主要是用来运行服务器进程(软件)。” 因此,服务器(server)一词有时指的是软件,但也有时指的是硬件。
六、总结
因特网(Internet)是世界范围的、互连起来的计算机网络,它使用 TCP/IP 协议族,并且它的前身是美 国阿帕网 ARPANET。
计算机网络的带宽是网络可通过的最高数据率。
因特网使用基于存储转发的分组交换,并使用 IP 协议传送 IP 分组。
路由器把许多网络互连起来,构成了互连网。路由器收到分组后,根据路由表查找出下一跳路由器的
地址,然后转发分组。
路由器根据与其他路由器交换的路由信息构造出自己的路由表。
IP 网络提供尽最大努力服务,不保证可靠交付。
TCP 协议保证计算机程序之间的、端到端的可靠交付。
在 TCP/IP 的应用层协议使用的是客户服务器方式。
客户和服务器都是进程(即软件)。客户是服务请求方,服务器是服务提供方。
服务器有时也指“运行服务器软件”的机器。
一、IP 网络是虚拟网络
IP 网络是虚拟的。在 IP 网络上传送的是 IP 数据报(IP 分组)。
实际上在网络链路上传送的是“帧”,使用的是帧的硬件地址(MAC 地址)。
地址解析协议 ARP 用来把 IP 地址(虚拟地址)转换为硬件地址(物理地址)。
二、IP 地址的表示方法
IP 地址的表示方法有两种:二进制和点分十进制。
IP 地址是 32 位二进制数字,为方便阅读和从键盘上输入,可把每 8 位二进制数字转换成一个十进制数字,并 用小数点隔开,这就是点分十进制。
三、因特网的域名
因特网的域名分为: 顶级域名 二级域名 三级域名
四级域名
四、域名服务器 DNS (Domain Name Server)
因特网中设有很多的域名服务器 DNS,用来把域名转换为 IP 地址。
五、电子邮件
发送邮件使用的协议——简单邮件传送协议 SMTP (Simple Mail Transfer Protocol) 接收邮件使用的协议——邮局协议版本 3 POP3 (Post Office Protocol version 3) 注:邮件的传送仍然要使用 IP 和 TCP 协议
六、统一资源定位符 URL (Uniform Resource Locator)
URL 用来标识万维网上的各种文档。
因特网上的每一个文档,在整个因特网的范围内具有惟一的标识符 URL。 URL 实际上就是文档在因特网中的地址。
七、超文本传送协议 HTTP (HyperText Transfer Protocol) 万维网客户程序与服务器程序之间的交互遵守超文本传送协议 HTTP。
八、结束语
IP 地址是 32 位二进制数字。为便于阅读和键入,也常使用点分十进制记法。 个人用户上网可向本地 ISP 租用临时的 IP 地址。
域名服务器 DNS 把计算机域名转换为计算机使用的 32 位二进制 IP 地址。 发送电子邮件使用 SMTP 协议,接收电子邮件使用 POP3 协议。
统一资源定位符 URL 惟一地确定了万维网上文档的地址。
超文本传送协议 HTTP 用于万维网浏览器程序和服务器程序的信息交互。
超文本标记语言 HTML 使万维网文档有了统一的格式。
IP 电话不使用 TCP 协议。利用 IP 电话网关使得在普通电话之间可以打 IP 电话。
一、因特网服务提供者 ISP (Internet Service Provider) 根据提供服务的覆盖面积大小以及所拥有的 IP 地址数目的不同,ISP 也分成为不同的层次。
二、两种通信方式
在网络边缘的端系统中运行的程序之间的通信方式通常可划分为两大类:C/S 方式 和 P2P 方式
(Peer-to-Peer,对等方式)。
三、因特网的核心部分
网络核心部分是因特网中最复杂的部分。
网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其 他主机通信(即传送或接收各种形式的数据)。
因特网的核心部分是由许多网络和把它们互连起来的路由器组成,而主机处在因特网的边缘部分。
在因特网核心部分的路由器之间一般都用高速链路相连接,而在网络边缘的主机接入到核心部分则通 常以相对较低速率的链路相连接。
主机的用途是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。路由器的用途则是用 来转发分组的,即进行分组交换的。
在网络核心部分起特殊作用的是路由器(router)。
路由器是实现分组交换(packet switching)的关键构件,其任务是转发收到的分组,这是网络核心部分
最重要的功能。
四、电路交换
电路交换必定是面向连接的。 电路交换的三个阶段:建立连接、通信、释放连接。
五、网络的分类
不同作用范围的网络
广域网 WAN (Wide Area Network)
局域网 LAN (Local Area Network)
城域网 MAN (Metropolitan Area Network)
个人区域网 PAN (Personal Area Network)
从网络的使用者进行分类
公用网 (public network)
专用网 (private network)
用来把用户接入到因特网的网络
接入网 AN (Access Network),它又称为本地接入网或居民接入网。
注:由 ISP 提供的接入网只是起到让用户能够与因特网连接的“桥梁”作用。
六、计算机网络的性能指标
速率
带宽
吞吐量
时延(delay 或 latency)
传输时延(发送时延) —— 从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完 毕所需的时间。
传播时延 —— 电磁波在信道中需要传播一定的距离而花费的时间。 注:信号传输速率(即发送速率)和信号在信道上的传播速率是完全不同的概念。
处理时延 —— 交换结点为存储转发而进行一些必要的处理所花费的时间。
排队时延 —— 结点缓存队列中分组排队所经历的时延。 总时延 = 发送时延+传播时延+处理时延+处理时延
时延带宽积
利用率 —— 分为信道利用率和网络利用率。
信道利用率——某信道有百分之几的时间是被利用的(有数据通过)。 网络利用率——全网络的信道利用率的加权平均值。 注:信道利用率并非越高越好。
七、网络协议(network protocol) 简称为协议,是为进行网络中的数据交换而建立的规则、标准或约定。其组成要素有以下三点:
语法 语义 同步
数据与控制信息的结构或格式 。
需要发出何种控制信息,完成何种动作以及做出何种响应。 事件实现顺序的详细说明。
八、实体、协议、服务和服务访问点
实体(entity)——表示任何可发送或接收信息的硬件或软件进程。 协议——是控制两个对等实体进行通信的规则的集合。
在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。 要实现本层协议,还需要使用下层所提供的服务。
本层的服务用户只能看见服务而无法看见下面的协议。
下面的协议对上面的服务用户是透明的。
协议是“水平的”,即协议是控制对等实体之间通信的规则。
服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。 同一系统相邻两层的实体进行交互的地方,称为服务访问点 SAP (Service Access Point)。
九、TCP/IP 的体系结构
路由器在转发分组时最高只用到网络层,而没有使用运输层和应用层。
C. 计算机网络自学笔记:TCP
如果你在学习这门课程,仅仅为了理解网络工作原理,那么只要了解TCP是可靠传输,数据传输丢失时会重传就可以了。如果你还要参加研究生考试或者公司面试等,那么下面内容很有可能成为考查的知识点,主要的重点是序号/确认号的编码、超时定时器的设置、可靠传输和连接的管理。
1 TCP连接
TCP面向连接,在一个应用进程开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立连接。连接的实质是双方都初始化与连接相关的发送/接收缓冲区,以及许多TCP状态变量。
这种“连接”不是一条如电话网络中端到端的电路,因为它们的状态完全保留在两个端系统中。
TCP连接提供的是全双工服务 ,应用层数据就可在从进程B流向进程A的同时,也从进程A流向进程B。
TCP连接也总是点对点的 ,即在单个发送方与单个接收方之间建立连接。
一个客户机进程向服务器进程发送数据时,客户机进程通过套接字传递数据流。
客户机操作系统中运行的 TCP软件模块首先将这些数据放到该连接的发送缓存里 ,然后会不时地从发送缓存里取出一块数据发送。
TCP可从缓存中取出并放入报文段中发送的数据量受限于最大报文段长MSS,通常由最大链路层帧长度来决定(也就是底层的通信链路决定)。 例如一个链路层帧的最大长度1500字节,除去数据报头部长度20字节,TCP报文段的头部长度20字节,MSS为1460字节。
报文段被往下传给网络层,网络层将其封装在网络层IP数据报中。然后这些数据报被发送到网络中。
当TCP在另一端接收到一个报文段后,该报文段的数据就被放人该连接的接收缓存中。应用程序从接收缓存中读取数据流(注意是应用程序来读,不是操作系统推送)。
TCP连接的每一端都有各自的发送缓存和接收缓存。
因此TCP连接的组成包括:主机上的缓存、控制变量和与一个进程连接的套接字变量名,以及另一台主机上的一套缓存、控制变量和与一个进程连接的套接字。
在这两台主机之间的路由器、交换机中,没有为该连接分配任何缓存和控制变量。
2报文段结构
TCP报文段由首部字段和一个数据字段组成。数据字段包含有应用层数据。
由于MSS限制了报文段数据字段的最大长度。当TCP发送一个大文件时,TCP通常是将文件划分成长度为MSS的若干块。
TCP报文段的结构。
首部包括源端口号和目的端口号,它用于多路复用/多路分解来自或送至上层应用的数据。另外,TCP首部也包括校验和字段。报文段首部还包含下列字段:
32比特的序号字段和32比特的确认号字段。这些字段被TCP发送方和接收方用来实现可靠数据传输服务。
16比特的接收窗口字段,该字段用于流量控制。该字段用于指示接收方能够接受的字节数量。
4比特的首部长度字段,该字段指示以32比特的字为单位的TCP首部长度。一般TCP首部的长度就是20字节。
可选与变长的选项字段,该字段用于当发送方与接收方协商最大报文段长度,或在高速网络环境下用作窗口调节因子时使用。
标志字段ACK比特用于指示确认字段中的ACK值的有效性,即该报文段包括一个对已被成功接收报文段的确认。 SYN和FIN比特用于连接建立和拆除。 PSH、URG和紧急指针字段通常没有使用。
•序号和确认号
TCP报文段首部两个最重要的字段是序号字段和确认号字段。
TCP把数据看成一个无结构的但是有序的字节流。TCP序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。
一个报文段的序号是该报文段首字节在字节流中的编号。
例如,假设主机A上的一个进程想通过一条TCP连接向主机B上的一个进程发送一个数据流。主机A中的TCP将对数据流中的每一个字节进行编号。假定数据流由一个包含4500字节的文件组成(可以理解为应用程序调用send函数传递过来的数据长度),MSS为1000字节(链路层一次能够传输的字节数),如果主机决定数据流的首字节编号是7。TCP模块将为该数据流构建5个报文段(也就是分5个IP数据报)。第一个报文段的序号被赋为7;第二个报文段的序号被赋为1007,第三个报文段的序号被赋为2007,以此类推。前面4个报文段的长度是1000,最后一个是500。
确认号要比序号难理解一些。前面讲过,TCP是全双工的,因此主机A在向主机B发送数据的同时,也可能接收来自主机B的数据。从主机B到达的每个报文段中的序号字段包含了从B流向A的数据的起始位置。 因此主机B填充进报文段的确认号是主机B期望从主机A收到的下一报文段首字节的序号。
假设主机B已收到了来自主机A编号为7-1006的所有字节,同时假设它要发送一个报文段给主机A。主机B等待主机A的数据流中字节1007及后续所有字节。所以,主机B会在它发往主机A的报文段的确认号字段中填上1007。
再举一个例子,假设主机B已收到一个来自主机A的包含字节7-1006的报文段,以及另一个包含字节2007-3006的报文段。由于某种原因,主机A还没有收到字节1007-2006的报文段。
在这个例子中,主机A为了重组主机B的数据流,仍在等待字节1007。因此,A在收到包含字节2007-3006的报文段时,将会又一次在确认号字段中包含1007。 因为TCP只确认数据流中至第一个丢失报文段之前的字节数据,所以TCP被称为是采用累积确认。
TCP的实现有两个基本的选择:
1接收方立即丢弃失序报文段;
2接收方保留失序的字节,并等待缺少的字节以填补该间隔。
一条TCP连接的双方均可随机地选择初始序号。 这样做可以减少将那些仍在网络中的来自两台主机之间先前连接的报文段,误认为是新建连接所产生的有效报文段的可能性。
•例子telnet
Telnet由是一个用于远程登录的应用层协议。它运行在TCP之上,被设计成可在任意一对主机之间工作。
假设主机A发起一个与主机B的Telnet会话。因为是主机A发起该会话,因此主机A被标记为客户机,主机B被标记为服务器。用户键入的每个字符(在客户机端)都会被发送至远程主机。远程主机收到后会复制一个相同的字符发回客户机,并显示在Telnet用户的屏幕上。这种“回显”用于确保由用户发送的字符已经被远程主机收到并处理。因此,在从用户击键到字符显示在用户屏幕上之间的这段时间内,每个字符在网络中传输了两次。
现在假设用户输入了一个字符“C”,假设客户机和服务器的起始序号分别是42和79。前面讲过,一个报文段的序号就是该报文段数据字段首字节的序号。因此,客户机发送的第一个报文段的序号为42,服务器发送的第一个报文段的序号为79。前面讲过,确认号就是主机期待的数据的下一个字节序号。在TCP连接建立后但没有发送任何数据之前,客户机等待字节79,而服务器等待字节42。
如图所示,共发了3个报文段。第一个报文段是由客户机发往服务器,其数据字段里包含一字节的字符“C”的ASCII码,其序号字段里是42。另外,由于客户机还没有接收到来自服务器的任何数据,因此该报文段中的确认号字段里是79。
第二个报文段是由服务器发往客户机。它有两个目的:第一个目的是为服务器所收到的数据提供确认。服务器通过在确认号字段中填入43,告诉客户机它已经成功地收到字节42及以前的所有字节,现在正等待着字节43的出现。第二个目的是回显字符“C”。因此,在第二个报文段的数据字段里填入的是字符“C”的ASCII码,第二个报文段的序号为79,它是该TCP连接上从服务器到客户机的数据流的起始序号,也是服务器要发送的第一个字节的数据。
这里客户机到服务器的数据的确认被装载在一个服务器到客户机的数据的报文段中,这种确认被称为是捎带确认.
第三个报文段是从客户机发往服务器的。它的唯一目的是确认已从服务器收到的数据。
3往返时延的估计与超时
TCP如同前面所讲的rdt协议一样,采用超时/重传机制来处理报文段的丢失问题。最重要的一个问题就是超时间隔长度的设置。显然,超时间隔必须大于TCP连接的往返时延RTT,即从一个报文段发出到收到其确认时。否则会造成不必要的重传。
•估计往返时延
TCP估计发送方与接收方之间的往返时延是通过采集报文段的样本RTT来实现的,就是从某报文段被发出到对该报文段的确认被收到之间的时间长度。
也就是说TCP为一个已发送的但目前尚未被确认的报文段估计sampleRTT,从而产生一个接近每个RTT的采样值。但是,TCP不会为重传的报文段计算RTT。
为了估计一个典型的RTT,采取了某种对RTT取平均值的办法。TCP据下列公式来更新
EstimatedRTT=(1-)*EstimatedRTT+*SampleRTT
即估计RTT的新值是由以前估计的RTT值与sampleRTT新值加权组合而成的。
参考值是a=0.125,因此是一个加权平均值。显然这个加权平均对最新样本赋予的权值
要大于对老样本赋予的权值。因为越新的样本能更好地反映出网络当前的拥塞情况。从统计学观点来讲,这种平均被称为指数加权移动平均
除了估算RTT外,还需要测量RTT的变化,RTT偏差的程度,因为直接使用平均值设置计时器会有问题(太灵敏)。
DevRTT=(1-β)*DevRTT+β*|SampleRTT-EstimatedRTT|
RTT偏差也使用了指数加权移动平均。B取值0.25.
•设置和管理重传超时间隔
假设已经得到了估计RTT值和RTT偏差值,那么TCP超时间隔应该用什么值呢?TCP将超时间隔设置成大于等于估计RTT值和4倍的RTT偏差值,否则将造成不必要的重传。但是超时间隔也不应该比估计RTT值大太多,否则当报文段丢失时,TCP不能很快地重传该报文段,从而将给上层应用带来很大的数据传输时延。因此,要求将超时间隔设为估计RTT值加上一定余量。当估计RTT值波动较大时,这个余最应该大些;当波动比较小时,这个余量应该小些。因此使用4倍的偏差值来设置重传时间。
TimeoutInterval=EstimatedRTT+4*DevRTT
4可信数据传输
因特网的网络层服务是不可靠的。IP不保证数据报的交付,不保证数据报的按序交付,也不保证数据报中数据的完整性。
TCP在IP不可靠的尽力而为服务基础上建立了一种可靠数据传输服务。
TCP提供可靠数据传输的方法涉及前面学过的许多原理。
TCP采用流水线协议、累计确认。
TCP推荐的定时器管理过程使用单一的重传定时器,即使有多个已发送但还未被确认的报文段也一样。重传由超时和多个ACK触发。
在TCP发送方有3种与发送和重传有关的主要事件:从上层应用程序接收数据,定时器超时和收到确认ACK。
从上层应用程序接收数据。一旦这个事件发生,TCP就从应用程序接收数据,将数据封装在一个报文段中,并将该报文段交给IP。注意到每一个报文段都包含一个序号,这个序号就是该报文段第一个数据字节的字节流编号。如果定时器还没有计时,则当报文段被传给IP时,TCP就启动一个该定时器。
第二个事件是超时。TCP通过重传引起超时的报文段来响应超时事件。然后TCP重启定时器。
第三个事件是一个来自接收方的确认报文段(ACK)。当该事件发生时,TCP将ACK的值y与变量SendBase(发送窗口的基地址)进行比较。TCP状态变量SendBase是最早未被确认的字节的序号。就是指接收方已正确按序接收到数据的最后一个字节的序号。TCP采用累积确认,所以y确认了字节编号在y之前的所有字节都已经收到。如果Y>SendBase,则该ACK是在确认一个或多个先前未被确认的报文段。因此发送方更新其SendBase变量,相当于发送窗口向前移动。
另外,如果当前有未被确认的报文段,TCP还要重新启动定时器。
快速重传
超时触发重传存在的另一个问题是超时周期可能相对较长。当一个报文段丢失时,这种长超时周期迫使发送方等待很长时间才重传丢失的分组,因而增加了端到端时延。所以通常发送方可在超时事件发生之前通过观察冗余ACK来检测丢包情况。
冗余ACK就是接收方再次确认某个报文段的ACK,而发送方先前已经收到对该报文段的确认。
当TCP接收方收到一个序号比所期望的序号大的报文段时,它认为检测到了数据流中的一个间隔,即有报文段丢失。这个间隔可能是由于在网络中报文段丢失或重新排序造成的。因为TCP使用累计确认,所以接收方不向发送方发回否定确认,而是对最后一个正确接收报文段进行重复确认(即产生一个冗余ACK)
如果TCP发送方接收到对相同报文段的3个冗余ACK.它就认为跟在这个已被确认过3次的报文段之后的报文段已经丢失。一旦收到3个冗余ACK,TCP就执行快速重传 ,
即在该报文段的定时器过期之前重传丢失的报文段。
5流量控制
前面讲过,一条TCP连接双方的主机都为该连接设置了接收缓存。当该TCP连接收到正确、按序的字节后,它就将数据放入接收缓存。相关联的应用进程会从该缓存中读取数据,但没必要数据刚一到达就立即读取。事实上,接收方应用也许正忙于其他任务,甚至要过很长时间后才去读取该数据。如果应用程序读取数据时相当缓慢,而发送方发送数据太多、太快,会很容易使这个连接的接收缓存溢出。
TCP为应用程序提供了流量控制服务以消除发送方导致接收方缓存溢出的可能性。因此,可以说 流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读速率相匹配。
前面提到过,TCP发送方也可能因为IP网络的拥塞而被限制,这种形式的发送方的控制被称为拥塞控制(congestioncontrol)。
TCP通过让接收方维护一个称为接收窗口的变量来提供流量控制。接收窗口用于告诉发送方,该接收方还有多少可用的缓存空间。因为TCP是全双工通信,在连接两端的发送方都各自维护一个接收窗口变量。 主机把当前的空闲接收缓存大小值放入它发给对方主机的报文段接收窗口字段中,通知对方它在该连接的缓存中还有多少可用空间。
6 TCP连接管理
客户机中的TCP会用以下方式与服务器建立一条TCP连接:
第一步: 客户机端首先向服务器发送一个SNY比特被置为1报文段。该报文段中不包含应用层数据,这个特殊报文段被称为SYN报文段。另外,客户机会选择一个起始序号,并将其放置到报文段的序号字段中。为了避免某些安全性攻击,这里一般随机选择序号。
第二步: 一旦包含TCP报文段的用户数据报到达服务器主机,服务器会从该数据报中提取出TCPSYN报文段,为该TCP连接分配TCP缓存和控制变量,并向客户机TCP发送允许连接的报文段。这个允许连接的报文段还是不包含应用层数据。但是,在报文段的首部却包含3个重要的信息。
首先,SYN比特被置为1。其次,该 TCP报文段首部的确认号字段被置为客户端序号+1最后,服务器选择自己的初始序号,并将其放置到TCP报文段首部的序号字段中。 这个允许连接的报文段实际上表明了:“我收到了你要求建立连接的、带有初始序号的分组。我同意建立该连接,我自己的初始序号是XX”。这个同意连接的报文段通常被称为SYN+ACK报文段。
第三步: 在收到SYN+ACK报文段后,客户机也要给该连接分配缓存和控制变量。客户机主机还会向服务器发送另外一个报文段,这个报文段对服务器允许连接的报文段进行了确认。因为连接已经建立了,所以该ACK比特被置为1,称为ACK报文段,可以携带数据。
一旦以上3步完成,客户机和服务器就可以相互发送含有数据的报文段了。
为了建立连接,在两台主机之间发送了3个分组,这种连接建立过程通常被称为 三次握手(SNY、SYN+ACK、ACK,ACK报文段可以携带数据) 。这个过程发生在客户机connect()服务器,服务器accept()客户连接的阶段。
假设客户机应用程序决定要关闭该连接。(注意,服务器也能选择关闭该连接)客户机发送一个FIN比特被置为1的TCP报文段,并进人FINWAIT1状态。
当处在FINWAIT1状态时,客户机TCP等待一个来自服务器的带有ACK确认信息的TCP报文段。当它收到该报文段时,客户机TCP进入FINWAIT2状态。
当处在FINWAIT2状态时,客户机等待来自服务器的FIN比特被置为1的另一个报文段,
收到该报文段后,客户机TCP对服务器的报文段进行ACK确认,并进入TIME_WAIT状态。TIME_WAIT状态使得TCP客户机重传最终确认报文,以防该ACK丢失。在TIME_WAIT状态中所消耗的时间是与具体实现有关的,一般是30秒或更多时间。
经过等待后,连接正式关闭,客户机端所有与连接有关的资源将被释放。 因此TCP连接的关闭需要客户端和服务器端互相交换连接关闭的FIN、ACK置位报文段。