当前位置:  建站>运营/SEO
本页文章导读:
    ▪《数据通信与网络》笔记--数据链路层的差错控制协议      下面介绍三个用于差错控制的协议。 1.停止等待自动重复请求协议(Stop-and-Wait ARQ) 下图就是停止等待自动重复请求的工作过程: 图中,Sn指向将要被发送的帧的编号,Rn指向期待下一次收.........
    ▪u-boot中memory(SDRAM/DDR)相关命令 -- mw       [u-boot: v2013.07-rc2] [Author: Bo Shen <voice.shen@gmail.com>] 1. 使能mw命令 通过定义:CONFIG_CMD_MEMORY, 就可以使能mw命令。 注:由于在<include/config_cmd_default.h>里面已经有此定义,在板子相关.........
    ▪u-boot中memory(SDRAM/DDR)相关命令 -- md       [u-boot: v2013.07-rc2] [Author: Bo Shen <voice.shen@gmail.com>] 1. 使能md命令 通过定义:CONFIG_CMD_MEMORY, 就可以使能md命令。 注:由于在<include/config_cmd_default.h>里面已经有此定义,在板子相.........

[1]《数据通信与网络》笔记--数据链路层的差错控制协议
    来源: 互联网  发布时间: 2013-10-31

下面介绍三个用于差错控制的协议。

1.停止等待自动重复请求协议(Stop-and-Wait ARQ)
下图就是停止等待自动重复请求的工作过程:

图中,Sn指向将要被发送的帧的编号,Rn指向期待下一次收到的帧的编号。
其中帧的编号是可以循环使用的,由编号字段的位长决定,如果编号字段为2位,则编号范围为0~3(0~2*2-1),上图中编号范围为0~1,所以编号字段为1(0~2-1)
处理的步骤如下:
1.发送方发送编号0的帧并启动定时器,接收方接收到后,期待下一次收到的帧的编号为1,并发送ACK1给发送方
2.发送方在定时器规定的时间内接收到ACK1,定时器停止,Sn指向1,即下一次发送编号为1的帧。
3.发送方发送编号1的帧并启动定时器,但是在传输途中丢失。
4.发送方侧定时器超时,再次发送编号为1的帧并启动定时器,接收方接收到后,期待下一次收到的帧的编号为0,并发送ACK0给发送方
5.发送方在定时器规定的时间内接收到ACK0,定时器停止,Sn指向0,即下一次发送编号为0的帧。
6.发送方发送编号0的帧并启动定时器,接收方接收到后,期待下一次收到的帧的编号为1,并发送ACK1给发送方
7.发送方在定时器规定时间内没有接收到ACK1,所以重新发送Sn指向的帧(编号为0),但是接收方期待的是编号为1的帧,编号为0的帧已经确认收到,所以丢弃编号为0的帧,然后发送ACK1给接收方。

以上就是停止等待自动重复请求协议的工作过程,但是,这个协议的效率十分低效,如果是我,绝对不会用。。。

2.回退N帧自动重发请求协议(Go-Back Automatic Repeat Request )
在这个协议中,涉及到滑动窗口概念,滑动窗口时一个抽象的概念,用来定义发送方和接收方关心的序列范围,发送方关心的序列范围是发送滑动窗口,接收方关心的序列式接收滑动窗口。
在回退N帧自动重发请求协议中,发送滑动窗口的大小必须小于2^m(m是窗口的位长,原因等会再解释),接收滑动窗口大小为1,下面说明下协议,下图中,灰色部分为窗口的范围,编号的位段为2,所以发送窗口大小为2^2-1=3,接收滑动窗口大小为1。Sf为第一个要被确认的帧,Sn为接下来要被发送的帧。Rn为期待要被接收到的帧。
1.发送方第一个被发送的帧是0,第一个要被确认的帧是0.
2.发送方发送了帧0,下一个要被发送的帧变成1,接收方接收到帧0,下一个期待被接收的帧变成1,然后发送ACK1
3.发送方接收到ACK1,下一个要被确认的帧变成1
4.发送方发送帧1,下一个要被发送的帧变成2,接收方接收到帧1,下一个期待被接收到的帧变成2,然后发送ACK2,但是ACK2在传输途中丢失
5.发送方发送帧2,下一个要被发送的帧变成3,接收方接收到帧2,下一个期待被接收到的帧变成3,然后发送ACK3.
6.发送方发送帧3,下一个要被发送的帧变成4,接收方接收到帧3,下一个期待被接收到的帧变成4,然后发送ACK4.
7.发送方接收到ACK3,下一个要被确认的帧变成3,这边可能大家会有疑问,为什么发送方没有接收到ACK2,就能保证接收方已经接收到帧1了呢,大家想一想,如果接收方没有接收到帧2,Rn的值一直都是1,所以发送方接收到ACK3,表示帧2肯定已经被接收到了。
8.发送方接收到了ACK4,下一个要被确认的帧变成4

