Computer Networking: A Top Down Approach

知识就是力量,时间就是生命。这篇文章主要讲述Computer Networking: A Top Down Approach相关的知识,希望能为你提供帮助。

  • 目录
    目录
    • Chapter 1: Computer Networks and the Internet
      • 1. What is the Internet?
        • 1.1 A Nuts-and-Bolts Description 基本特征描述
        • 1.2 A Service Description
      • 2. The Network Edge
        • 家庭网络接入:
        • 企业网络接入:
        • 物理介质
      • 3. The Network Core
        • 3.1 Packet Switching
        • 3.2 Circuit Switching
      • 4. Delay,Loss,and Throughput in Packet-Switched Networks
        • End-to-End Delay 端到端的延迟
    • Chapter 2 : Application Layer 应用层
      • 1.进程间交流(p88)
        • 如何识别收发的进程:
      • 2.安全的传输层协议(p94)
      • 3.Web Caching(p110)
      • 4.Distributed Hash Tables(DHTs)
      • 5.Socket Programming: Creating Network Applications
      • 6.Sockt Programming Assignment
        • Assignment 1: Web Server
        • Assignment 2: UDP Pinger
        • Assignment 3: Mail Client
        • Assignment 4: Multi-Threaded Web Proxy
    • Chapter 3: Transport Layer
      • Multiplexing and Demultiplexing
      • 安全
      • Building a Reliable Data Transefer Protocol
      • Pipelined Reliable Data Transfer Protocols
      • 安全
      • Principle of Congestion Control
      • 总结
    • Chapter 4 The Network Layer 网络层
      • 问三个问题:
      • 4.1 引入
        • Forwarding and Rounting
      • 4.2 Virtual Circuit and Datagram Networks
        • Oringins of VC and Datagram Networks
        • What\'s inside a Router?
        • Input Processing 输入处理
        • Switching 交换的几种方式
        • Output Processing 输出处理
这本书是计算机网络最好的入门书籍,与传统的计算机网络书籍不同,它采用了自顶而下的方式去讲解。感谢两位十分出色的作者:Jim Kurose和Keith Ross, 他们生动的叙述方式使我觉得计算机网络如此有趣。单单引用文献就有33页,我十分佩服这么严谨又有耐心的人。
Keep those cards and letters coming! --谚语
Chapter 1: Computer Networks and the Internet计算机网络的概览,描绘了这本书蓝图。borad picture,to see the forest through the trees. 这是一个引入性章节,覆盖了大量的基础知识和计算机网络的很多方便,但是也没有失去重点。introductory chapter,without losing sight of the big picture.
1. What is the Internet?
1.1 A Nuts-and-Bolts Description 基本特征描述定义:
The Internet is a computer network that interconnects hundreds of millions of computing devices throughout the world.
简而言之,设备互联。
诸如笔记本,智能手机,游戏控制台,摄像头,环境传感器等,这些非传统的设备就像被计算机网络钩住(hooked up)了一样。在因特网的术语(jargon)中,这些设备被称为 hosts(主机) 或 end systems(终端)。终端访问因特网通过Internet Service Providers(ISPs), 还有本地的ISPs,例如中国电信。
packets =header bytes + data bytes
所以为什么网路字节序是大端序? 因为要先传输字节头。
1.2 A Service Descriptionthe Internet as an infrastructure that provides service to applications.
【Computer Networking: A Top Down Approach】协议的定义:
A protocol defines the format and the order of messages exchanged between two or more communicating entities,as well as the actions taken on the transmision and/or receipt of a message or other event.
精通计算机网络的本质:
Mastering the field of computer networking is equirvalent to understading what, why, and how of networking protocols.
2. The Network Edge
end systems -- at edge of the Internet
为什么end systems 也被称为 hosts?
Because they host(that is, run) application programs such as a Web browser program, and e-mail client program, or an e-mail server program.
这本书中,host = end system.
Hosts are somnetimes further divided into the two categories: clients and servers.
注意,不要以为服务器就不是终端或者主机了,虽然它们提供了服务(搜索引擎,邮箱等),但是对因特网而言,它们和别的终端没有区别,都是运行了应用而已。servers 服务器端常有很大的数据中心(data centers),谷歌有30-50个数据中心,提供了成百上千的服务。
家庭网络接入:DSL方式
为什么通常上行速率和下行速率通常不同?
Because the downstream and upstrean transmission rates are diffent,the access is said to be asymmetric.
DSL有DSL modern,外面和电话挂在同一个分离器上。
Cable Internet access 方式
Cable电缆常用于电视公司搭建的因特网访问方式。最常见的是同轴电缆(coaxial caBLE)+ 光纤混用方式,一个同轴电缆下挂多个用户,同轴电缆线接在光纤节点上,此外都是光纤传输。
它同样需要特殊一个的modems,称为cable modems。它一个重要而典型的特征就是它是共享的广播媒介。发送或者接受的包会被上传或者下载到同一channel的每个用户上。
FTTH (fiber to the home)光纤到户
每个用户都有一个ONT(optical network terminator 光网络终端),多个用户(通常不到100个)都通过光纤连接到同一个上分光器(Optical splitter),光分器通过光纤连接到OLT(光线路终端机),光线路终端机再连接到电信公司的CO(central office)
企业网络接入:LAN = local area network,
一个基础路由器+ 以太网交换机,所有设备都直连到以太网交换机上。
物理介质具体的每种介质不需要深究,要始终记住:每种介质限定了它自身的网络传输承载能力,传输速度和传输距离。
3. The Network Core
有两种基本的方式通过网络链路和交换机去移动数据:包转发和电路交换。
3.1 Packet Switching
  • Store-and-Forward Transmission存储转发传输
  • Queuing Delays and Packet Loss
  • Forwatding Tables and Routing Protocols
