【网络协议】TCP/IP:数据链路层
物理层负责把计算机中的0、1数字信号转换为具体传输媒介的物理信号(电压的高低、电波的强弱、光的闪灭)
数据链路层协议定义了(通过通信介质互连的设备间的)数据传输规范 (常见的通信介质有同轴电缆、双绞线电缆、光纤、电波)
相关技术
MAC地址
数据链路层机器节点的标识,无论是哪种数据链路的网络(如以太网,蓝牙等),等不会有相同的MAC地址
6字节(48比特)
共享介质型网络
共享介质型网络指多个设备共享一个通信介质的一种网络。
多个设备之间使用同一个载波信道进行数据的发送和接受, 这样当一个设备在发送或者接受数据的时候其他设备就只能排队等待。
基本为半双工通信【全双工通信指可以同时进行数据的发送和接受, 而半双工不行】
介质访问控制方式
共享型网络是共享通信信道的, 当一个设备使用的时候其他设备不能再进行数据传输,所以就需要对传输通道的使用进行控制
主要有:争用方式 和 令牌传递两种介质访问控制方式
争用方式(先到先得)
也叫CSMA/CD(载波监听多路访问/冲突检测)
算法如下:
当信道上没有数据传输时,所有的站点都可以发送数据帧
当发生冲突时,放弃发送数据帧, 同时立即释放信道
放弃发送后,随机等待一段时间,再重新争用信道,重新发送帧。(随机等待一段时间避免再次发送数据时也产生冲突)
令牌传递方式
令牌沿着整个网络环传递, 只有获得令牌之后才能发送数据帧。
因为同一时刻只会有一个设备获得令牌, 所以可以保证不会冲突。
但是信道的利用率不会太高(因为即使此刻没有其他设备在传送数据帧,也需要等令牌传递到当前设备才可以发送数据 )
非共享介质型网络
网络中的每个站点直接与交换机端口连接,所以发送方和接收方是不共享传输介质的
可以实现全双工通信
集线器(Hub)
Hub工作在物理层,对接受到的信号进行整形扩大 以扩大网络的传输距离。
它不具有类似交换机的MAC地址表,所以会把数据广播到所有与之相连的节点。
交换机
交换机工作在数据链路层或者网络层(有路由功能)
MAC地址转换表自我学习过程
交换机收到某站点数据帧时,如果源地址和端口不在转换表中就将源地址和端口写到转换表中
然后在转换表中查找目标MAC地址。
如果找到就把数据帧转发到该端口,否则广播到所有端口。
转发方式
有存储转发和直接转发两种方式:
存储转发会校验数据帧的FCS字段 如果检测到帧已经损坏就直接丢弃
直通转发在知道MAC地址之后就开始转发,不校验数据帧
直通转发延迟会更低。
环路检测技术
如果网络成环,数据帧就可能在环中一而再再而三的转发,然后造成网络瘫痪。
有生成树和源路由两种算法:
生成树方式:通过禁用某些端口 将整个网络构成为一棵树,避免成环。
源路由算法:将发送帧的源网桥MAC地址写入数据帧中
VLAN(虚拟局域网)
把交换机根据端口分成多个网段,从而区分了广播数据传播的范围
减少了网络的负载并提供了网络的安全性
当然这样整个网络就有多个网段, 需要利用有路由功能的交换机(L3) 或者路由器连接多个网段
以太网(IEEE802.3)
以太网是一种计算机局域网技术
在网络普及的时候, 多台终端使用同一根同轴电缆的共享介质型的连接方式。
而现在一般采用终端与交换机之间独占电缆的方式实现以太网通信(如下图)
以太网帧
前导码 + 帧体
以太网帧前端有一个前导码的部分, 表示一个以太网帧的开始, 用于与对端网卡进行同步(对齐)
帧体:
6字节目标MAC地址:用于数据链路层寻址(交换机查找转发端口)
类型:上层协议类型(IP等协议)
FCS(帧校验序列):用于check帧在传输过程是否遭到破坏
MTU = 1500
从信道利用率和传输时间两方面考虑,以太网的数据传输范围被限制为(46~1500字节)
信道利用率: 假设实际传输数据X字节,利用率就是X/(X + 18)【实际数据字节数/整个帧字节数, 18是帧头14字节 + 帧尾4字节FCS】, X越大信道利用率就越高
数据最少为46字节: 取46的时候信道利用率为71%[46 / (46 + 18)] ,利用率不会太低(当然还有其他原因)
数据最大为1500字节:
我们知道传输的数据越大, 传输时间就越长
假设100Mbps的网络, 网络层的数据报最大65535字节时数据传输时间就是 65535 / (100 * 1024 *1024 / 8) * 1000 = 4.99ms
如果是共享介质型网络,在这5ms内自己不能接受数据,其他设备不能接受发送数据,不可接受!!!
所以我们需要在链路层对上层数据报进行拆分,1500字节的数据在100Mbps的网络下, 传输时间只需要0.11ms左右,是OK 的。
【网络协议】TCP/IP:数据链路层的更多相关文章
- 网络协议TCP/IP、IPX/SPX、NETBEUI简介
网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
- 网络知识--OSI七层网络与TCP/IP五层网络架构及二层/三层网络
作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明:一.OSI七层网络协议OSI是Open System Int ...
- 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)
reference:https://www.cnblogs.com/kevingrace/p/5909719.html https://www.cnblogs.com/awkflf11/p/9190 ...
- Socket网络编程(TCP/IP/端口/类)和实例
Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...
- 加深理解HTTP请求---网络基础TCP/IP
为了了解HTTP,必须的了解TCP/IP协议族. 通常使用的网络实在TCP/IP协议族的基础上运作的.而HTTP就属于他的一个子集. 1.TCP/IP 协议族 计算机与网络设备要相互通信,双方就必须基 ...
- 网络编程TCP/IP详解
网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...
- 网络协议TCP、Http、webservice、socket区别
网络协议TCP.Http.webservice.socket区别 http 和 webservice 都是基于TCP/IP协议的应用层协议 webservice是基于http的soap协议传输数据 w ...
- JavaWeb 获取请求网络协议、IP、端口号、项目根路径
JavaWeb 获取请求网络协议.IP.端口号.项目根路径 CreateTime--2018年6月1日16点32分 Author:Marydon 1.需求 在项目中,需要使用Java向本程序发送r ...
- js 获取请求网络协议、IP、端口号、项目名称
js 获取请求网络协议.IP.端口号.项目名称 CreationTime--2018年6月19日15点54分 Author:Marydon /** * 获取url请求前缀 * @return ht ...
随机推荐
- Javascript基本数据认识
1.Js的组成 2.Js的三种引入 行内式 <input type="button" value="来嘛来嘛" onclick="alert(' ...
- ssm框架(Spring Springmvc Mybatis框架)整合及案例增删改查
三大框架介绍 ssm框架是由Spring springmvc和Mybatis共同组成的框架.Spring和Springmvc都是spring公司开发的,因此他们之间不需要整合.也可以说是无缝整合.my ...
- 初级知识点一——C#中的值类型与引用类型
从C#语言的定义中可以知道,C#支持两种值类型,分别是 值类型和引用类型,那么两者的区别到底在哪儿呢? 值类型特点: 1. 值类型包含 a 预定义的值类型 b 用户自定义的值类型(struct) 2. ...
- 使用easyexcel时遇到Could not initialize class net.sf.cglib.beans.BeanMap$Generator
可以访问 这里 查看更多关于大数据平台建设的原创文章. 上一篇文章 Maven项目为什么会产生NoClassDefFoundError的jar包冲突 结合了大量的图解,详细介绍了Maven项目产生ja ...
- Spring JPA 拓展
Spring JPA 拓展 翻译:Spring Data Extensions 本节记录了一组Spring数据扩展,它们支持在各种上下文中使用Spring数据.目前,大部分集成都是针对Spring M ...
- jQuery 如何实现 模糊搜索
如何实现 模糊搜索 当我们浏览网页的时候,通常能看到搜索栏,这大大的提高了我们获取数据的目的性.那如何去实现一个简单的模糊搜索 框呢,以下案例获取能给你一点思路. 以下案例,可以实现当按键按下时,自动 ...
- 自定义线程池ThreadPoolExecutor
使用自定义的方式创建线程池 Java本身提供的获取线程池的方式 使用Executors直接获取线程池,注意,前四个方式的底层都是通过new ThreadPoolExecutor()的方式创建的线程池, ...
- Oracle的timestamp字段更新实验 结论:只有逐条更新才能保证timestamp字段有差别,批量更新只会得到一致的时间,此操作无关时间精度.
有这么一张表: create table hy_testtime( id number(6,0) not null primary key, name nvarchar2(20) not null, ...
- 20190925-01安装redis 000 022
1.将redis压缩包放入Linux系统有4种办法. 第一:如果安装了VMware Tools工具可以直接进行拖拽 第二:在windows中找到配置好的共享文件夹将redis压缩包放入其中,在Linu ...
- 10.QT-QAudioOutput类使用
本章需要用到的类如下: QAudioDeviceInfo类提供音频输出设备 QAudioFormat类提供音频参数设置 QAudioOutput类提供了用于将PCM原始音频数据发送到音频输出设备的接口 ...