在这个协议中,我们只是用一个定时器,即当Sf == Sn的是用启动定时器,当定时器到时间时,如果Sn不等于Sf,那么就重发Sf到Sn之间的所有帧。


为什么窗口大小一定要小于2^m,请看下图:
1.发送方发送编号为0的帧,第一个要被确认的帧为0,接下来要被发送的帧为1,接收方期待接收的帧为0,但是发送的ACK丢失。
2.发送方没有接收到ACK,所以Sf依然为1,接下来继续发送编号为1的帧,Sn变为2,接收方期待接收的帧为1,但是发送的ACK丢失。
3.发送方没有接收到ACK,所以Sf依然为1,接下来继续发送编号为2的帧,Sn变为3,接收方期待接收的帧为2,但是发送的ACK丢失。
4.发送方没有接收到ACK,所以Sf依然为1,接下来继续发送编号为3的帧,Sn变为4,接收方期待接收的帧为3,但是发送的ACK丢失。
5.发送方始终都没有接收到编号为1的帧的ACK,此时定时器超时,发送方要依次发送Sf到Sn之间的所有帧,于是发送了编号为0的帧,此时接收方期待的帧编号也是1,于是本来接收方应该拒绝该帧,但是却被当接收了,导致了错误。

所以结论是:发送滑动窗口的大小必须小于2^m

回退N帧自动重发请求协议比停止等待自动重复请求协议有了一定的进步,但是定时器到时间是重发所有没有确认的帧还是降低了链路的使用率。

选择性自动重发请求协议(Selective Repeat ARQ)
选择性自动重发请求协议应该是对回退N帧自动重发请求协议的一个改进,在退N帧自动重发请求协议中接收滑动窗口的大小是1,但是在选择性自动重发请求协议中,接收滑动窗口的大小不是1,发送和接收窗口的大小最多是2^m/2(m是窗口为位长,原因等会再解释),下图说明了该协议的工作原理:
1.发送方第一个被发送的帧是0,第一个要被确认的帧是0.
2.发送方发送帧0,启动定时器,下一次发送的帧变成1,接收方接收到后,窗口向后滑动一个帧,下一个期待帧是1,并发送ACK1.
3.发送方接收到ACK1后,解除定时器,接下来第一个要被确认的帧加1,变成1。
4.发送方发送帧1,下一次发送的帧变成2,但是帧1在发送过程中丢失。
5.发送方发送帧2,下一次发送的帧变成3,并启动定时器,接收方接收到了帧2,因为帧2在接收窗口中,所以成功接收,但是此时Rn还是指向1,所以发送了NAK1
6.发送方发送帧3,下一次发送的帧变成4,并启动定时器,接收方接收到了帧3,因为帧2在接收窗口中,所以成功接收,但是此时Rn还是指向1,此时NAK1已经发送过了,所以没有再发送NAK1.
7.发送方接收到了NAK1,重新发送帧1,接收方接收到了帧1,此时接收方的窗口中的帧已经全部接收到,滑动窗口,并发送ACK4.
8.发送方接收到了NAK4,说明接收方的帧都已经接收完毕,窗口进行滑动,解除所有定时器

