TCP/IP Illustrated, Volume 1: The Protocols 第一章 学习笔记

Chapter 1 Introduction
    有效的交流基于使用同一种语言,这是人类和其他动物的规律,计算机也是如此, 当一组通用行为与一种通用语言一起使用时,将使用一个协议。根据New Oxford American Dictionary第一次对协议做出的定义,用官方的程序或者系统的规则来管理国家事务或者外交场合。
1.1.2 The end-to-end Argument and Fate sharing(端到端原则和命运共享)
    What about the end-to-end argument?
The function in question can completely and correctly be implemented only with the knowledge and help of the application standing at the end points of the communication system. Therefore, providing that questioned function as a feature of the communication itself is not possible. (Sometimes an incomplete version of the function provided by the communication system may be useful as a performance enhancement.)
 
However, low levels may provide capabilities that make the job of the endpoints somewhat easier and consequently may improve performance
但是,低级别可以提供使端点的工作更容易的功能,因此可以提高性能。
 
A nuanced reading reveals that this argument suggests that low level functions should not aim for perfection because a perfect guess at what the application may require is unlikely to be possible.
细致入微的阅读表明,该论点表明低级功能不应该追求完美,因为不可能对应用程序可能需要的东西做出完美的猜测。
 
端到端协议倾向于支持一种“哑”的网络设计和“聪明”的系统去连接互联网。TCP/IP协议就是这样设计的,其中的许多功能(例如确保数据不会丢失、控制发送方发送速率的方法)在应用程序所在的最终主机中实现。
 
 fate sharing:在同一计算机,网络或软件堆栈中一起实现哪些功能的选择是另一项被称为命运共享的相关原则的主题
    fate sharing建议将所有必要的状态置于与通信端点相同的位置以保持活动的通信关联。
    fate sharing的一种设计哲学允许虚拟连接保持活跃状态即使与在一个周期内网络连接失败
    fate sharing也支持“哑网络和聪明的终端”模型, 和当今Internet上持续存在的压力之一是网络中存在哪些功能,哪些功能不存在
 
1.1.3 Error Control and Flow Control(异常控制和流量控制)
    有几种情况网络中的数据会受到破坏或丢失,比如硬盘问题、 在无线网络中超出范围的发送,会使传输时修改位(radiation that modifies bits while being transmitted,being out of range in a wireless network),解决这些问题叫做异常控制(Error Control)。
异常控制(Error Control)
异常控制
原文
译文
 
it can be implemented in the systems constituting the network infrastructure
可在构成网络基础架构的系统中实现
 
in the system that attach to the network,or some combination
在连接到网络的系统中,或以某种组合方式
其实,端到端协议和命运共享建议异常控制应在应用程序附近或内部实现。
     通常,如果只考虑少量的位错误,可以使用许多数学代码来检测和修复接收到数据或传输数据时的位错误。这项任务通常在网络里执行,当更严重的破坏出现在分组网络(packets network)中,通常重新发送或重发整个数据包。
    在电路交换网络(circuit-switced)和VC-switched networks ,比如X.25、倾向于在网络内部完成重传。 这对于要求严格按顺序,无错误地传输数据的应用程序可能会很好,但是某些应用程序不需要此功能并且不希望支付费用(例如,建立连接和潜在的重传延迟)以可靠地传递其数据。即使是可靠的文件传输程序也不在乎文件数据包的传输顺序,前提是最终可以满足所有块的要求而无任何错误,并且可以将其重新组合回原始顺序。
     作为在网络内实施可靠的有序交付的开销的替代方案,一种不同的服务叫做 best-effort delivery(最高效传输)被Fram Relay应用在了因特网协议上,bet-effort delivery不需要花费太多的效率去确保数据的传输没有异常和空隙,某些类型的错误经常被error-detecting code(异常检测代码)或者checksums(校验和)发现,比如那些可能会影响数据报定向的地方,但当异常被发现,异常的数据报仅被丢弃而无需采取进一步措施。
    如果best-effort delivery是成功的, 那么快速发送者可以产生超出接收者消耗信息能力的信息,在最高效IP网络中,通过在网络外部和更高级别的通信系统上运行的流量控制(Flow Control)可以降低发送者的速度。通常是TCP解决这类问题,我们在Chapters 15和16讨论这个问题。TCP在宿主(the end host)里来解决比率控制,这和端到端协议是一致的。 best-effort delivery方法允许网络基础结构的某些元素发生故障,而不必影响网络外部设备的通信能力(只要某些通信路径继续运行),这和命运共享是一致的。
