标签:hand protoc splitter browser header 带宽 secure 研究 src
这本书是计算机网络最好的入门书籍,与传统的计算机网络书籍不同,它采用了自顶而下的方式去讲解。感谢两位十分出色的作者:Jim Kurose和Keith Ross, 他们生动的叙述方式使我觉得计算机网络如此有趣。单单引用文献就有33页,我十分佩服这么严谨又有耐心的人。
Keep those cards and letters coming! --谚语
计算机网络的概览,描绘了这本书蓝图。borad picture,to see the forest through the trees. 这是一个引入性章节,覆盖了大量的基础知识和计算机网络的很多方便,但是也没有失去重点。introductory chapter,without losing sight of the big picture.
定义:
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
所以为什么网路字节序是大端序? 因为要先传输字节头。
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.
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,
一个基础路由器+ 以太网交换机,所有设备都直连到以太网交换机上。
具体的每种介质不需要深究,要始终记住:每种介质限定了它自身的网络传输承载能力,传输速度和传输距离。
有两种基本的方式通过网络链路和交换机去移动数据:包转发和电路交换。
采用面向连接的方式,在双方通信之前,需要为通信双方分配一条具有固定带宽的通信电路,在通信双发在通信的过程中一直占用所分配的资源,直到通信结束。
电路交换的网络中,资源需要一个占用一个路径,包括路径上的buffer,link 传输比率,在两个终端之间需要保留会话的持续时间。传统的电话网络就是基于电路交换的网络。不要想当然的以为网络就只是英特网,电话网络也是一种网络。
优点:可以为用户保证会话的稳定性,实时性强,时延小,交换设备成本低。
缺点:带宽利用率低,一旦电路连接建立,不管通信与否都将占用通信。
一个链路中电路交换的实现有两种方式:
FDM 频分复用和 TDM 时分复用
发送时延是从节点到传输介质的延迟,发送时延=数据/带宽。和设备的船宿速度有关。
传输时延和包的大小没关系,取决于距离和传输速率。传播时延=发送距离/传播速率 因为在某种介质中传输的速率固定的。
dend-end = N(dproc + dtrans + dprop)
其中dtrans = L/R = packet size/Rates
本章主要是讲应用层协议,懒得写了,费事,妨碍看书的速度。挑自己认为重要的写写。
操作系统中,应用程序的本质是进程,不同的进程之前免不了要进行交流。本质上,英特网客户端和服务器的交流通过进程实现。这里我门只关注网络上运行在不同的两个主机之间的进程交流。
一个类比:
有个房子,房子有个门。我们访问这个房子,总是通过门去访问。
Process
就像是房子,Socket
就像是门。
Socket
描述了应用层和传输层之间的接口,它是由网络应用创建的。当来自传输层的数据报交付给上层的应用层时,它总想交给特定的应用,因此就有了Socket
。应用层开发这只关心应用层这边的Socket
,而不关心传输层那边的。最多只是选择传输层的协议,或者设置一些传输层参数,比如最大的Buffer和报文段的大小。
更精妙的比喻:
传输层最出名的两个协议就是TCP和UDP,但是它们两都是不加密的。如果应用程序发送了一个明文密码,而这个包被别人捕获到了,那么就可能就存在安全问题了。
所以就想办法加强一下TCP协议,就有了Secure Sockerts Layrer(SSL), SSL不是第三个传输层协议,处于TCP和UDP的同层次,而是TCO和UDP协议的加强,负责加密,数据整合,端点认证。
这种加强由应用层实现,特别的,如果一个应用程序想要使用SSL服务,那么它需要包含SSL的代码(高度优化的类和库)。SSL有自己的socket API
,假设应用层使用了明文密码,那么SSL会对它进行加密,接受房的SSL对它进行解密。
使用WireShark 研究HTTP协议
Web Caching = Proxy server
simple databash in a P2P network,key -- value.
写了一个UDP的简单C/S应用,放在了博客园。
http://www.cnblogs.com/crb912/p/9060670.html
++书中一个很重要的地方(p163),就是UDP和TCP的套接字编程时,有所不同++:
就是UDP是无连接的,每次读写socket时,都需要加入主机的地址,接受数据也得到是两个参数(data, addr)。而TCP的socket则不需要这么做,因为它是面向连接的,在读写基于这个连接的socket时,只需要直接的读写数据。而不需要关注去加入和接受这个目标主机地址。因为TCP的协议已经帮你建立好专用的连接了。
HTTP request
HTTP response
消息,包含这个请求的文件404 Not Found
这个作业我没有自己动手,https://blog.csdn.net/hmunan/article/details/73826062 这篇文章很好的帮助了我。感觉如果我自己去写,我可能写不出来,因为我没理解HTTP应答,甚至没想到把html
文件写入这个TCP连接中。
实验内容:基于UDP实验一个Ping工具.
题目的链接:https://wenku.baidu.com/view/ed19e6cce2bd960591c677d2.html
我写的答案放在博客园上: https://www.cnblogs.com/crb912/p/9082379.html
这个实验没什么兴趣,就跳过吧
这个实验要求实现一个Web Proxy
(网页代理),一个浏览器
向代理请求网页, 然后Web Proxy
向origin server
请求网页,请求的结果返回给Web Proxy
,最终返回给浏览器。
难点在于:数据的流动和多线程 https://www.cs.rochester.edu/~kshen/csc257-fall2009/assignments/assignment1.html
定义:
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传递给下面的网络层,这个过程称为复用。
关于实现:
传输层要想实现分用,就必须有两个条件成立:
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。
这个小节十分重要,讲述了如何去建立一个可靠的数据传输协议。这是一个逻辑上的设计,作者严谨的考虑了三种情况。
在第三种方案中,已经考虑差错校验,Timer, Sequence number,ACK , 丢包重传等。这个设计就是传输层协议的关键与核心。
rdt3.0是一个功能上正确的协议,但是没人会为它的性能感到高兴,尤其是在如今这样的高速网络。rdt3.0最大的问题就是:stop-and-wait,它是一个停止-等待协议,这导致它的性能十分糟糕。
因此如何去实现一个流水线的可靠传输协议呢?这是本节的重要思想。因此设计出了:
讲述了这两个设计模式之后,就引入了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操作,比对。如果无效就被丢弃。
拥塞控制的原则,广义上,拥塞控制需要从两处实现:
我们在这个章节开始处学习了传输层协议可以提供给网络应用的服务。从某个极端上讲,传输层可以非常简单的提供给应用层一个无修饰(no-frill)的服务。UDP就是无修饰的服务的典型例子。从另一个极端,传出层也可以给应用层提供一个带有大量保证的服务,诸如可靠传输,延迟保证,带宽保证,TCP就是这样的例子。否则,传输层只能依赖下一层的网络层为它提供这些保证。而网络层没有做这些,因此这些被传输层实现了。
ACK应答的方式保证了数据的可靠传输,timer限制了在规定时间应答,重转是保证的关键,seq方便了确定重传的segment。TCP远远比我们想象中的要复杂,大量的TCP补丁,修正,各种版本的TCP实现。尤其的TCP的拥塞控制已经演化了很多年,并且仍然在持续演化。传输层也出现了其他的协议:
只有时间才能检验这些传输层协议是否会在未来广泛部署!尽管这些协议是TCP和UDP的加强版,但是从这些年的表现而言,TCP和UDP表现的已经足够"good enough",人们是否会抛弃"better"而选择“good better",这取决于复杂的:技术、社会和商业考虑的混合。
一. 你认为这本章的知识体系是什么?
二. 本章的重点内容是什么?
三. 学完本章,你觉得可以用这些知识做什么?(Apply)
似乎没有什么很好的有趣应用,以帮助自己巩固和理解。那就完成本章节的套接字编程实验吧。
巩固一下:
传输层提供:prorcess-to-process communication
网路层提供: host-to-host communication
转发:当一个包从输入的链路到达,路由器必须把它移动到合适的输出链路,根据最大前缀匹配的原则。
路由:网络层必须通过packets去决定路由和路径,当它们从发送方传输到接收方。计算这些路径的算法就是路由算法。
我的理解:一个包从路由A达到路由B允许有多种可能的不同路径,如何选择一条路径,这就需要路由自身去实现一个算法,动态的维护链路状态信息。路由协议维护了转发表的正确性。简而言之,IP Datagram根据转发表进行转发,但是转发表怎么来的,路由协议得到的,
假设一个网络中所有的转发表都由管理员直接手动配置,在这种情况下,就不需要路由协议了。如果人类手动配置必然error-prone 和 对网络拓扑做出的反应略慢。
路由器是网路层(Layer 3)的设备,但它必须也要实现Layer 2 的协议。因为第三层的服务,需要第二层的实现(第3层)的功能。
虚拟电路工作在网络层,由于网络层实现的是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.
VC的起源肯定是电话交换网络,早期的电话交换机,后来发展成虚拟电路交换。
需要实现的功能:forward function.
需要有的结构:
转发的功能的别名,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)
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.
查询操作运行在输入端口,这是路由器的核心操作。使用转发表去查询输出端口,通过交换结构进行转发。
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) 权衡公平队列。这里有些相当细节的算法,包的队列管理算法。我没有有去想要精通这块的想法,因此也不必深入研究了。
Computer Networking: A Top Down Approach
标签:hand protoc splitter browser header 带宽 secure 研究 src
原文地址:https://www.cnblogs.com/crb912/p/9230918.html