直通式交换:
它在输入端口检测到一个数据包时,检查该包的包头,获取包的目的地址,启动内部的动态查找表转换成相应的输出端口,在输入与输出交叉处接通,把数据包直通到相应的端口,实现交换功能。
由于它只检查数据包的包头(通常只检查14个字节),不需要存储,所以切入方式具有延迟小,交换速度快的优点
它的缺点主要有三个方面:
一是因为数据包内容并没有被以太网交换机保存下来,所以无法检查所传送的数据包是否有误,不能提供错误检测能力;第二,由于没有缓存,不能将具有不同速率的输入/输出端口直接接通,而且容易丢包。
如果要连到高速网络上,如提供快速以太网(100BASE-T)、FDDI或ATM连接,就不能简单地将输入/输出端口“接通”,因为输入/输出端口间有速度上的差异,必须提供缓存;第三,当以太网交换机的端口增加时,交换矩阵变得越来越复杂,实现起来就越困难。
VLAN虚拟局域网
直接的局限:
1.超越了企业的组织结构
2.负载,有些地方负载大会影响整个网络LAN
3.广播流量,特别是当借口崩溃或配置错误的时候,会导致广播风暴。
使用:
网桥必须建立配置表,指明通过哪些端口可以访问哪些VLAN。
802.1Q帧格式
加了一对2字节的字段
第一个两字节
VLAN协议的ID大于1500为0x8100这样其他的以太网卡会把它认为是类型,而不是长度则不会转发给传统网卡。
第二个两字节
后12位为VLAN标识符,这样到达一个VLAN感知交换机,会利用其VLAN标识符作为索引。
(哪些端口输入那个vlan)
第五章网络层
虚电路与数据报网络的比较p278
泛洪算法:
总能选出最短路径,且延迟短
首先要产生大量重复的数据包,所以要给每个包上有一个计数器。
抑制包泛滥需要在接收到主机的数据包时填上一个序号,然后每个路由器为每个源路由器准备一张表,记录来自源路由器的序号。
如果入境路由器在这张表里面,就不需要泛洪了。
为防止无限膨胀,要比较要用个计数器K进行比较,比K小的就不要了。
距离矢量算法:
路由表有两项一个是记录到目标路由器的首选出境线路第二个是到达该目标路由器的距离估计值。
如果距离用时间度量则要发送一个特殊的ECHO数据包给邻居,邻居收到后盖上时间戳,然后尽快发过来。
记住时间要除以2
但是由于互相没联系,则可能出现无穷计数的问题。
链路状态路由算法(LSR):
每一个路由器必须完成以下几个事情:
1)发现他的邻居节点,并了解其网络地址
2)设置到每个邻居节点的而距离或者成本度量值。
3)构造一个包含所有刚刚获知的链路信息包。
4)将这个包发送给其他的路由器,并接受来自其他所有路由器的信息包。
5)计算出到每个其他路径的最短距离。
那个序号其实可以表示接受到的数据的新旧。
序号随每一个新数据包的发出而逐一递减。
为了防止序号破坏造成影响则用时间age。
特点(与矢量路由算法的比较):
收到一个链路状态数据包(LSP)后链路状态路由协议便立即将该LSP从除接收该LSP的接口以外的所有接口泛洪出去。
使用距离矢量路由协议的路由器需要处理每个路由更新,并且在更新完路由表后才能将更新从路由器接口泛洪出去,即使对触发更新也是如此。
因此链路状态路由协议可更快达到收敛状态。
在初始LSP泛洪之后,链路状态路由协议仅在拓扑发生改变时才发出LSP。
该LSP仅包含受影响链路的信息。
与某些距离矢量路由协议不同的是,链路状态路由协议不会定期发送更新。
层次路由:
为了防止路由太多而导致路由表太长,所以需要分层,这样就成为独立的区域。
但是不一定能够得到最短的路径。
包含N个路由器,最优秀的层数是lnN层。
每个路由器所需要的表项是elnN个。
三角路由(其实就是移动主机路由的路由过程)
电话公司及Internet几乎都是这么干的
步骤:
1.移动主机先把转移地址告诉家乡代理。
2.发送者发送的信息。
3.被家乡代理拦截。
然后将那个数据包用新的头封装,再发给转交地址。
这种机制交封装
4移动主机提取出真正的包然后直接应答发送者。
5.发送者借鉴转交地址通过隧道发送转交地址,绕过家乡位置。
拥塞控制的途径及其反应速度
网络供给>流量感知路由>准入控制>流量限制>负载脱落
流量调节
抑制包,告诉源主机减少给制定目标的流量
显示拥塞通知(ECNexplicitcongestionnotification)
就是如果自己拥塞了就在他发送的数据包上打上标志(设置包头上的一个标志位)但是直到到了主机才通知拥塞。
逐跳后压:
让抑制包在沿途的每一跳都发挥作用。
上游要有更多的缓存空间。
负载脱落(loadshedding)中的wine和milk
就是先扔掉什么的问题最好程序标记一下那些重要。
随机早期检测(RED)
在局面变得毫无希望之前让路由器提前丢包,这里就是讲怎么确定这个时间点。
一般是当平均队列超过某个阀值时。
丢掉的包起到了抑制包的作用,而不是ECN那样有个拥塞信号。
服务质量
漏洞和令牌桶
主要讲令牌桶
书上的那个图是说明令牌桶有流量整形的作用。
仔细看令牌的初始容量B就可以看出图的区别。
注意下面的曲线代表有令牌存起来了。
B+RS=MSS:
突发的长度/时间M最大速度的突发长度。
加权公平队列
分为两部分公平队列+加权。
公平队列只是假想着“字节接字节发送”不能抢占正在传输的数据包,因为数据包传送是个整体的行为。
Fi=max(Ai,Fi-1)+Li/W
Fi:
第i个包的发送结束时间Ai为开始时间LI为长度W为所在队列的权值。
数据包分段:
透明、非透明(P333)
解决大数据包过最大数据包太小的网络。
法1设法使这种事情不会发生最大路径单元MTU(PathMaximumTransmissionUnit)不发送这么大的。
法2拆分数据包。
透明分段:
是指入口路由器分段出口路由器组合问题:
不知什么时候接受了全部的段。
必须在同一个出口路由器进行性重组。
非透明分段:
重组只在目标主机上进行。
IP则使用这种思想,头分为三个部分数据包编号(同一个数据包则一模一样)
偏移位置:
就是指这个包的开头与原来的开头的距离(相减)比如一开始是0
是否为结束:
则不是1则是一开始为1
路径MTU发现
就是打算重新使用上面的第一种方法
IP有个标志位告诉是否允许分段。
如果不允许则路由器就丢弃这个包,并把错误信息报告给源端,这样源端就会知道要发送多长的数据包了。
(一个一个地尝试直到符合)
Internet的网络层
IPv4地址分类:
从A-D网络位开头每个多1且最后为0,且总体上是由那划分的三段来划分的而E只不过是把D的剩余部分要了。
小心D是个组播地址
子网划分:
将内部一个网络块分成几个部分供多个内部网络使用,但对外部世界仍然像等那个网络一样。
方法:
数据包到达时,把数据包的目标地址与每个子网的掩码进行AND操作,看结果是否对应某个前缀。
而且可以随意改变内部的子网掩码。
第六章传输层
总括:
网络层+传输层为网络协议层次的核心。
扩展到两个计算机进程之间的端到端联系。
且其可靠性独立于当前的网络。
其之间可以理解为用段来传输。
虽然和网络层很像但是用户没有对其的控制权。
当然此中需要调用库程序实现。
AIMD(AdditiveIncreaseMultiplicativeDecrease)解决拥塞控制的
TCP/IP模型中,属于传输层,为了解决拥塞控制的一个方法,即:
加性增,乘性减,或者叫做“和式增加,积式减少”。
当TCP发送方感受到端到端路径无拥塞时就线性的增加其发送速度,当察觉到路径拥塞时就乘性减小其发送速度。
TCP拥塞控制协议的线性增长阶段被称为避免拥塞。
当TCP发送端收到ACK,并且没有检测到丢包事件时,拥塞窗口加1;当TCP发送端检测到丢包事件后,拥塞窗口除以2。
UDP(Userdatagramprotocol):
用户数据报协议
八个字节的头
UDP校验和包括了IPV4伪头。
RPC(remoteprocedurecall远程过程调用)
其实就像调用函数一样,通过一个存根,客户过程按照普通过程调用的方式来调用客户存根。
RTP(real-timetransportprotocol)实时传输协议。
专门对多媒体制定的通用的协议。
RTCP:
实时传输控制协议:
不传输任何媒体样值,能处理反馈,同步和用户接口的信息
(上面几乎是建立在UDP之间的)
TCP:
传输控制协议为了建立在不可靠的互联网上提出的。
支持TCP的机器都有TCP传输实体(可以是一个库过程,一个用户进程或内核的一部分)管理TCP流,和IP层之间的接口。
其接受本地的数据流并分割成64kB(去掉IP及TCP的头不超过1460数据字节。
)
TCP服务由发送端和接收端创建一种套接字的端点来获得。
TCP有个push标志,标记后立即发送不缓存。
****TCP在内的每个段要适合IP的有效载荷(65535KB),然而还要适合MTU(最大传输单元),这是由以太网限制的通常是1500KB。
TCP段的头格式:
65536KB-20KB固定的头也是20KB(一行4B)
确认号是期望的下一个序列。
ACK为1表明确认号字段有效。
,为0则不包含确认信息
ECE:
给发送端发送一个ECN-echo信号让其放慢速率
CWR:
发送端发送这个信号就表明知道了,这样接收端就不用发ECE了
URG:
紧急指针,发送端用最少的方式发送数据。
PSH:
立即发送
RST:
重置混乱连接,收到就表明你的主机有问题了。
SYN=1ACK=0连接请求
SYN=1ACK=1连接确认
FIN释放一个连接。
选项里面的
时间戳->
SACK:
选择确认,之后,发送端可以明显地感知到接收端已经有什么数据。
TCP计时器(三种分别是重传持续保活计时器)
重传计时器RTO(RetransmissionTimeOut)最重要。
发送数据时,启动一个计数器,如何停止之前没有收到确认则重传。
至于时间用一个动态算法。
如下:
TCP维护一个变量SRTT:
SmoothRound-Trip-Time平滑往返时间。
SRTT=aSRTT+(1-a)R典型a=7/8R为某次的时间
这样就得到了最佳计时器的时间。
但是对于重传超时仍然不好。
往返时间变化RTTVAR=pRTTVAR+(1-p)|SRTT-R|p=3/4
(RTTVAR并不确切地等于标准方差)
重传超时值RTO=SRTT+4*RTTVAR(4几乎可以认为是随意选的,但也有道理)
持续计时器:
接收端告诉发送端满了不要传了(告诉其窗口大小为0),那么双方就等待,但是发送方等不及了(持续计数器到了)就去询问,然后接收端告诉结果。
这样发送端就决定是重置计数器还是开始传。
保活计数器:
有的实现了,也就是长时间连接空闲,则询问,没反应就停止。
还有一个计时器是用于连接停止的时候用的。
TCP拥塞控制关键功能
拥塞窗口
把丢包当做信号。
窗口的大小为发送端可以往网络发送的字节数,响应速率则为窗口大小除以连接往返的大小。
也是根据AIMD来调整窗口的大小。
慢速启动:
为了防止其增长过快,有个慢速启动阀值。
发生超时后,就将阀值设置为拥塞窗口的一半。
TCPTahoe慢速启动过程
改进基本达到了AIMD
重复确认:
丢包后,估计接收端会把后面的序号改成一样的,这样接收端就明白了(自己的理解)
SACK(SelectiveACKnowledgement选择确认):
从一个重复流中推断出已经到达饱和和已经丢失的数据包。
起因:
TCP重传时会把原先已经正确传送的包夜重复传送。
工作过程:
1.建立连接的时候就要发送允许SACK,这样才能启