1.2 设计和实施
    尽管协议架构可能建议使用某些方法去实现。它通常是不包括授权的。因此我们在协议体系结构(protocol architecture)和实现体系结构(implementation architecture)之间进行了区分,后者定义了协议体系结构中的概念通常如何以软件形式实现。 许多负责实施ARPANET协议的人员都熟悉操作系统的软件结构,并且在描述“ THE”多程序系统[D68]的影响力文章中,提倡使用分层结构作为验证方法。 大型软件实现的逻辑合理性和正确性。最终,这有助于为网络协议包含多层的实现和设计的设计哲学。这个方法现在叫做分层(layering),经常被用来实现协议套件。
 
1.2.1 Layering(分层)
    在分层的结构中,每层负责信息的不同方面,分层是有益的,因为分层设计允许开发人员分别由具有不同专业知识领域的不同人员分别开发系统的不同部分。 协议分层最常提到的概念基于国际标准化组织(ISO)定义的称为开放系统互连(OSI)模型[Z80]的标准。图1-2展示了标准的分层结构,包括名称、层数和一些例子。
 
Number
Name
Description/Example
 
7
Application
应用层
Hosts
6
Presentation
表示层
Hosts
5
Session
会话层
Hosts
4
Transport
传输层
Hosts
3
Network or Internetwork
网络层
All Networked Devices
2
Link
链路层
All Networked Devices
1
Physical
物理层
All Networked Devices
figure 1-2 layer
    尽管OSI模型建议7层逻辑层可能对于协议体系结构实现的模块化是理想的,然而TCP/IP结构通常由5部分组成。在1970年代初期,关于OSI模型以及它之前的ARPANET模型的相对优点和缺点存在很多争论。尽管可能公平的讲,TCP/IP最终“赢了”,一些想法甚至是整个协议都来自于ISO,已被用于TCP/IP。
    图中每一层都有不同的职责。从低向上,
        The physical layer定义了移动数字信息跨越通信媒体的方法,比如电话线或者光纤电缆
        The link or data-link layer包括用于建立与共享同一媒体的邻居的连接性的那些协议和方法。一些链路层网络连接(比如DSL)只有2个邻居,当多余1个的邻居通过相同的共享网络,这个网络被称为multi-access network,WI-FI和Ethernet(以太网)是multi-access link-layer network的一个例子,并且使用特定协议来调解在任何给定时间哪些站可以访问共享介质。
        The Internet or internetwork layer对我们来说很重要。对于分组网络(packet network)比如TCP/IP,提供了一种可互操作的数据包格式,可以使用不同类型的链路层网络进行连接。该层还包括用于主机的寻址方案(addressing scheme for hosts)和路由算法(routing algorithms),用于选择从一台计算机发送到另一台计算机时数据包的去向。在第3层之上,我们发现(至少在理论上)仅由最终主机(包括传输层the transport layer)实现的协议。
        The transport layer提供了会话之间的数据流,并且可能非常复杂,具体取决于它提供的服务类型(比如在在分组网络上进行可靠传输可能会出现数据丢失)
        The sessions表示应用程序之间正在进行的交互(例如,在Web登录会话期间与Web浏览器一起使用“ cookie”时),会话层协议可以提供诸如连接启动和重新启动以及检查点之类的功能。
        The presentation layer的职责是格式转换和信息的标准编码,Internet协议不包括正式的会话或表示协议层,因此这些功能可以在需要时由应用程序实现。
        The Application layer在最顶端,应用经常实现它们自己的应用层协议,这是最容易被用户看到的,应用层是创新量最大的地方,也是开发和部署新功能的地方,应用层的协议有很多。