下面解释下为什么发送和接收
    
[2]u-boot中memory(SDRAM/DDR)相关命令 -- mw
    来源: 互联网  发布时间: 2013-10-31

[u-boot: v2013.07-rc2]

[Author: Bo Shen <voice.shen@gmail.com>]


1. 使能mw命令

通过定义:CONFIG_CMD_MEMORY, 就可以使能mw命令。

注:由于在<include/config_cmd_default.h>里面已经有此定义,在板子相关的configure文件中(位于<include/configs/>),默认情况下,都会include此文件。所以,u-boot默认会包含此命令。

源代码:<common/cmd_mem.c>

2. Usage

mw - memory write (fill)

注:mw修改的是由mw命令的参数加上base_address内容

例:

2.1 修改length为1的memory内容

U-Boot> base
Base Address: 0x20000000
U-Boot> md 0 0x1
20000000: 00000001
U-Boot> mw 0 0xf5
U-Boot> md 0 0x1 
20000000: 000000f5

3. 源代码分析

do_mem_mm

|--> mod_mem

|--> 


作者:voice_shen 发表于2013-6-30 17:29:19 原文链接
阅读:32 评论:0 查看评论

    
[3]u-boot中memory(SDRAM/DDR)相关命令 -- md
    来源: 互联网  发布时间: 2013-10-31

[u-boot: v2013.07-rc2]

[Author: Bo Shen <voice.shen@gmail.com>]


1. 使能md命令

通过定义:CONFIG_CMD_MEMORY, 就可以使能md命令。

注:由于在<include/config_cmd_default.h>里面已经有此定义,在板子相关的configure文件中(位于<include/configs/>),默认情况下,都会include此文件。所以,u-boot默认会包含此命令。

源代码:<common/cmd_mem.c>

2. Usage

md - memory display

注:md显示的是由md命令的参数加上base_address内容。具体参见源码

例:

2.1 显示length为1的memory内容

U-Boot> base
Base Address: 0x00000000
U-Boot> md 0x20000000 0x1
20000000: 00000000 

U-Boot> base 0x20000000
Base Address: 0x20000000
U-Boot> md 0 0x1
20000000: 00000000

注:两次执行命令的参数不一样,但显示的结果却一样。这是因为:base_address不一样。

2.2 md更多格式的显示

U-Boot> md.b 0 0x1
20000000: 00                                                 .
U-Boot> md.w 0 0x1
20000000: 0000                                       ..
U-Boot> md.l 0 0x1
20000000: 00000000

3. 源代码分析

#define DISP_LINE_LEN 16

do_mem_md

|--> ulong bytes = size * length

|--> const void *buf = map_system(addr, bytes);

|--> print_buffer(addr, buf, size, length, DISP_LINE_LEN / size);

|--> addr += bytes;

|--> unmap_sysmem(buf);