3.2 Circuit Switching采用面向连接的方式,在双方通信之前,需要为通信双方分配一条具有固定带宽的通信电路,在通信双发在通信的过程中一直占用所分配的资源,直到通信结束。
电路交换的网络中,资源需要一个占用一个路径,包括路径上的buffer,link 传输比率,在两个终端之间需要保留会话的持续时间。传统的电话网络就是基于电路交换的网络。不要想当然的以为网络就只是英特网,电话网络也是一种网络。
优点:可以为用户保证会话的稳定性,实时性强,时延小,交换设备成本低。
缺点:带宽利用率低,一旦电路连接建立,不管通信与否都将占用通信。
一个链路中电路交换的实现有两种方式:
FDM 频分复用和 TDM 时分复用
4. Delay,Loss,and Throughput in Packet-Switched Networks
  • nodal processing delay 节点的处理时延$$< 10^-6$$
  • queuing delay delay 排队时延$$10^-6 - 10^-3$$
  • transmission delay 发送时延$$10^-6 - 10^-3$$
  • propagation delay 传播时延 $$d/s$$ s = speed,小于光速,约为光速的2/3
发送时延是从节点到传输介质的延迟,发送时延=数据/带宽。和设备的船宿速度有关。
传输时延和包的大小没关系,取决于距离和传输速率。传播时延=发送距离/传播速率 因为在某种介质中传输的速率固定的。
End-to-End Delay 端到端的延迟dend-end = N(dproc + dtrans + dprop)
其中dtrans = L/R = packet size/Rates
Chapter 2 : Application Layer 应用层本章主要是讲应用层协议,懒得写了,费事,妨碍看书的速度。挑自己认为重要的写写。
1.进程间交流(p88)
操作系统中,应用程序的本质是进程,不同的进程之前免不了要进行交流。本质上,英特网客户端和服务器的交流通过进程实现。这里我门只关注网络上运行在不同的两个主机之间的进程交流。
一个类比:
有个房子,房子有个门。我们访问这个房子,总是通过门去访问。
Process就像是房子,Socket就像是门。
Socket描述了应用层和传输层之间的接口,它是由网络应用创建的。当来自传输层的数据报交付给上层的应用层时,它总想交给特定的应用,因此就有了Socket。应用层开发这只关心应用层这边的Socket,而不关心传输层那边的。最多只是选择传输层的协议,或者设置一些传输层参数,比如最大的Buffer和报文段的大小。
更精妙的比喻:
  • 想着这里有个大水坝,一边是传输层,一边是应用层。水坝上有很多孔洞,用于放水。每个应用会独占一个孔洞,用于发送和等待接受水,而另一边是传输层。
  • 又像是古代的皇帝在翻牌子。
如何识别收发的进程:
  1. 主机的地址--> IP地址
  2. 收发进程的识别符号--> 端口号
