Computer Neworking: A Top-Down Approach
目录
这本书是计算机网络最好的入门书籍,与传统的计算机网络书籍不同,它采用了自顶而下的方式去讲解。感谢两位十分出色的作者: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 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 端到端的延迟
dend-end = N(dproc + dtrans + dprop)
其中dtrans = L/R = packet size/Rates
Chapter 2 : Application Layer 应用层
本章主要是讲应用层协议,懒得写了,费事,妨碍看书的速度。挑自己认为重要的写写。
1.进程间交流(p88)
操作系统中,应用程序的本质是进程,不同的进程之前免不了要进行交流。本质上,英特网客户端和服务器的交流通过进程实现。这里我门只关注网络上运行在不同的两个主机之间的进程交流。
一个类比:
有个房子,房子有个门。我们访问这个房子,总是通过门去访问。
Process
就像是房子,Socket
就像是门。
Socket
描述了应用层和传输层之间的接口,它是由网络应用创建的。当来自传输层的数据报交付给上层的应用层时,它总想交给特定的应用,因此就有了Socket
。应用层开发这只关心应用层这边的Socket
,而不关心传输层那边的。最多只是选择传输层的协议,或者设置一些传输层参数,比如最大的Buffer和报文段的大小。
更精妙的比喻:
- 想着这里有个大水坝,一边是传输层,一边是应用层。水坝上有很多孔洞,用于放水。每个应用会独占一个孔洞,用于发送和等待接受水,而另一边是传输层。
- 又像是古代的皇帝在翻牌子。
如何识别收发的进程:
- 主机的地址 --> IP地址
- 收发进程的识别符号 --> 端口号
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
- can substantially reduce the response time
- 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
- 接受的客户端的连接
- 接受这次连接的
HTTP request
- 解析这个请求的文件
- 从服务器的文件系统中获取这个文件
- 创建一个
HTTP response
消息,包含这个请求的文件 - 发送这个响应文件,如果服务器的文件系统中不存这个文件,则返回
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 Proxy
向origin 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传递给下面的网络层,这个过程称为复用。
关于实现:
传输层要想实现分用,就必须有两个条件成立:
- the sockets must have unique identifiers. 标识符唯一
- 每个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 网络层
Computer Neworking: A Top-Down Approach的更多相关文章
- Computer Networking: A Top Down Approach
目录 Chapter 1: Computer Networks and the Internet 1. What is the Internet? 2. The Network Edge 3. The ...
- OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)
实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...
- Computer Science: the Big Picture
1.课程PPTMIT OpenCourseWarehttp://ocw.mit.edu/courses/; Courses Stanfordhttp://cs.stanford.edu/course ...
- the Linux Kernel: Traffic Control, Shaping and QoS
−Table of Contents Journey to the Center of the Linux Kernel: Traffic Control, Shaping and QoS 1 Int ...
- Speeding Up The Traveling Salesman Using Dynamic Programming
Copied From:https://medium.com/basecs/speeding-up-the-traveling-salesman-using-dynamic-programming-b ...
- Machine Learning and Data Mining(机器学习与数据挖掘)
Problems[show] Classification Clustering Regression Anomaly detection Association rules Reinforcemen ...
- 深度学习:又一次推动AI梦想(Marr理论、语义鸿沟、视觉神经网络、神经形态学)
几乎每一次神经网络的再流行,都会出现:推进人工智能的梦想之说. 前言: Marr视觉分层理论 Marr视觉分层理论(百度百科):理论框架主要由视觉所建立.保持.并予以解释的三级表象结构组成,这就是: ...
- [Z] 计算机类会议期刊根据引用数排名
一位cornell的教授做的计算机类期刊会议依据Microsoft Research引用数的排名 link:http://www.cs.cornell.edu/andru/csconf.html Th ...
- C 和 C++的 不同
转自: http://studytipsandtricks.blogspot.com/2012/05/15-most-important-differences-between-c.html Basi ...
随机推荐
- jackson springboot配置时间格式
yml文件中这样进行配置 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss spring.jackson.date-format指定日期格式,比如yy ...
- Kdevelop的安装-2种方法
使用 Ubuntu 的自带的源: sudo apt-get update sudo apt-get install kdevelop 这就可以了.update这部,假如不换源,更新非常慢.换源方法很简 ...
- The Best Blockchain Open Source Projects
https://101blockchains.com/blockchain-open-source/ Blockchain has been the buzzword of the year for ...
- 8259A的初始化(多片)
1.主从式8259A的初始化设置: 初始化设置如下: (1)中断触发方式:边沿触发 (2)中断屏蔽方式:常规屏蔽方式,即使用OCW1向IMR写屏码 (3)中断优先级排队方式:固定优先级的完全嵌套方式 ...
- Layui 模板引擎中的 日期格式化
原文:https://www.jianshu.com/p/948a474b5ed7 原文:https://blog.csdn.net/DCFANS/article/details/92064112 模 ...
- OpenResty: 介绍 (摘抄)
原文链接:https://www.cnblogs.com/duanxz/p/10396160.html Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM ...
- [PHP] windows下tee指令
在win下使用tee指令 tee为Linux指令,tee把日志输出到log的同时输出到屏幕. 在 http://sourceforge.net/projects/unxutils/?source=dl ...
- [RN] React Native 自定义 底部 弹出 选择框 实现
React Native 自定义 底部选择框 实现 效果如图所示: 实现方法: 一.组件封装 CustomAlertDialog.js import React, {Component} from ' ...
- Redis有哪些数据结构
String 这应该是应用最广泛的了,简单的 key-value 类型.value 不仅可以是 String,也可以是数字.还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模 ...
- 【牛客练习赛53】A-超越学姐爱字符串
// 题目地址:https://ac.nowcoder.com/acm/contest/1114/A /* 找规律(碰运气) n:1 = 2 n:2 = 3 n:3 = 5 n:4 = 8 ... d ...