作者:voice_shen 发表于2013-6-30 17:19:48 原文链接
阅读:15 评论:0 查看评论

    
最新技术文章:
▪SQVI和SAP查询QUERY的区别和使用注意事项    ▪彻底理解Cisco/Linux/Windows的IP路由    ▪Exchange 2010 处于禁止发送用户自动收到来自IT...
▪MB_CHANGE_DOCUMENT使用方法    ▪ALV的html表头    ▪【译】如何精确判断最终用户响应时间过长的...
▪apache2.4.4启用deflate压缩    ▪使用vmware 配置centos 6.0+ 网络出现的各种问题...    ▪十句话教你学会Linux数据流重定向
▪centos6.x已经安装的系统添加图形界面    ▪Linux查看CPU和内存使用情况    ▪win7问题解决,凭据管理器和无法访问,不允...
▪Dynamics CRM 2013 初体验(4):不再被支持的功...    ▪win7下制作ubuntu系统安装启动盘和U盘安装ubuntu...    ▪Linux cp -a用法
HTML教程 iis7站长之家
▪Citrix 服务器虚拟化之二十七 XenApp6.5发布服务...    ▪搭建本地Ubuntu 镜像服务器    ▪Create local metadata resource of yum
▪tsm ANS0326E问题处理    ▪Windows SVN变化邮件通知(Python2.7实现)    ▪linux下的内核测试工具——perf使用简介
▪Nginx TCP Proxy模块的编译安装    ▪OSX: SSH密钥使用日记(2)    ▪OSX: SSH密钥使用日记(1)
▪Manually start and stop Oracle XE in Ubuntu    ▪Disable autostart of Oracle-xe in Ubuntu    ▪tar命令-linux
▪xtrabackup-2.1.2-611安装    ▪无废话ubuntu 13.4文件共享配置    ▪Unix文本处理工具之sed
▪hpux 操作系统 磁带备份与恢复    ▪HP DL360 G7通过iLO部署系统    ▪Redhat 6.0中VNC Server的配置方法
▪hpux 操作系统磁带备份与恢复    ▪用C++编程调用libvirt的API来创建KVM虚拟机    ▪hpux- hp小型机日常硬件故障处理case(一)
▪web集群时session同步的几种方法(统计)    ▪inux常用命令大全    ▪BAT 批处理实现循环备份N天文件夹
▪BIND9私有DNS服务器小环境搭建实验    ▪Exchange2013增量备份    ▪OSSEC Monitor your App log file
▪《深入理解Nginx》阅读与实践(三):使用upstre...    ▪如何给Fedora 15创建磁盘分区    ▪Packet Sniffer Code in C using sockets
▪Error, some other host already uses address    ▪修改uCOS_II以实现“优先级+时间片”联合调度    ▪weblogic开发模式与生产模式介绍
▪Wireshark 高级特性    ▪ubuntu13.04版本下安装RabbitVCS,类似windows的Tortoi...    ▪Apache 一台主机绑定多个域名及虚拟主机
▪linux安全设置    ▪RHEL双网卡绑定    ▪Linux shell if参数
▪Windows配置路由时可以指定源地址啦    ▪centos安装vim7.4    ▪S3C2410 实验三——块拷贝、字拷贝(寄存器的...
▪系统运维——日志处理    ▪ip_conntrack缓存neighbour    ▪关键在封装并发出了帧-IP冲突也无所谓
▪weblogic11g 安装——linux 无图形界面    ▪《数据通信与网络》笔记--SCTP    ▪《数据通信与网络》笔记--TCP中的拥塞控制
▪weblogic11g 安装集群 —— win2003 系统、单台主...    ▪weblogic11g 节点管理器 nodemanager    ▪Citrix 服务器虚拟化之二十六 应用程序虚拟化...
▪如何将windows下的文件夹挂载到linux虚拟机下    ▪在64位AIX6.1下安装SAP JCo    ▪Outlook启动时提示“找不到文件Outlook.pst文件”...
▪weblogic8.1 登陆5 ip 限制    ▪weblogic 内存 及 内存溢出    ▪手把手教你在Windows端搭建Redmine项目管理软件
▪启动及重新启动nginx,重启nginx后丢失nginx.pid问...    ▪Win7实现快速启动栏并实现靠左边的终极操作...    ▪《深入理解Nginx》阅读与实践(二):配置项...
▪显示grub引导菜单    ▪nagios监控主机    ▪linux各种数据流重定向
▪centOS安装chrome浏览器    ▪Slackware 14 安装完全指南    ▪SharePoint 2013的100个新功能之内容管理(三)
▪Citrix 服务器虚拟化之二十一 桌面虚拟化之部...    ▪[问,ask]ubuntu13.04安装vncserver后只显示桌面,不显...    ▪Win7中IIS出现“HTTP 错误 404.17 - Not Found 请求的...
▪CentOS快速安装最新版本的SaltStack    ▪CentOS 6.4 快速安装Nginx笔记    ▪磁盘管理——RAID 0
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3