2.安全的传输层协议(p94)
传输层最出名的两个协议就是TCP和UDP,但是它们两都是不加密的。如果应用程序发送了一个明文密码,而这个包被别人捕获到了,那么就可能就存在安全问题了。
所以就想办法加强一下TCP协议,就有了Secure Sockerts Layrer(SSL), SSL不是第三个传输层协议,处于TCP和UDP的同层次,而是TCO和UDP协议的加强,负责加密,数据整合,端点认证。
这种加强由应用层实现,特别的,如果一个应用程序想要使用SSL服务,那么它需要包含SSL的代码(高度优化的类和库)。SSL有自己的socket API,假设应用层使用了明文密码,那么SSL会对它进行加密,接受房的SSL对它进行解密。
使用WireShark 研究HTTP协议
3.Web Caching(p110)
Web Caching = Proxy server
Computer Networking: A Top Down Approach

文章图片

  1. can substantially reduce the response time
  2. reduce Web traffic in the Internet as a whole
4.Distributed Hash Tables(DHTs)
simple databash in a P2P network,key -- value.
  • key: content names(e.g. names of movies, albums, and software)
  • value: IP address
5.Socket Programming: Creating Network Applications
写了一个UDP的简单C/S应用,放在了博客园。
http://www.cnblogs.com/crb912/p/9060670.html
++书中一个很重要的地方(p163),就是UDP和TCP的套接字编程时,有所不同++:
就是UDP是无连接的,每次读写socket时,都需要加入主机的地址,接受数据也得到是两个参数(data, addr)。而TCP的socket则不需要这么做,因为它是面向连接的,在读写基于这个连接的socket时,只需要直接的读写数据。而不需要关注去加入和接受这个目标主机地址。因为TCP的协议已经帮你建立好专用的连接了。
6.Sockt Programming Assignment
Assignment 1: Web Server
  1. 接受的客户端的连接
  2. 接受这次连接的HTTP request
  3. 解析这个请求的文件
  4. 从服务器的文件系统中获取这个文件
  5. 创建一个HTTP response消息,包含这个请求的文件
  6. 发送这个响应文件,如果服务器的文件系统中不存这个文件,则返回404 Not Found
这个作业我没有自己动手,https://blog.csdn.net/hmunan/article/details/73826062 这篇文章很好的帮助了我。感觉如果我自己去写,我可能写不出来,因为我没理解HTTP应答,甚至没想到把html文件写入这个TCP连接中。
Assignment 2: UDP Pinger实验内容:基于UDP实验一个Ping工具.
题目的链接:https://wenku.baidu.com/view/ed19e6cce2bd960591c677d2.html
我写的答案放在博客园上: https://www.cnblogs.com/crb912/p/9082379.html
Assignment 3: Mail Client这个实验没什么兴趣,就跳过吧
Assignment 4: Multi-Threaded Web Proxy这个实验要求实现一个Web Proxy(网页代理),一个浏览器向代理请求网页, 然后Web Proxyorigin server请求网页,请求的结果返回给Web Proxy,最终返回给浏览器。
难点在于:数据的流动和多线程https://www.cs.rochester.edu/~kshen/csc257-fall2009/assignments/assignment1.html
Chapter 3: Transport Layer Multiplexing and Demultiplexing
定义:
Each trasport-layer segment has a set of fields in the segment for this purpose. At eceiving end, the transport layer examines these indentify the receiving socket and then directs the segment to that socket. This job of delivering the data in a tranport-layer segment to the corrent socket is called dumultiplexing.分用
The job of gathering data chunks at the source host from different sockets, encapsulating each data chunk with header information (that will later be used in demultiplexing.) to create segments, and passing the segmengts to the network layer is called multiplexing. 复用
总结一下:
在接收端,传输层把接受到的segment,传输给相应的socket,这个称为分用。
在发送端,来自上层的不同socket,需要被封装成segment,然后把Segment传递给下面的网络层,这个过程称为复用。
关于实现:
传输层要想实现分用,就必须有两个条件成立:
  1. the sockets must have unique identifiers. 标识符唯一
  2. 每个segment必须有特殊的字段指示,用于告诉传递给哪个socket.