1.2.2 Multiplexing(多路复用),Demultiplexing(分用),and Encapsulation(封装) in Layered Implementation(分层实现)——分层实现多路复用、分用和封装
    分层结构的主要优点之一就是其执行协议复用的自然能力,这种多路复用形式允许多个不同的协议在同一基础结构上共存。它还允许在不混淆的情况下同时使用同一协议对象的多个实例化(例如,连接)。
    多路复用可以在不同的层中发生,在每一层,标识符不同的排序被用来确定哪些协议或者信息流属于一起,举个例子,在链路层,大多数链路技术(比如以太网和WI-FI)每个分组网络中都包含一个协议标识符字段,指示链路层帧(the link-layer frame)中正在承载哪个协议(IP是这样的协议之一),当一种被称为协议数据单元的对象(比如包、信息等),由较低层承载,则称为下一层被封装(作为不透明数据)。因此,可以使用N-1层的封装将N层的多个对象复用在一起。图1-3展示了这项工作,标识符在第N-1层被用来决定正确的接收协议或者在第N层进行分用的编程。
    如图1-3,每一层都有它自己的信息对象的概念对应的层负责创造它,比如,如果传输层协议生产了一个包,它被称为第四层PDU或者TPDU。
 
1.4 Internet,Intranet,and Extranets (因特网,内联网,外联网)
    正如前文所说,互联网已经发展成为聚合网络,它是随着时间的推移组成网络之间的互连而产生的。小写的互联网(The lowercase internet)是多个网络通过通用协议套件连接在一起,大写的互联网(The Uppercase Internet)指世界各地主机的集合并通过TCP/IP和其他主机连接到一起。The Internet is an internet,因特网也是互联网,但事实并非如此。、
    在1980年,促进网络的飞速发展其中的一个原因就是意识到了孤立的独立计算机组毫无意义,一些独立的系统被网络连接在一起。虽然这是前进的一步,在1990年我们意识到了分离的网络的相互操作性不如更大的网路有价值。这个概念是所谓Metcalfe`s low的基础, 它大概代表了计算机互联网的价值与连接的终端的平方成正比。互联网思想和它所支持的协议使不同的网络相互连接成为了可能。这个看似简单的概念非常强大(This deceptively simple concept turns out to be remarkably powerful)
    建立互联网最简单的方式是通过路由器(router)连接两个以上的网络,路由器通常是连接网络的专门设备。路由器的好处是提供多种不同类型的物理网络:以太网、WIFI、点对点链接、DSL、有限上网服务。
    近年来,使用TCP / IP协议套件的Internet的不同配置还采用了其他术语。内联网用来描述一个私有的内部连接的网络,经常运行在商业和一些企业中,最常见的是,Intranet提供对仅特定企业成员可用的资源的访问。用户可以使用虚拟专用网(virtual private network VPN)连接他们的内联网,VPN有助于确保通常仅使用我们前面提到的隧道概念,才对授权用户提供对Intranet中潜在敏感资源的访问权限。我们讨论更多VPN的细节在第7章。
    在许多情况下,企业或企业希望建立一个包含服务器的网络,某些合作伙伴或其他员工可以使用Internet访问这些服务器。这种网络通常也涉及VPN的使用,被称为外联网,由连接在服务企业防火墙外部的计算机组成(请参阅第7章)。从技术上讲,Intranet,Extranet和Internet之间几乎没有什么区别,但是使用案例和管理策略通常是不同的,因此,其中一些更具体的术语已经演变。
 
1.5 设计应用(Designing Application)
    到目前为止,我们所涉及的网络概念提供了一个相当简单的服务模型:在不同计算机上运行的程序之间移动字节。为了使用此功能做任何有用的事情,我们需要使用网络来提供服务或执行计算的联网应用程序。网络应用(network applications)通常根据少量设计模式进行结构化。最常见的模式就是client/server(客户端/服务端)和peer-to-peer。
 
1.5.1Client/Server
    大多数网络应用程序都设计为一侧为客户端,另一侧为服务器。服务器为客户提供一些形式的服务,比如访问服务器主机上的文件。我们把服务器分成两类:迭代(iterative)和并发( concurrent)。一个迭代的服务器通过以下步骤进行迭代:
 
step1.等待客户端请求到达(wait for a client request to arrive)
step2.处理客户要求(Process the client request)
step3.将响应发送回发送请求的客户端(Send the response back to the client that sent the request)
step4.返回第一步(Go back to step 1)
 
    迭代服务器发生的问题是在step2花了太长的时间。在这段时间内其他的客户端没有被服务。另一方面,并发服务器执行下面的步骤。
 
step1.等待客户端请求到达(wait for a client request to arrive)
step2.开始一个新的服务器实例来解决客户端请求,这可能包含创建一个新的进程,任务或者线程,这取决于基础操作系统支持什么,这个新的服务器解决一个客户端的完整请求。当请求的任务完成了,这个新的服务器就结束了,与此同时,原始的服务器实例继续step3
step3.返回到第一步
 
    并发服务器的优势是该服务器仅生成其他服务器实例来处理客户端请求。本质上,每个客户端有他自己的服务器。假设操作系统允许进行多进程(今天基本上都可以进行),则可以同时为多个客户端提供服务。我们分类服务器而不是客户端的原因是,客户端通常无法分辨它是在与迭代服务器还是并发服务器通信。通常,大多数服务器是并发的。请注意,我们使用术语“客户端”和“服务器”来指代应用程序,而不是指它们在其上运行的特定计算机系统。有时使用相同的术语来指代最常用于执行客户端或服务器应用程序的硬件。因此,尽管该术语有些不精确,但在实践中效果很好。 结果,通常会发现一台服务器(从硬件的角度来看)运行着一台以上的服务器(从应用程序角度而言)。
 
1.5.2 peer-to-peer(点对点网络)
    有些应用程序是在没有单个服务器的情况下以更分布式的方式设计的。 而是,每个应用程序既充当客户端又充当服务器,有时同时充当两者,并且能够转发请求。一些非常流行的应用程序(比如:Skype,BitTorrent)就是这种形式。这些应用程序被称为peer-to-peer或者p2p应用。一个并发的p2p应用可能接收一个输入请求,确定它是否能够响应该请求,如果不能,则将请求转发给其他的peer(点)。 因此,p2p应用程序集合一起构成了应用程序之间的网络,也被称为延伸网络(overlay network),这样的叠加层现在很普遍,并且功能非常强大。 举个例子,Skype已经成长为最大的国际电话运营商。根据一些估计,2009年,BitTorrent负责所有互联网流量的一半以上。
    p2p网络的一个最主要问题是发现问题(discovery problem),也就是说,一个对等方如何找到一个对等方可以在对等方来来往往的网络中提供所需的数据或服务?这通常通过引导过程来处理,在该过程中,每个客户端最初都配置有可能正在运行的某些对等方的地址和端口号。建立连接后,新参与者将了解其他活动对等方,并根据协议了解其提供的服务或文件。
 
1.5.3 Application Programming Interfaces(APIs)
    应用程序,无论是p2p还是客户端/服务器,都需要设计其所需的网络操作(比如,创建连接,读写数据)。使用网络应用程序编程接口的主机操作系统通常会对此提供支持,最流行的API是socket或者Berkeley socket,这表明了它最初在哪里开发。这段文字不是为了编程的,但是有时我们会提到TCP / IP的功能,以及该功能是否由套接字API提供。所有socket例子的编程细节是可以被找到的。
1.6 标准化过程( Standardization Process)
    TCP / IP套件的新手经常想知道谁负责指定和标准化各种协议以及它们如何操作。一些代表组织回答了这个问题。我们将会最常关心的团体是(IETF),这个组织在全球各地每年开3次会议来开发、讨论和决定因特网核心协议的标准。究竟该如何构成核心还有待辩论。但是普通的协议比如IPv4、IPv6、TCP、UDP和DNS在IETF中有清晰的预览。IETF会议对所有人开放参加,但不是免费的。
    IETF是一个选举领导小组的论坛,称为Internet建筑委员会(IAB)和Internet工程指导小组(IESG)。授予IAB的职责是为IETF中的活动提供体系结构指导,并执行许多其他任务,例如任命与其他标准定义组织(SDO)的联络人。IESG具有创建和批准新标准以及修改现有标准的决策权。 “繁重的工作”或详细的工作通常由IETF工作组执行,这些工作组由自愿执行此任务的工作组主席协调。
    除IETF之外,还有两个与IETF紧密交互的重要组。互联网研究任务组(IRTF)探索协议,体系结构和程序,这些协议,体系结构和程序对于标准化而言还不够成熟。IRTF的主席是IAB的无表决权成员。 反过来,IAB与互联网协会(ISOC)合作,帮助影响和促进有关互联网技术和使用的全球政策和教育。
1.6.2 Other Standards
1.7 Implementations and Software Distributions(实施和软件发行)
    TCP/IP标准的历史事实来自计算机研究协会(CSRG)在加州大学伯克利学院,他们发布了4.xBSD系统直到1990年中期BSD网络发布,源码被其他应用作为出发点。今天每个流行的操作系统都有他们自己的应用。在本书中,我们试图描绘Linux,Windows和一些FreeBSD和Mac OS的TCP/IP模型,在大多数案例中,特定的实现无关紧要。
    下图展示了各种BSD发布的年表,指出我们将在下一章中介绍的重要TCP / IP功能。也展示linux和windows开始支持TCP/IP的年份。第二栏中显示的BSD网络版本是可免费获得的公共源代码版本,包含所有网络代码,包括协议本身以及许多应用程序和实用程序。
    90年代中期,因特网和TCP/IP协议已经完善了。
1.8 Attacks Involving the Internet Architecture(涉及Internet体系结构的攻击)
  几乎没有针对整个Internet体系结构的攻击,然而Internet架构基于终端IP地址传输IP数据报还是值得研究的,因此,恶意用户可以插入任何内容他们选择的IP地址进入他们每个IP数据报的源IP地址字段发送,这种活动称之为欺骗(Spoofing)。欺骗可以与Internet上定期出现的各种其他攻击结合在一起。
  Denial-of-service(Dos)攻击经常涉及一些重要的资源,以致合法用户无法获取服务,举个例子,当向服务器发送大量IP数据报时,导致服务器花费所有的时间来处理传入的数据包,而没有执行其他有用的工作,这就是DoS攻击的一种。 其他DoS攻击可能涉及大量流量阻塞网络,以致无法发送其他数据包。
  Unauthorized access (未授权进入)攻击,在未授权时访问数据或资源。  
  Internet体系结构的另一个问题是,原始Internet协议没有执行任何加密来支持身份验证,完整性或机密性。因此,恶意用户通常可以仅通过观察网络中的数据包来确定私人信息。那些有能力修改传输中的数据包还可能冒充用户或更改消息的内容。尽管由于使用了加密协议,这些问题已大大减少,但有时仍会使用旧的或设计不当的协议,这些协议容易受到简单的窃听攻击。考虑到无线网络的普遍存在,相对容易“嗅探”其他人发送的数据包的情况,应避免使用这种较旧或不安全的协议。请注意,虽然可以在一层(例如,在链路层Wi-Fi网络上)启用加密,但只有主机到主机的加密(IP层或更高级别)才能保护IP数据报在多个网络段上的信息。
 
原文地址:https://www.cnblogs.com/Ronnie-97/p/14583055.html