Computer Neworking: A Top-Down Approach

[TOC]html

这本书是计算机网络最好的入门书籍,与传统的计算机网络书籍不一样,它采用了自顶而下的方式去讲解。感谢两位十分出色的做者: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. 简而言之,设备互联。bash

诸如笔记本,智能手机,游戏控制台,摄像头,环境传感器等,这些非传统的设备就像被计算机网络钩住(hooked up)了同样。在因特网的术语(jargon)中,这些设备被称为 hosts(主机) 或 end systems(终端)。终端访问因特网经过Internet Service Providers(ISPs), 还有本地的ISPs,例如中国电信。服务器

packets = header bytes + data bytes 因此为何网路字节序是大端序? 由于要先传输字节头。cookie

1.2 A Service Description

the Internet as an infrastructure that provides service to applications.网络

协议的定义:多线程

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 端到端的延迟

d<sub>end-end</sub> = N(d<sub>proc</sub> + d<sub>trans</sub> + d<sub>prop</sub>) 其中d<sub>trans</sub> = 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

  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 Network Layer 网络层 1.

相关文章
相关标签/搜索