bind()方法可以绑定套接字到特定的端口,这对服务器端很有好处,但对客户端意义不大。
UDP socket 被一个2元组标识: 目标IP,目标port
TCP socket被一个4元组标识:源IP,源port,目标IP, 目标port。
socket是网络上两台不同的计算机之间进程通信的手段,对于同一台主机,它可以有大量的进程,每个进程都可以有自己的端口,并且关联唯一的一个端口。记住: Socket = 网络进程通信
如果两个UDP segment 具有相同的目标IP和port,不同的源IP和port。然后这两个segmet会进入同一个UPD socket进入同一个目标process.
安全
由于端口暴露,容易收到攻击。著名的SQL 2000 Slammer worm蠕虫病毒就是如此。因为每个socket都有自己的buffer,当被攻击时,buffer overflow。
Building a Reliable Data Transefer Protocol
这个小节十分重要,讲述了如何去建立一个可靠的数据传输协议。这是一个逻辑上的设计,作者严谨的考虑了三种情况。
  • 在可靠的Channel上的传输: rdt1.0
  • 在存在Bit Errors的Channel上传输:rdt2.0
  • 在存在bit Errors的Lossy Channel上传输: rdt3.0
在第三种方案中,已经考虑差错校验,Timer, Sequence number,ACK , 丢包重传等。这个设计就是传输层协议的关键与核心。
Pipelined Reliable Data Transfer Protocols
rdt3.0是一个功能上正确的协议,但是没人会为它的性能感到高兴,尤其是在如今这样的高速网络。rdt3.0最大的问题就是:stop-and-wait,它是一个停止-等待协议,这导致它的性能十分糟糕。
因此如何去实现一个流水线的可靠传输协议呢?这是本节的重要思想。因此设计出了:
  • Go-Back-N(GBN)协议,它相对于stop-and-wait已经有很大的改善了,提高了信道的利用率,但是缺陷仍然存在:单个的包错误会导致大量包的重传。
  • Selective Repeat(SR)协议 它只会重传丢失的包。
讲述了这两个设计模式之后,就引入了TCP连接,TCP是这个设计模式实现的典范。TCP连接不存在于一个TDM和FDM的电路交换网络,也不在虚电路上,只运行在两个end system之中。Cerf和Kahn出版了关于TCP/IP的论文,他们因此在2004被授予了ACM‘s Turing Award。TCP提供双工的服务,full-duplex service。
应用层的SSH协议和Telnet协议,下一层使用的就是TCP,但是Telnet在传输层使用了明文密码。
安全
由于TCP连接需要\'three-way-handshake\',SYN是建立所需要的,因此有SYN flood attack 防范的办法非常简单:就是SYN cookies。当传输层收到一个segment时,对它执行hash函数,得到一个特征值。接着下面的步骤进行,如果发现ACK无效,那么这可能就是一个有害的包。后面的每个包都会被执行Hash操作,比对。如果无效就被丢弃。
Principle of Congestion Control
拥塞控制的原则,广义上,拥塞控制需要从两处实现:
  • End-to-end congestions control
  • Network-assisted congestion control
    然后在下一节引入的TCP的拥塞控制:加法增加,乘法减少
总结
我们在这个章节开始处学习了传输层协议可以提供给网络应用的服务。从某个极端上讲,传输层可以非常简单的提供给应用层一个无修饰(no-frill)的服务。UDP就是无修饰的服务的典型例子。从另一个极端,传出层也可以给应用层提供一个带有大量保证的服务,诸如可靠传输,延迟保证,带宽保证,TCP就是这样的例子。否则,传输层只能依赖下一层的网络层为它提供这些保证。而网络层没有做这些,因此这些被传输层实现了。
ACK应答的方式保证了数据的可靠传输,timer限制了在规定时间应答,重转是保证的关键,seq方便了确定重传的segment。TCP远远比我们想象中的要复杂,大量的TCP补丁,修正,各种版本的TCP实现。尤其的TCP的拥塞控制已经演化了很多年,并且仍然在持续演化。传输层也出现了其他的协议:
  • DCCP 类UDP的,但是应用层可以选择是可靠的还是半可靠的。
  • SCTP 可靠的服务。允许应用层的\'Streams\'
  • TFRC TCP-Friendly Rate Congtrol protocol
只有时间才能检验这些传输层协议是否会在未来广泛部署!尽管这些协议是TCP和UDP的加强版,但是从这些年的表现而言,TCP和UDP表现的已经足够"good enough",人们是否会抛弃"better"而选择“good better",这取决于复杂的:技术、社会和商业考虑的混合。
Chapter 4 The Network Layer 网络层 问三个问题:
一. 你认为这本章的知识体系是什么?
  1. 阐述网络层的功能和提供的服务 4.1 - 4.2
  2. 如何转发?4.3-4.4
  3. 如何路由? 4.6-4.7
    这其中,对于第1点,应该明确的是网络层可以提供很多种可能的服务,甚至包括可靠的传输服务。但是对于英特网的网络层,它仅仅提供最大努力交付服务(best-effort service),至于可靠性,交给了传输层去保证。ATM提款机,它的网络层就是提供了可靠的传输服务。
