我们知道,总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会相互干扰,使得所发送的数据被破坏。因此,如何协调总线上各计算机的工作就是以太网要解决的一个重要问题。以太网采用最简单的随机接入,但又很好的协议来减少冲突产生的概率。

以太网采用的协调方法是CSMA/CD协议,意思是载波监听多点接入/碰撞检测。

CSMA/CD协议的要点:

1.多点接入,说明是一个总线型网络,许多计算机以多点接入的方式连接在同一根总线上。协议的实质是载波监听和碰撞检测。

2.载波监听,即使用电子技术检测总线上有没有其他计算机在发送数据,其实总线上并没有什么载波,这里只不过借用一下这个名词,因此载波监听就是检测信道,这是个很重要的措施,不论是发送前,还是发送中,每个站都必须不停的检测信道。如果在发送前检测信道,是为了获得发送权,如果检测出已有其他站正在发送数据,则自己就暂时不许发送数据,必须要等到信道空闲了才能发送。在发送中检测信道,是为了及时发现其他站的发送和本站的碰撞,即碰撞检测。

3.碰撞检测,即边发送边监听,适配器边发送数据时边检测信道上的信号电压变化情况,以便判断自己在发送数据是有无其他站也在同时发送数据,当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加),当适配器检测到信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站点同时发送数据,表明产生了碰撞。所谓碰撞就是发生了冲突。因此,碰撞检测也称为冲突检测,这时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。因此,任何一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,避免继续进行无效的发送,白白浪费网络资源,然后等待一段随机时间后再次发送。

使用CSMA/CD协议时,一个站不可能同时发送同时接收,因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信,即半双工通信。

以太网使用截断二进制指数退避算法来确定碰撞后重传的时机。

还有一种情况,适配器在发送数据时,帧太短了,在发送完才检测出碰撞,此时就很尴尬,因为数据已经发送完了将无法停止发送。所以以太网就规定了一个最短帧长64字节,即512bit。

以太网在发送数据时,如果在争用期(共发送了64字节)没有发生碰撞,那么后续发送的数据就一定不会产生冲突。换句话说,如果发生碰撞,就一定是在发送的前64字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于冲突而异常中止的无效帧,只要收到了这种无效帧,则应当立即丢弃。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。

10.秋招复习简单整理之CSMA/CD协议的更多相关文章

  1. 9.秋招复习简单整理之Spring面试AOP和IOC的理解

    1.Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系,但不适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用 ...

  2. 8.秋招复习简单整理之Spring面试一般问题

    1.不同版本的Spring Framework有哪些主要功能? 2.什么是Spring Framework? Spring是一个轻量级的IOC和AOP容器框架,是为Java应用程序提供基础性服务的一套 ...

  3. 7.秋招复习简单整理之请你讲讲 Statement 和 PreparedStatement 的区别?哪个性能更好?

    Statement和PreparedStatement都是数据库用于执行SQL语句的句柄,但是PreparedStatement代表一个预编译的SQL. 以下是PreparedStatement和St ...

  4. 6.秋招复习简单整理之请你谈谈JDBC的反射,以及它的作用?

    通过反射com.mysql.jdbc.Driver类,实例化该类时会调用该类的静态代码块,该代码块会去java的DriverManager类中注册自己,DriverManager管理所有已注册的驱动类 ...

  5. 5.秋招复习简单整理之请介绍一下List和ArrayList的区别,arrayList和HashSet区别?

    第一问:List是接口,ArrayList是List的实现类. 第二问:ArrayList是List的实现类,HashSet是Set的实现类,List和Set都实现了Collection接口. Arr ...

  6. 4.秋招复习简单整理之java支持多继承吗?

    java仅支持单继承,但支持接口多实现.

  7. 3.秋招复习简单整理之List、Map、Set三个接口存取元素时,各有什么特点?

    List.Set都是单列元素的集合,它们有共同的父接口Collection. List存取有序可重复元素 存元素:调用add方法,存的元素先来后到,有顺序,当然也可以插队,指定存在某个位置,调用add ...

  8. 2.秋招复习简单整理之String、StringBuffer、StringBuilder的区别和联系

    String特点: 1.String是不可变对象,一旦赋值创建就不变,这意味着对String的一切修改将产生一个新的字符串,比如String的subString,replace.toUpperCase ...

  9. 11.秋招复习简单整理之什么是ICMP协议,ICMP协议的功能是什么?

    ICMP即 InternetControlMessageProtocol,是网络控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息指网络通不通.主机是否 ...

随机推荐

  1. python 函数--装饰器

    一.装饰器 1.为什么要用装饰器? 装饰器的功能:在不修改原函数以及调用方式的情况下对原函数功能进行扩展. 二.开放和封闭原则 1.对扩展是开放的 2.对修改是封闭的 三.装饰器的固有结构 impor ...

  2. postman 工具接口测试

    一.get:请求多个参数时,需要用&连接 eg:http://api.***.cn/api/user/stu_info?stu_name=小黑&set=女   eg:接口请求参数放在b ...

  3. vue项目中使用bpmn-流程图预览篇

    前情提要 上文已经实现了节点操作的前进.后退.导入.导出等操作,今日来实现“流程图预览”,以及视图的放大缩小 前提:项目安装过bpmn,安装可见上篇文章 实现要点 bpmn提供了两个神器:Modele ...

  4. Redis分布式锁的实现以及工具类

    一.应用场景: 本文应用的场景为在查询数据时,发现数据不存在此时就需要去查询数据库并且更新缓存,此时可能存在高并发的请求同时打在数据库上,而针对这种情况必须要给这些请求加锁,故而采用了分布式锁的方式. ...

  5. c++ string类的一些使用

    初始化: string类的初始化是不可以用字符进行的,如; string str='c'; string str('c');必须传递字符串字面量作为参数:string本身是用模板类进行实例化的类. s ...

  6. Atcoder E - Crested Ibis vs Monster、

    一看到题目就觉得是一个背包问题,但是不知道怎么写. 题解:直接求背包容量为2*h时所需要的花费.然后h~2h都是满足条件的,去最小值即可. code: #include<bits/stdc++. ...

  7. 格式化启动盘win10

    我这个(U盘)磁盘被分成了两个区,不能直接格式化 第一步: 第二步: 删除完了之后,选择格式化,ok. 说明:格式化时要选择系统. 常规NTFS  缺点:老设备,比如打印机,监控机识别不了. FAT系 ...

  8. [转载]MySQL中int(11)最大长度是多少?

    原文地址:https://blog.csdn.net/allenjay11/article/details/76549503 今天在添加数据的时候,发现当数据类型为 int(11) 时,我当时让用户添 ...

  9. kubernetes的Service是什么?

    service到底是什么? k8s的service定义了一个服务的访问入口地址,前端的应用通过这个入口地址访问其背后的一组由pod副本组成的集群实例.来自外部的访问请求被负载均衡到后端的各个容器应用上 ...

  10. 最全的 API 接口集合

    对于程序员来说,为自己的程序选择一些合适的API并不是那么简单,有时候还会把你搞得够呛,今天猿妹要和大家分享一个开源项目,这个项目汇集了各种开发的api,涵盖了音乐.新闻.书籍.日历等,无论你是从事W ...