二. 本章的重点内容是什么?
  1. 既然是网络层,本章最大的重要必然是IP数据报,Remember它的格式,Understand 它如何被转发的机制是本章的最大的重点
  2. 路由的协议相当有趣,我希望我能在学完本章后能手写出它的算法。
  3. 日常黑一下NAT协议,我很不喜欢这个协议,跨协议栈的垃圾协议,我这种Purist根本无法容忍它。
三. 学完本章,你觉得可以用这些知识做什么?(Apply)
似乎没有什么很好的有趣应用,以帮助自己巩固和理解。那就完成本章节的套接字编程实验吧。
4.1 引入
巩固一下:
传输层提供:prorcess-to-process communication
网路层提供: host-to-host communication
Forwarding and Rounting转发:当一个包从输入的链路到达,路由器必须把它移动到合适的输出链路,根据最大前缀匹配的原则。
路由:网络层必须通过packets去决定路由和路径,当它们从发送方传输到接收方。计算这些路径的算法就是路由算法。
我的理解:一个包从路由A达到路由B允许有多种可能的不同路径,如何选择一条路径,这就需要路由自身去实现一个算法,动态的维护链路状态信息。路由协议维护了转发表的正确性。简而言之,IP Datagram根据转发表进行转发,但是转发表怎么来的,路由协议得到的,
假设一个网络中所有的转发表都由管理员直接手动配置,在这种情况下,就不需要路由协议了。如果人类手动配置必然error-prone 和 对网络拓扑做出的反应略慢。
路由器是网路层(Layer 3)的设备,但它必须也要实现Layer 2 的协议。因为第三层的服务,需要第二层的实现(第3层)的功能。
4.2 Virtual Circuit and Datagram Networks
虚拟电路工作在网络层,由于网络层实现的是host-to-host服务,这种host-to-host,即可以是有连接的,又可以是无连接的。其中无连接的就是Datagram Network,有连接的就是虚拟电路, virtual-circuit (VC) networks.
In a VC network, the network\'s routers must maintain connection state information. 凡是有连接的,都必然有连接建立,传输和关闭的过程。
Datagram Networks 包的转发遵循最长前缀匹配规则,longest prefix matching rule.
Oringins of VC and Datagram NetworksVC的起源肯定是电话交换网络,早期的电话交换机,后来发展成虚拟电路交换。
What\'s inside a Router?需要实现的功能:forward function.
需要有的结构:
  • Input ports
  • Switch fabric
  • Output ports
  • Routing processor: 用于executes the routing protocols
转发的功能的别名,These forwarding functions are sometimes collectively referred to as the router forwarding plane,可以翻译成中文:路由转发面板,结合P321的Figure 4.6很好去理解。
路由转发的控制功能:
These router control plane functions are usually implemented in software and execute on the routing processor(typically a tradictional CPU)
Input Processing 输入处理The lookup performed in the input port is central to the router\'s operation--it is here that the router uses the forwarding table to look up the output port to which an arriving pakcet will be forwarded via the switching fabric.
查询操作运行在输入端口,这是路由器的核心操作。使用转发表去查询输出端口,通过交换结构进行转发。
Switching 交换的几种方式
  • Swiching via memory
  • Swiching via a bus
  • Swiching via an interconnection network
    关于内存交换的说明:
    The simplest, 最早期的路由就是传统的计算机。但是如果两个包的目的端口不同,由于内存读写的原因,会导致它们不能同时转发。In some ways, routers that switch via memory look very much like shared-momery multiprocessors, whth the processing on a line card switching (wirting) packets into the memory of the appropriate output port.I
Output Processing 输出处理Queueing发生输入和输出的链路都有。A consequence of output port queuing is that a packet scheduler at the output port must choose one packet among those quequed for transmission. 就是说输出端口的排队,设计到包的调度算法,常用的队列调度(FIFO), or a more sophisticated scheduling discipline such as weighted fair queuing(WFO) 权衡公平队列。这里有些相当细节的算法,包的队列管理算法。我没有有去想要精通这块的想法,因此也不必深入研究了。
天呐,我实在坚持不下去再更新了。写笔记太费时了!

    推荐阅读