以太网MAC协议
以太网原理MAC和PHY
以太网原理MAC和PHY以太网是一种局域网(LAN)技术,用于在计算机之间传输数据。
以太网原理包括物理层(PHY)和媒体访问控制层(MAC)两个部分。
物理层(PHY)是以太网技术的底层,负责将传输的数据转化为电信号,并在网络中传输和接收数据。
PHY负责处理传输介质、传输速率等物理层面的细节。
MAC层是以太网技术的上层,负责管理和控制网络中的通信。
MAC层协议定义了数据的传输方式、帧结构、帧格式等规范,以确保数据的可靠传输和有效利用。
在以太网中,数据被分割成一系列的帧(Frame),每个帧由MAC层添加标识符和校验码,并传输到物理层。
物理层将数据转化成电信号,并通过传输介质(如双绞线、光纤等)传输到目标计算机。
PHY层通过一系列的电器和电子设备来处理数据的传输。
这些设备包括编码器、解码器、物理传输媒介、放大器等。
编码器和解码器负责将数据转化为电信号和相反的操作,物理传输媒介负责在不同的介质中传输数据,放大器用于增强信号的强度。
当数据传输到目标计算机后,物理层将电信号转化为数据,并传递给MAC层处理。
MAC层根据帧的标识符和校验码来验证数据的完整性和正确性,并将其传递给上层应用程序。
MAC层还负责管理和控制网络中的通信。
为了避免数据冲突,以太网采用了一种称为“载波侦听多址接入/碰撞检测”(Carrier Sense Multiple Access/Collision Detection,CSMA/CD)的协议。
该协议允许多个计算机同时发送数据,但如果检测到冲突,则发送方会停止发送,等待一段随机时间后重新发送。
以太网的传输速率通常用Mbps(兆位每秒)来衡量,常见的速率有10Mbps、100Mbps和1000Mbps(即千兆以太网,也被称为千兆网)。
总结起来,以太网的原理包括物理层(PHY)和媒体访问控制层(MAC)两个部分。
PHY层负责将数据转化为电信号,并在物理介质上传输和接收数据。
MAC层负责管理和控制网络中的通信,确保数据的可靠传输和有效利用。
以太网有什么缺陷?工业以太网又有何优势
以太网有什么缺陷?工业以太网又有何优势
以太网三大缺陷
1.确定性
由于以太网的MAC层协议是CSMA/CD,因此该协议在网络上存在冲突。
对于工业网络来说,如果存在大量的冲突,数据必须多次重传,大大增加了网络间通信的不确定性,降低了系统的控制性能。
2.实时性
在工业控制系统中,事件发生后,系统必须在可以准确预见的时间范围内做出响应。
然而,行业对数据传输的实时性要求非常高,数据更新只需几十毫秒就能完成。
当发生冲突时,以太网的CSMA/CD机制可以尝试16次重新发送数据。
这种冲突解决机制是以时间为代价的,设备断开可能导致重大设备或人身安全事故。
3.可靠性
以太网是为商业设计的,但当应用到工业现场时,面对恶劣的工作条件和严重的线路间干扰,它不可避免地会降低可靠性。
因此,工业网络对可靠性、可恢复性和可维护性提出了很高的要求。
二、工业以太网技术特点
1.交换技术
共享局域网被有效地划分为冲突域。
交换机用于连接各个领域,以减少冲突问题和错误传递。
这可以最大限度地避免冲突,提高系统的确定性。
2.高速以太网
冲突的发生与负载有关。
负载越大,冲突的可能性就越大。
提高以太网的通信速度可以降低网络负载。
3.IEEE1588时间同步机制
IEEE1588定义了一种协议(PTP),用于精确同步与测量和控制网络中的对象的网络通信、本地计算和分布相关的时钟。
该协议特别适用于基于以太网的技术,精度可以达到微秒级。
随着科技的进步和发展,以太网传输速率的提高和以太网交换技术的发展,传统商用以太网的上述问题在工业以太网中正在得到解决。
MACsec以太网加密
MACsec以太网加密以太网是目前最常用的局域网技术之一,但其在数据传输的安全性方面存在着一些不足。
为了解决这一问题,IEEE(国际电工电子工程师协会)提出了MACsec(以太网安全)协议,该协议可以在以太网链路层对数据进行加密和验证,从而保障数据的机密性和完整性。
一、MACsec的基本原理MACsec通过在以太网链路层对数据进行加密和验证,为数据传输提供了更高的安全性。
其基本原理如下:1. 安全连接的建立:在通信双方之间建立安全连接之前,需要进行密钥协商,以确保通信双方使用相同的密钥来进行加密和验证操作。
2. 数据加密:MACsec使用对称加密算法对数据进行加密,保证数据在传输过程中不被窃取或篡改。
加密后的数据只能由具有正确密钥的接收方解密。
3. 数据完整性保护:MACsec使用消息完整性代码(MIC)来验证数据在传输过程中是否被篡改。
接收方可以通过验证MIC来确定数据的完整性,并拒绝被篡改的数据。
4. 密钥更新:为了保障安全性,密钥必须定期更新。
密钥更新的过程对于确保数据的安全至关重要。
二、MACsec的工作模式MACsec可以工作在两种不同的模式下:1. 点对点模式:在点对点模式下,MACsec只保护通信双方之间的数据传输安全。
数据在发送前进行加密,并在接收端进行解密和验证。
2. 多点模式:在多点模式下,MACsec可以同时保护多个终端间的数据传输安全。
数据在发送前进行加密,并在每个接收终端进行解密和验证。
三、MACsec的应用领域MACsec在以下多个领域有着广泛的应用:1. 企业内部网络安全:对于企业来说,保障内部网络的安全性非常重要。
MACsec可以确保在企业局域网内进行的数据传输过程中,不会被窃取或篡改。
2. 数据中心网络安全:数据中心是存储和处理大量敏感数据的地方,因此对其网络安全的保护要求非常高。
MACsec可以提供强大的数据传输安全机制,确保数据中心网络的安全性。
3. 云计算环境安全:随着云计算的广泛应用,数据在云端传输过程中的安全性成为一个重要问题。
FPGA——以太网MAC层数据发送协议实现及验证
FPGA——以太⽹MAC层数据发送协议实现及验证⼀、设计思路FPGA实现MAC层(数据链路层)的功能并连接到RTL8211物理层(PHY)芯⽚实现以太⽹数据的发送使⽤GMII接⼝时钟是125MHz,⼀次发8bit数据 8bit * 125M = 1000Mbit 所以叫做千兆以太⽹RTL8211时序来⼀个时钟上升沿就发⼀个字节的数据数据链路层(MAC帧协议)发送过程前同步码 0x55,发七次帧开始符 0xD5⽬的MAC地址(6字节)源MAC地址(6字节)类型:0x800 使⽤IP上层协议,代表下⾯发送的数据是IP数据报数据IP报⽂⾸部IP版本 0x4 IPv4⾸部长度服务类型总长度分段标识保留位DFMF段偏移⽣存周期TTL上层协议 0x11 UDP报⽂校验和源IP地址⽬的IP地址可选字段(0字节不需要)IP报⽂数据(UDP报⽂)UDP报⽂⾸部16位源端⼝号16位⽬的端⼝号16位UDP长度16位UDP校验和(可以直接置0)UDP报⽂数据CRC校验IP报⽂校验和将IP报⽂⾸部,从前到后拼成⼀个⼀个的2字节的数据相加(其中报⽂校验和置0)然后将所加的32bit数据的⾼16位于低16位相加,直到⾼16bit为0 将16bit取反,则为校验和虽然⽣成了函数,但是具体使⽤函数还是要做更改的注意:CRC校验是从发送⽬的MAC地址开始校验的IP⾸部长度单位是/32bit(4字节) 如果没有可选⾃动,⾸部长度就是 5(⾏)IP总长度总长度 = IP⾸部长度 + IP报⽂数据长度单位是/字节MAC帧协议的数据和填充数据和填充那个位置,⾄少要46个字节,如果要发送的UDP报⽂数据加起来没有46字节的话,就要在后⾯填0x00直到有46个字节为⽌ IP报⽂头部(20字节)+ UDP报⽂(8字节)+ 发送的数据 >= 46 发送的数据 >= 18字节FPGA状态机实现每⼀个状态都配套⼀个计数器⼆、以太⽹GMIII发送代码实现module eth_udp_tx_gmii(clk ,rst_n ,tx_en ,tx_done ,dst_mac ,src_mac ,dst_ip ,gmii_clk ,data_len ,data_vld ,gmii_en ,gmii_tx ,data_in);localparam MAC_W = 48;localparam IP_W = 32;localparam PORT_W = 16;localparam DATA_LEN_W = 16;localparam GMII_W = 8;localparam PREAMBLE = 8'h55; //前导码localparam SFD = 8'hD5; //帧开始符localparam ETH_TYPE = 16'h0800;//上层协议类型,IP协议localparam IP_VER = 4'h4; //IPV4localparam IP_HDR_LEN = 4'h5; //⾸部长度有5个32bit localparam IP_TOS = 8'h00; //服务类型,未⽤localparam IP_HED_LEN = 20; //IP头部长度localparam UDP_HED_LEN = 8; //UDP头部长度localparam IP_ID = 16'h0000;//分段标识localparam IP_RSV = 1'b0; //保留localparam IP_DF = 1'b0; //是否分段localparam IP_MF = 1'b0; //是否有后续分段localparam IP_FRAG_OFFSET = 13'h0; //段偏移(以8字节为单位)localparam IP_TTL = 8'h40; //⽣存周期,能经过40个路由器localparam IP_PROTOCOL = 8'h11; //上层协议(UDP)localparam MIN_DATA = 46; //UDP数据最⼩长度localparam DATA_W = 8;//状态机参数localparam IDLE = 7'b0000001;localparam TX_ETH_HED = 7'b0000010;localparam TX_IP_HED = 7'b0000100;localparam TX_UDP_HED = 7'b0001000;localparam TX_UDP_DATA = 7'b0010000;localparam TX_FILL_DATA = 7'b0100000;localparam TX_CRC = 7'b1000000;localparam STATE_W = 7;//计数器参数localparam ETH_HED_W = 5;localparam ETH_HED_N = 22;localparam IP_HED_W = 5;localparam IP_HED_N = 20;localparam UDP_HED_N = 8;localparam UDP_HED_W = 4;localparam CNT_DATA_W = 11;localparam FILL_W = 6;localparam CNT_CRC_W = 3;localparam CNT_CRC_N = 4;//模块参数localparam CHEC_W = 16;localparam CRC_OUT_W = 32;input clk;input rst_n;input tx_en; //发送使能input [MAC_W-1:0] dst_mac; //⽬的Mac地址input [MAC_W-1:0] src_mac; //源Mac地址input [IP_W-1:0] dst_ip; //⽬的ip地址input [IP_W-1:0] src_ip; //源ip地址input [PORT_W-1:0] dst_port; //⽬的端⼝input [PORT_W-1:0] src_port; //源端⼝input [DATA_LEN_W-1:0] data_len; //发送数据长度input [DATA_W-1:0] data_in; //输⼊数据output gmii_clk; //以太⽹接⼝时钟output gmii_en; //以太⽹使能output [GMII_W-1:0] gmii_tx; //以太⽹数据output tx_done; //发送完成output data_vld; //数据有效标志信号wire gmii_clk; //以太⽹接⼝时钟reg gmii_en; //以太⽹使能reg [GMII_W-1:0] gmii_tx; //以太⽹数据reg tx_done; //发送完成reg data_vld; //数据有效标志信号reg [STATE_W-1:0] state_c;reg [STATE_W-1:0] state_n;wire idle2tx_eth_hed;wire tx_eth_hed2tx_ip_hed;wire tx_ip_hed2tx_udp_hed;wire tx_udp_hed2tx_udp_data;wire tx_udp_data2tx_fill_data;wire tx_udp_data2tx_crc;wire tx_fill_data2tx_crc;wire tx_crc2idle;//计数器变量reg [ETH_HED_W-1:0] cnt_eth_hed;wire add_cnt_eht_hed;wire end_cnt_eth_hed;reg [IP_HED_W-1:0] cnt_ip_hed;wire add_cnt_ip_hed;wire end_cnt_ip_hed;reg [UDP_HED_W-1:0] cnt_udp_hed;wire add_cnt_udp_hed;wire end_cnt_udp_hed;reg [CNT_DATA_W-1:0] cnt_data;wire add_cnt_data;wire end_cnt_data;reg [FILL_W-1:0] cnt_fill;wire add_cnt_fill;wire end_cnt_fill;reg [CNT_CRC_W-1:0] cnt_crc;wire add_cnt_crc;wire end_cnt_crc;//中间变量reg tx_flag;reg [MAC_W-1:0] dst_mac_tmp; //⽬的Mac地址reg [MAC_W-1:0] src_mac_tmp; //源Mac地址reg [IP_W-1:0] dst_ip_tmp; //⽬的ip地址reg [IP_W-1:0] src_ip_tmp; //源ip地址reg [PORT_W-1:0] dst_port_tmp; //⽬的端⼝reg [PORT_W-1:0] src_port_tmp; //源端⼝reg [DATA_LEN_W-1:0] data_len_tmp; //发送数据长度reg [DATA_LEN_W-1:0] ip_total_len; //IP总长度reg [DATA_LEN_W-1:0] udp_total_len; //UDP总长度wire [16-1:0] udp_check_sum; //UDP校验和reg [DATA_W-1:0] data_out; //以太⽹数据reg tx_nocrc_flag;//模块变量wire [CHEC_W-1:0] check_sum; //IP报头校验和reg sum_en;reg crc_init;reg crc_en;wire [CRC_OUT_W-1:0] crc_out;always @(posedge clk or negedge rst_n)beginif(!rst_n)state_c <= IDLE;elsestate_c <= state_n;endalways @(*)begincase(state_c)IDLE:beginif(idle2tx_eth_hed)state_n = TX_ETH_HED;elsestate_n = state_c;endTX_ETH_HED:beginif(tx_eth_hed2tx_ip_hed)state_n = TX_IP_HED;elsestate_n = state_c;endTX_IP_HED:beginif(tx_ip_hed2tx_udp_hed)state_n = state_c;endTX_UDP_HED:beginif(tx_udp_hed2tx_udp_data)state_n = TX_UDP_DATA;elsestate_n = state_c;endTX_UDP_DATA:beginif(tx_udp_data2tx_fill_data)state_n = TX_FILL_DATA;else if(tx_udp_data2tx_crc)state_n = TX_CRC;elsestate_n = state_c;endTX_FILL_DATA:beginif(tx_fill_data2tx_crc)state_n = TX_CRC;elsestate_n = state_c;endTX_CRC:beginif(tx_crc2idle)state_n = IDLE;elsestate_n = state_c;enddefault:state_n = IDLE;endcaseendassign idle2tx_eth_hed = state_c == IDLE && tx_en;assign tx_eth_hed2tx_ip_hed = state_c == TX_ETH_HED && end_cnt_eth_hed;assign tx_ip_hed2tx_udp_hed = state_c == TX_IP_HED && end_cnt_ip_hed;assign tx_udp_hed2tx_udp_data = state_c == TX_UDP_HED && end_cnt_udp_hed;assign tx_udp_data2tx_fill_data = state_c == TX_UDP_DATA && end_cnt_data && (data_len_tmp > 0 && data_len_tmp < (MIN_DATA - IP_HED_LEN - UDP_HED_LEN)); assign tx_udp_data2tx_crc = state_c == TX_UDP_DATA && end_cnt_data && data_len_tmp >= (MIN_DATA - IP_HED_LEN - UDP_HED_LEN);assign tx_fill_data2tx_crc = state_c == TX_FILL_DATA && end_cnt_fill;assign tx_crc2idle = state_c == TX_CRC && end_cnt_crc;always@(posedge clk or negedge rst_n)beginif(!rst_n)data_out <= 0;else if(state_c == TX_ETH_HED)begincase(cnt_eth_hed)0,1,2,3,4,5,6:data_out <= PREAMBLE;7 :data_out <= SFD;8 :data_out <= dst_mac_tmp[47:40];9 :data_out <= dst_mac_tmp[39:32];10:data_out <= dst_mac_tmp[31:24];11:data_out <= dst_mac_tmp[23:16];12:data_out <= dst_mac_tmp[15:8];13:data_out <= dst_mac_tmp[7:0];14:data_out <= src_mac_tmp[47:40];15:data_out <= src_mac_tmp[39:32];16:data_out <= src_mac_tmp[31:24];17:data_out <= src_mac_tmp[23:16];18:data_out <= src_mac_tmp[15:8];19:data_out <= src_mac_tmp[7:0];20:data_out <= ETH_TYPE[15:8];21:data_out <= ETH_TYPE[7:0];default:data_out <= 8'h00;endcaseendelse if(state_c == TX_IP_HED)begincase(cnt_ip_hed)0 :data_out <= {IP_VER,IP_HDR_LEN};1 :data_out <= IP_TOS;2 :data_out <= ip_total_len[15:8];3 :data_out <= ip_total_len[7:0];4 :data_out <= IP_ID[15:8];5 :data_out <= IP_ID[7:0];6 :data_out <= {IP_RSV,IP_DF,IP_MF,IP_FRAG_OFFSET[12:8]};7 :data_out <= IP_FRAG_OFFSET[7:0];8 :data_out <= IP_TTL;9 :data_out <= IP_PROTOCOL;10:data_out <= check_sum[15:8];11:data_out <= check_sum[7:0];12:data_out <= src_ip_tmp[31:24];13:data_out <= src_ip_tmp[23:16];14:data_out <= src_ip_tmp[15:8];15:data_out <= src_ip_tmp[7:0];17:data_out <= dst_ip_tmp[23:16];18:data_out <= dst_ip_tmp[15:8];19:data_out <= dst_ip_tmp[7:0];default:data_out <= 8'h00;endcaseendelse if(state_c == TX_UDP_HED)begincase(cnt_udp_hed)0:data_out <= src_port_tmp[15:8];1:data_out <= src_port_tmp[7:0];2:data_out <= dst_port_tmp[15:8];3:data_out <= dst_port_tmp[7:0];4:data_out <= udp_total_len[15:8];5:data_out <= udp_total_len[7:0];6:data_out <= udp_check_sum[15:8];7:data_out <= udp_check_sum[7:0];default:data_out <= 8'h00;endcaseendelse if(state_c == TX_UDP_DATA)begindata_out <= data_in;endelse if(state_c == TX_FILL_DATA)begindata_out <= 8'h00;endelse if(state_c == TX_CRC)begindata_out <= 0;endend//以太⽹头部计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt_eth_hed <= 0;else if(add_cnt_eht_hed)beginif(end_cnt_eth_hed)cnt_eth_hed <= 0;elsecnt_eth_hed <= cnt_eth_hed + 1'b1;endendassign add_cnt_eht_hed = state_c == TX_ETH_HED;assign end_cnt_eth_hed = add_cnt_eht_hed && cnt_eth_hed == ETH_HED_N - 1; //IP头计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt_ip_hed <= 0;else if(add_cnt_ip_hed)beginif(end_cnt_ip_hed)cnt_ip_hed <= 0;elsecnt_ip_hed <= cnt_ip_hed + 1;endendassign add_cnt_ip_hed = state_c == TX_IP_HED;assign end_cnt_ip_hed = add_cnt_ip_hed && cnt_ip_hed == IP_HED_N - 1;//udp头部计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_udp_hed <= 0;endelse if(add_cnt_udp_hed)beginif(end_cnt_udp_hed)cnt_udp_hed <= 0;elsecnt_udp_hed <= cnt_udp_hed + 1;endendassign add_cnt_udp_hed = state_c == TX_UDP_HED;assign end_cnt_udp_hed = add_cnt_udp_hed && cnt_udp_hed == UDP_HED_N - 1; //UDP数据计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_data <= 0;endelse if(add_cnt_data)beginif(end_cnt_data)cnt_data <= 0;elsecnt_data <= cnt_data + 1;endassign add_cnt_data = state_c == TX_UDP_DATA;assign end_cnt_data = add_cnt_data && cnt_data == data_len_tmp - 1;//填充计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_fill <= 0;endelse if(add_cnt_fill)beginif(end_cnt_fill)cnt_fill <= 0;elsecnt_fill <= cnt_fill + 1;endendassign add_cnt_fill = state_c == TX_FILL_DATA;assign end_cnt_fill = add_cnt_fill && cnt_fill == (MIN_DATA - IP_HED_LEN - UDP_HED_LEN - data_len_tmp) - 1; //CRC计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_crc <= 0;endelse if(add_cnt_crc)beginif(end_cnt_crc)cnt_crc <= 0;elsecnt_crc <= cnt_crc + 1;endendassign add_cnt_crc = state_c == TX_CRC && !tx_nocrc_flag;assign end_cnt_crc = add_cnt_crc && cnt_crc == CNT_CRC_N - 1;always @(posedge clk or negedge rst_n)beginif(!rst_n)tx_flag <= 0;else if(tx_en)tx_flag <= 1;end//装载写⼊数据always @(posedge clk or negedge rst_n)beginif(!rst_n)begindst_mac_tmp <= 0;src_mac_tmp <= 0;dst_ip_tmp <= 0;src_ip_tmp <= 0;dst_port_tmp <= 0;src_port_tmp <= 0;data_len_tmp <= 0;endelse if(tx_en && (!tx_flag))begindst_mac_tmp <= dst_mac;src_mac_tmp <= src_mac;dst_ip_tmp <= dst_ip;src_ip_tmp <= src_ip;dst_port_tmp <= dst_port;src_port_tmp <= src_port;data_len_tmp <= data_len;endend//IP总长度,20字节的IP⾸部+8字节UDP⾸部+UDP数据长度always @(posedge clk or negedge rst_n)beginif(!rst_n)ip_total_len <= 0;else if(state_c == TX_ETH_HED && (cnt_eth_hed == 0 && add_cnt_eht_hed))ip_total_len = IP_HED_LEN + UDP_HED_LEN + data_len_tmp;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)udp_total_len <= 0;else if(state_c == TX_ETH_HED && (cnt_eth_hed == 0 && add_cnt_eht_hed))udp_total_len <= UDP_HED_LEN + data_len_tmp;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)sum_en <= 0;else if(state_c == TX_ETH_HED && end_cnt_eth_hed)sum_en <= 1;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)crc_init <= 0;else if(tx_en && (!tx_flag))crc_init <= 1;elsecrc_init <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)crc_en <= 0;else if(state_c == TX_ETH_HED)beginif(cnt_eth_hed == 9 - 1 && add_cnt_eht_hed)crc_en <= 1;endelse if(state_c == TX_IP_HED || state_c == TX_UDP_HED || state_c == TX_UDP_DATA || state_c == TX_FILL_DATA)crc_en <= 1;elsecrc_en <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)gmii_tx <= 0;else if(tx_nocrc_flag)gmii_tx <= data_out;else if(state_c == TX_CRC)begincase(cnt_crc)0:gmii_tx <= crc_out[7:0];1:gmii_tx <= crc_out[15:8];2:gmii_tx <= crc_out[23:16];3:gmii_tx <= crc_out[31:24];default:gmii_tx <= 8'h00;endcaseendelse if(tx_done)gmii_tx <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)tx_nocrc_flag <= 0;else if(state_c == TX_ETH_HED || state_c == TX_IP_HED || state_c == TX_UDP_HED || state_c == TX_UDP_DATA || state_c == TX_FILL_DATA) tx_nocrc_flag <= 1;elsetx_nocrc_flag <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)tx_done <= 0;else if(end_cnt_crc)tx_done <= 1;elsetx_done <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)data_vld <= 0;else if(end_cnt_udp_hed)data_vld <= 1;else if(end_cnt_data)data_vld <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)gmii_en <= 0;else if(cnt_eth_hed == 1 && add_cnt_eht_hed)gmii_en <= 1;else if(tx_done)gmii_en <= 0;endassign gmii_clk = clk;assign udp_check_sum = 0;.rst_n (rst_n),.sum_en (sum_en), //使能.ver (IP_VER), //ip版本.hdr_len (IP_HDR_LEN), //⾸部长度(单位,字节) .tos (IP_TOS), //服务类型.total_len (ip_total_len), //总长度.id (IP_ID), //分段标识.rsv (IP_RSV), //未⽤.df (IP_DF), //DF.mf (IP_MF), //MF.frag_offset (IP_FRAG_OFFSET), //段偏移.ttl (IP_TTL), //⽣存周期TTL(单位,秒).protocal (IP_PROTOCOL), //上层协议.check_sum (check_sum), //报头校验和.src_ip (src_ip_tmp), //源ip地址.dst_ip (dst_ip_tmp) //⽬的ip地址);crc32_d8 crc32_d8(.clk (clk),.rst_n (rst_n),.data (data_out),.crc_init (crc_init),.crc_en (crc_en),.crc_out (crc_out));endmodule三、IP校验和模块module ip_checksum(clk ,rst_n ,sum_en , //使能ver , //ip版本hdr_len , //⾸部长度(单位,字节)tos , //服务类型total_len , //总长度id , //分段标识rsv , //未⽤df , //DFmf , //MFfrag_offset , //段偏移ttl , //⽣存周期TTL(单位,秒)protocal , //上层协议check_sum , //报头校验和src_ip , //源ip地址dst_ip //⽬的ip地址);localparam VER_W = 4;localparam HDR_W = 4;localparam TOS_W = 8;localparam TOT_W = 16;localparam ID_W = 16;localparam FRAG_W = 13;localparam TTL_W = 8;localparam PTOC_W = 8;localparam CHEC_W = 16;localparam SR_W = 32;localparam DS_W = 32;localparam SUM_W = 32;localparam ACC_W = 17;input clk;input rst_n;input sum_en;input [VER_W-1:0] ver;input [HDR_W-1:0] hdr_len;input [TOS_W-1:0] tos;input [TOT_W-1:0] total_len;input [ID_W-1:0] id;input rsv;input df;input mf;input [FRAG_W-1:0] frag_offset;input [TTL_W-1:0] ttl;input [PTOC_W-1:0] protocal;input [SR_W-1:0] src_ip;input [DS_W-1:0] dst_ip;output [CHEC_W-1:0] check_sum;reg [CHEC_W-1:0] check_sum;//中间变量reg [SUM_W-1:0] sum;reg [ACC_W-1:0] acc_high_low;always @(posedge clk or negedge rst_n)beginif(!rst_n)sum <= 0;else if(sum_en)sum <= {ver,hdr_len,tos} + total_len + id + {rsv,df,mf,frag_offset} + {ttl,protocal} + src_ip[31:16] + src_ip[15:0] + dst_ip[31:16] + dst_ip[15:0]; endalways @(posedge clk or negedge rst_n)beginif(!rst_n)acc_high_low <= 0;elseacc_high_low <= sum[15:0] + sum[31:16];endalways @(posedge clk or negedge rst_n)beginif(!rst_n)check_sum <= 0;elsecheck_sum <= ~(acc_high_low[15:0] + acc_high_low[16]);endendmodule四、CRC校验模块////////////////////////////////////////////////////////////////////////////////// Copyright (C) 1999-2008 Easics NV.// This source file may be used and distributed without restriction// provided that this copyright statement is not removed from the file// and that any derivative work contains the original copyright notice// and the associated disclaimer.//// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// Purpose : synthesizable CRC function// * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1// * data width: 8//// Info : tools@easics.be// ////////////////////////////////////////////////////////////////////////////////module crc32_d8(clk ,rst_n ,data ,crc_init ,crc_en ,crc_out);localparam DATA_W = 8;localparam OUT_W = 32;input clk;input rst_n;input [DATA_W-1:0] data;input crc_init;input crc_en;output [OUT_W-1:0] crc_out;wire [OUT_W-1:0] crc_out;//中间变量wire [DATA_W-1:0] data_in;reg [OUT_W-1:0] crc_out_inv;//⽣成data反转电路generategenvar i;for(i = 0;i < DATA_W;i = i + 1)beginassign data_in[i] = data[(DATA_W-1) - i];end//⽣成crc反转电路generategenvar j;for(j = 0;j < OUT_W;j = j + 1)beginassign crc_out[j] = ~crc_out_inv[(OUT_W-1) - j];endendgenerate//输出CRC,初始化CRC为FFFF_FFFF,使能输出CRCalways @(posedge clk or negedge rst_n)beginif(!rst_n)crc_out_inv <= 0;else if(crc_init)crc_out_inv <= 32'hffff_ffff;else if(crc_en)crc_out_inv <= nextCRC32_D8(data_in,crc_out_inv);end// polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 // data width: 8// convention: the first serial bit is D[7]function [31:0] nextCRC32_D8;input [7:0] Data;input [31:0] crc;reg [7:0] d;reg [31:0] c;reg [31:0] newcrc;begind = Data;c = crc;newcrc[0] = d[6] ^ d[0] ^ c[24] ^ c[30];newcrc[1] = d[7] ^ d[6] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[30] ^ c[31];newcrc[2] = d[7] ^ d[6] ^ d[2] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[26] ^ c[30] ^ c[31];newcrc[3] = d[7] ^ d[3] ^ d[2] ^ d[1] ^ c[25] ^ c[26] ^ c[27] ^ c[31];newcrc[4] = d[6] ^ d[4] ^ d[3] ^ d[2] ^ d[0] ^ c[24] ^ c[26] ^ c[27] ^ c[28] ^ c[30];newcrc[5] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[27] ^ c[28] ^ c[29] ^ c[30] ^ c[31]; newcrc[6] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[25] ^ c[26] ^ c[28] ^ c[29] ^ c[30] ^ c[31];newcrc[7] = d[7] ^ d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[24] ^ c[26] ^ c[27] ^ c[29] ^ c[31];newcrc[8] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[0] ^ c[24] ^ c[25] ^ c[27] ^ c[28];newcrc[9] = d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[1] ^ c[25] ^ c[26] ^ c[28] ^ c[29];newcrc[10] = d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[2] ^ c[24] ^ c[26] ^ c[27] ^ c[29];newcrc[11] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[3] ^ c[24] ^ c[25] ^ c[27] ^ c[28];newcrc[12] = d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ d[0] ^ c[4] ^ c[24] ^ c[25] ^ c[26] ^ c[28] ^ c[29] ^ c[30];newcrc[13] = d[7] ^ d[6] ^ d[5] ^ d[3] ^ d[2] ^ d[1] ^ c[5] ^ c[25] ^ c[26] ^ c[27] ^ c[29] ^ c[30] ^ c[31];newcrc[14] = d[7] ^ d[6] ^ d[4] ^ d[3] ^ d[2] ^ c[6] ^ c[26] ^ c[27] ^ c[28] ^ c[30] ^ c[31];newcrc[15] = d[7] ^ d[5] ^ d[4] ^ d[3] ^ c[7] ^ c[27] ^ c[28] ^ c[29] ^ c[31];newcrc[16] = d[5] ^ d[4] ^ d[0] ^ c[8] ^ c[24] ^ c[28] ^ c[29];newcrc[17] = d[6] ^ d[5] ^ d[1] ^ c[9] ^ c[25] ^ c[29] ^ c[30];newcrc[18] = d[7] ^ d[6] ^ d[2] ^ c[10] ^ c[26] ^ c[30] ^ c[31];newcrc[19] = d[7] ^ d[3] ^ c[11] ^ c[27] ^ c[31];newcrc[20] = d[4] ^ c[12] ^ c[28];newcrc[21] = d[5] ^ c[13] ^ c[29];newcrc[22] = d[0] ^ c[14] ^ c[24];newcrc[23] = d[6] ^ d[1] ^ d[0] ^ c[15] ^ c[24] ^ c[25] ^ c[30];newcrc[24] = d[7] ^ d[2] ^ d[1] ^ c[16] ^ c[25] ^ c[26] ^ c[31];newcrc[25] = d[3] ^ d[2] ^ c[17] ^ c[26] ^ c[27];newcrc[26] = d[6] ^ d[4] ^ d[3] ^ d[0] ^ c[18] ^ c[24] ^ c[27] ^ c[28] ^ c[30];newcrc[27] = d[7] ^ d[5] ^ d[4] ^ d[1] ^ c[19] ^ c[25] ^ c[28] ^ c[29] ^ c[31];newcrc[28] = d[6] ^ d[5] ^ d[2] ^ c[20] ^ c[26] ^ c[29] ^ c[30];newcrc[29] = d[7] ^ d[6] ^ d[3] ^ c[21] ^ c[27] ^ c[30] ^ c[31];newcrc[30] = d[7] ^ d[4] ^ c[22] ^ c[28] ^ c[31];newcrc[31] = d[5] ^ c[23] ^ c[29];nextCRC32_D8 = newcrc;endendfunctionendmodule五、仿真验证`timescale 1ns / 1nsmodule eth_tb();localparam MAC_W = 48;localparam IP_W = 32;localparam PORT_W = 16;localparam DATA_LEN_W = 16;localparam GMII_W = 8;localparam DATA_W = 8;parameter CYCLE = 20;reg clk;reg rst_n;reg tx_en; //发送使能reg [MAC_W-1:0] dst_mac; //⽬的Mac地址reg [MAC_W-1:0] src_mac; //源Mac地址reg [IP_W-1:0] dst_ip; //⽬的ip地址reg [IP_W-1:0] src_ip; //源ip地址reg [PORT_W-1:0] dst_port; //⽬的端⼝reg [PORT_W-1:0] src_port; //源端⼝reg [DATA_LEN_W-1:0] data_len; //发送数据长度reg [DATA_W-1:0] data_in; //输⼊数据wire gmii_clk; //以太⽹接⼝时钟wire gmii_en; //以太⽹使能wire [GMII_W-1:0] gmii_tx; //以太⽹数据wire tx_done; //发送完成wire data_vld; //数据有效标志信号eth_udp_tx_gmii eth_udp_tx_gmii(.clk (clk),.rst_n (rst_n),.tx_en (tx_en),.tx_done (tx_done),.dst_mac (dst_mac),.src_mac (src_mac),.dst_ip (dst_ip),.src_ip (src_ip),.dst_port (dst_port),.src_port (src_port),.gmii_clk (gmii_clk),.data_len (data_len),.data_vld (data_vld),.gmii_en (gmii_en),.gmii_tx (gmii_tx),.data_in (data_in));initial clk = 1;always #(CYCLE/2) clk = ~clk;initial beginrst_n = 1;#3;rst_n = 0;#(3*CYCLE)rst_n = 1;endinitial begindst_mac = 0;#(10*CYCLE)dst_mac = 48'hA1_6F_5B_12_01_F8;endinitial beginsrc_mac = 0;#(10*CYCLE)src_mac = 48'h00_0a_35_01_fe_c0;endinitial begindst_ip = 0;#(10*CYCLE)dst_ip = 32'hc0_a8_00_02;endinitial beginsrc_ip = 0;#(10*CYCLE)src_ip = 32'hc0_a8_00_03;endinitial begindst_port = 0;#(10*CYCLE)dst_port = 16'd8080;endinitial beginsrc_port = 0;#(10*CYCLE)src_port = 16'd1010;endinitial begindata_len = 0;#(10*CYCLE)data_len = 10;endreg [4-1:0] cnt_data_in;wire add_cnt_data_in;wire end_cnt_data_in;always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_data_in <= 0;endelse if(add_cnt_data_in)beginif(end_cnt_data_in)cnt_data_in <= 0;elsecnt_data_in <= cnt_data_in + 1;endendassign add_cnt_data_in = data_vld;assign end_cnt_data_in = add_cnt_data_in && cnt_data_in == 11 - 1; always @(*)begincase (cnt_data_in)0 :data_in = "X";1 :data_in = "I";2 :data_in = "L";3 :data_in = "I";4 :data_in = "N";5 :data_in = "X";6 :data_in = " ";7 :data_in = "F";8 :data_in = "P";9 :data_in = "G";10:data_in = "A";default: data_in = 8'h00;endcaseendinitial begin@(posedge tx_done)#200;$stop;endinitial begin#1;tx_en = 0;#(15*CYCLE)tx_en = 1;#(CYCLE)tx_en = 0;endendmodule六、板级验证module eth_udp_tx_gmii_test(clk ,rst_n ,led ,eth_rst_n,gmii_clk ,gmii_en ,gmii_tx);//延迟0.5msparameter DELAY_N = 625_00000;input clk;input rst_n;output led;output eth_rst_n;output gmii_clk ;output gmii_en ;output [8-1:0] gmii_tx;wire led;wire eth_rst_n;wire gmii_clk ;wire gmii_en ;wire [8-1:0] gmii_tx;wire locked;wire clk125M;wire data_vld;reg [8-1:0] data_in;reg tx_en;//PLL稳定后,开始⼯作assign eth_rst_n = locked;assign led = locked;pll pll(.clk_out1(clk125M),.resetn(rst_n),.locked(locked),.clk_in1(clk));eth_udp_tx_gmii eth_udp_tx_gmii(.clk (clk125M),.rst_n (eth_rst_n),.tx_en (tx_en),.tx_done (tx_done),.dst_mac (48'h10_1E_1F_12_11_18),.src_mac (48'h00_0a_35_01_fe_c0),.dst_ip (32'hc0_a8_00_03),.src_ip (32'hc0_a8_00_02),.dst_port (16'd6000),.src_port (16'd5000),.gmii_clk (gmii_clk),.data_len (23),.data_vld (data_vld),.gmii_en (gmii_en),.gmii_tx (gmii_tx),.data_in (data_in));reg [26-1:0] cnt_delay;wire add_cnt_delay;wire end_cnt_delay;always @(posedge clk125M or negedge rst_n)beginif(!rst_n)begincnt_delay <= 0;endelse if(add_cnt_delay)beginif(end_cnt_delay)cnt_delay <= 0;elsecnt_delay <= cnt_delay + 1;endendassign add_cnt_delay = eth_rst_n;assign end_cnt_delay = add_cnt_delay && cnt_delay == DELAY_N - 1 ; always @(posedge clk125M or negedge rst_n)beginif(!rst_n)tx_en <= 0;else if(end_cnt_delay)tx_en <= 1;elsetx_en <= 0;endreg [5-1:0] cnt_data_in;wire add_cnt_data_in;wire end_cnt_data_in;always @(posedge clk125M or negedge rst_n)beginif(!rst_n)begincnt_data_in <= 0;endelse if(add_cnt_data_in)beginif(end_cnt_data_in)cnt_data_in <= 0;elsecnt_data_in <= cnt_data_in + 1;endendassign add_cnt_data_in = data_vld;assign end_cnt_data_in = add_cnt_data_in && cnt_data_in == 23 - 1;always @(*)begincase (cnt_data_in)16'd0 : data_in = "H";16'd1 : data_in = "e";16'd2 : data_in = "l";16'd3 : data_in = "l";16'd4 : data_in = "o";16'd5 : data_in = ",";16'd6 : data_in = " ";16'd7 : data_in = "w";16'd8 : data_in = "e";16'd9 : data_in = "l";16'd10 : data_in = "c";16'd11 : data_in = "o";16'd12 : data_in = "m";16'd13 : data_in = "e";16'd14 : data_in = " ";16'd15 : data_in = "t";16'd16 : data_in = "o";16'd17 : data_in = " ";16'd18 : data_in = "F";16'd19 : data_in = "P";16'd20 : data_in = "G";16'd21 : data_in = "A";16'd22 : data_in = "!";default:data_in = 8'h00;endcaseendendmodule七、问题记录在板级验证过程中,抓取的包出现异常原因是FPGA开发板连接的物理层芯⽚引脚没有使⽤,但是FPGA的未⽤引脚是⾼电平和低电平影响了芯⽚的正常⼯作解决⽅法是:添加⼀条约束,将未⽤引脚置为⾼阻态set_property BITSTREAM.CONFIG.UNUSEDPIN Pullnone [current_design](IOB = "TRUE") output gmii_en; //以太⽹使能 (IOB = "TRUE") output [GMII_W-1:0] gmii_tx; //以太⽹数据。
以太网MAC协议
以太网M A C协议1位/字节顺序的表示方法位序严格地讲,以太网对于字节中位的解释是完全不敏感的.也就是说,以太网并不需要将一个字节看成是一个具有8个比特的数字值.但是为了使位序更容易描述以及防止不兼容,以太网和多数数据通信系统一样,传输一个字节的顺序是从最低有效位对应于20的数字位到最高有效位对应于27的数字位.另外习惯上在书写二进制数字时,最低值位写在最左面,而最高值位写在最右面.这种写法被称为“小端”形式或正规形式.一个字节可以写成两个十六进制数字,第一个数字最左边是最高位数字,第二个最右边是最低位数字.字节顺序如果所有有定义的数据值都是1字节长,则在介绍完位序后就可以停止了.但是很不幸事实并非如此,所以我们必须面对长于单个字节的域,这些域是以从左到右排列的,以连接符“-”分隔的字节串表示.每个字节包含两个十六进制数字.多字节域的各个字节按第一个到最后一个即从左到右的顺序发送,而每个字节采用小端位序传送.例如,6字节域:08-00-60-01-2C-4A将按以下顺序从左向右读串行地发送:0001 0000-0000 0000-0000 0110-1000 0000-0011 0100-0101 00102以太网地址地址是一个指明特定站或一组站的标识.以太网地址是6字节48比特长.图1说明了以太网地址格式.图1 以太网地址格式在目的地址中,地址的第1位表明该帧将要发送给单个站点还是一组站点.在源地址中,第1位必须为0.站地址要唯一确定是至关重要的,一个帧的目的地不能是模糊的.地址的唯一性可以是:●局限于本网络内.保证地址在某个特定LAN中是唯一的,但不能保证在相互连接的LAN中是唯一的.当使用局部唯一地址时,要求网络管理员对地址进行分配.●全局的.保证地址在所有的LAN中,在任何时间,以及对于所有的技术都是唯一的,这是一个强大的机制,因为:1使网络管理员不必为地址分配而烦恼;2使得站点可以在LAN之间移动,而不必重新分配地址;3可以实现数据链路网桥/交换机.全局唯一地址以块为单位进行分配,地址块由IEEE管理.一个组织从IEEE获得唯一的地址块称为OUI,并可用该地址块创建224个设备.那么保证该地址块中地址最后3个字节的唯一性就是制造商的责任.地址中的第2位指示该地址是全局唯一还是局部唯一.除了个别情况,历史上以太网一直使用全局唯一地址.3以太网数据帧格式图2 基本的以太网帧格式及传输次序图2显示了以太网MAC帧各个字段的大小和内容以及传输次序.该格式中每个字段的字节次序是先传输的字节在左,后传输的字节在右.在每个字节中的位次序正好相反,低位在左,高位在右.字节次序和位的次序通常用于FCS之外的所有字段.FCS将作为一个特殊的32位字段最高位在左,而不是4个单独的字节.前导码Preamble和帧起始定界符SFD前导码包含8个字节.前7个字节56位的职位0x55,而最后一个字节为帧起始定界符,其值为0xD5.结果前导码将成为一个由62个1和0间隔的串行比特流,最后2位是连续的1,表示数据链路层帧的开始.其作用就是提醒接收系统有帧的到来,以及使到来的帧与输入定时进行同步.在DIX以太网中,前导码被认为是物理层封装的一部分,而不是数据链路层的封装.地址字段每个MAC帧包含两个地址字段:目标地址Destination Address和源地址Source Address.目的地址标识了帧的目的地站点,源地址标识了发送帧的站.DA可以是单播地址单个目的地或组播地址组目的地,SA通常是单播地址即,第1位是0.长度/类型Length/Type长度/类型字段具有两种意义中的一种.如果这个字段的值小于1518,那么这个字段就是长度字段,并定义后面的数据字段的长度.但是如果这个字段的值大于1518,它就标识了在以太网上运行的客户端协议.数据Data数据字段包含46~1500字节.数据域封装了通过以太网传输的高层协议信息.由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度.高层协议要保证这个域至少包含46个字节.数据域长度的上限是任意的,但已经被设置为1500字节.帧校验序列FCS帧校验序列包含4个字节.FCS是从DA开始到数据域结束这部分的校验和.校验和的算法是32位的循环冗余校验法CRC.FCS部分后面将做详细介绍.4无效的MAC帧格式满足下面条件至少一个的MAC帧即无效:1帧长度和length/type字段中指定的长度不一致.如果length/type 中包含的是类型值,则认为帧长度与该字段值一致而不认为是无效帧.2不是整数字节的长度.3对接收到的帧进行CRC校验,发现错误.无效的MAC帧内容将不传送到LLC层或MAC控制子层.并将出现无效帧这一情况报告给网络管理.5 CSMA/CD协议为了通信的简便,以太网采用了两种重要的措施:第一,采用无连接的工作方式,在传输数据之前无需建立连接.第二,对发送的帧不进行编号,也不要求接收方发回确认帧.这样做的理由是不同于其他网络,局域网信道的质量非常好,因为信道质量而产生错误的概率非常小.这与一般数据链路层协议有些区别,如滑动窗口协议等.因此以太网提供的是服务是不可靠交付,即尽最大努力的交付.当目的站点收到有错误的数据帧时,就简单的丢弃该帧,除此之外什么也不做.上层协议会发现并处理,如上层协议发现丢失了一些数据,则过一段时间会把这些数据重新交给以太网,但以太网并不认为这是一个重传的帧,而是当作一个新的帧来处理.在半双工模式下,一个重要的问题就是如何协调总线上的各个站点,因为半双工模式同一时间只允许一个站点发送数据,否则各站点之间将会互相干扰.以太网采用的就是被称为CSMA/CD,即载波监听多路访问/冲突检测的协议.“多路访问”说明是总线型网络,许多站点以多点的方式共用一个总线.协议的实质是载波监听和冲突检测.“载波监听”就是指站点在发送数据前先检查总线上是否已有数据在传输,如有则暂缓发送,避免冲突.实质就是在冲突发生前尽量避免.“冲突检测”就是边发送边对媒体上的电压信号大小进行监测.当一个站点监测到电压摆动值超过一定的门限时,就可认为发生了冲突.冲突检测具体由物理层完成,数据链路层根据物理层的信号来判断是否有冲突.一旦发生了冲突,站点就要停止发送数据,然后根据协议进行重传.帧的发送数据发送模块主要实现以下两个功能:1数据的封装.2发送媒体管理.包括信道获取,冲突处理等.数据的封装发送模块按照以太网MAC帧格式,将待发送的数据与目的地址,源地址,类型/长度字段进行组合,并根据数据长度添加适当的填充字段以达到802. 3标准规定的最小帧长度,然后计算CRC校验作为FCS字段添加在帧尾,形成一个完整的MAC帧.在发送时,模块首先自动生成并发送前同步码和帧开始定界符,然后开始发送组装好的MAC帧.发送媒体管理等待机制Defference当一个待发送帧准备就绪时,按照工作模式的不同,发送模块采用2种规则.半双工模式:在半双工模式下,为了避免其他主机竞争媒体而产生的冲突,MAC通过监听载波信号来得知是否有其他站点在发送信息.该信号由物理层信号提供.如信道忙,MAC会暂缓发送自己的数据,直到信号变为空闲时,才开始发送.通常当信道变为空闲后,MAC并不立刻发送数据,而是继续等待一个帧间间隔,目的是给物理层以及其他站点的MAC处理上一个帧的时间.当一切准备就绪后,MAC就把帧交给物理层以二进制数据流的形式发送出去.全双工模式:而在全双工模式下,情况则大不相同.由于站点之间的连接为点到点,且可以同时进行发送和接收,所以就不存在冲突,也就不需要载波监听.待发送的帧只要等待一个帧间间隔就可以立刻发送,不需要考虑是否正在接收数据.冲突监测和处理:在半双工模式下,假如有多个站点企图同时发送数据,尽管每个发送站都有等待机制,然而还是很有可能会相互干扰.当2个站发送的信号叠加时,冲突就发生了.只有在半双工的模式下,才有可能会发生冲突.冲突说明当前有多个站企图使用共享信道.在全双工模式下,两个站点之间有着点到点的独享信道,不存在冲突.尽管物理层仍然会提供冲突信号,然而在全双工模式下,这个信号被忽略了.当某个站点开始发送数据时,仅在发送开始的一段时间内可能遭遇到冲突,这个时间段被称为冲突窗口collision window.这是由于信号在媒体上传播也需要时间,冲突窗口就是发送站点的信号传遍冲突域所需的时间.这是一个很重要的参数,以太网取传输512bit数据所用时间为争用期的长度.需要指出,以太网的端到端时延实际上是小于争用期的一半的,争用期被规定为传输512bit所用时间,不仅是考虑了以太网的端到端时延,而且还包括其它的许多因素,如可能存在的转发器所增加的时延,以及强化冲突的干扰信号的持续时间等.一般以太网的冲突多为发生在冲突窗口内.一旦冲突发生,物理层会监测到干扰信号,于是冲突监测信号被置 1.在半双工模式下,发送模块的接入管理模块响应这一信号,冲突处理机制开始执行.首先,该模块会发送一系列被称为冲突强化的信息,确保其他的站点也能得知冲突的发生,强化冲突过后,发送端终止当前发送,并等待一个随机的时间重新尝试发送.重新发送同样也有可能遭遇到冲突,最终的结果有两个,一是发送成功,二是达到了重传的数量上限,发送失败.在全双工模式下,发送站点忽略物理层的冲突信号,站点随时可以发送帧而不会有冲突发生,所以不需要强化冲突和重传机制.退避算法以及重传以太网使用截断二进制指数回退算法来解决冲突后的重发问题.截断二进制指数回退算法很简单,就是让发生冲突的站点在停止发送数据后,不是立刻重发,而是推迟一个随机的时间.这样就使得重发时再次发生冲突的概率减小.具体的算法是:1确定单位回退时间,通常是取冲突窗口的值,即传输512bit数据所需时间,称为时槽.2定义参数k,它等于重传次数,但不超过10,因此k=min n, 10.3取r满足0≤r <2 k.重传的时延就是r倍的时槽.4当重传达到16次仍不能成功时这表明同时打算发送数据的站点过多,导致连续发生冲突,则丢弃该帧,并向上层协议报告.使用以上的回退算法可使重传需要推迟的平均时间随重传次数增加而增加,这也被称为动态退避,有利于整个系统的稳定.帧的接收在接收端,站监视信道以获得帧到达的指示.当发现信道变成非空闲状态时,站开始从信道接收比特,并查找标志MAC帧起始的前导码preamble 和帧起始定界符SDF.站连续接收比特直到收到底层信道发出的帧结束指示.如果收到的帧长度比一个时隙的长度小,接收方的MAC将丢弃掉该帧.这是因为根据定义,有效帧的长度总是比时槽长它等于往返信道传播延时.因此这样的帧段肯定是冲突的产物.接收方根据此原理即可检测并丢弃冲突段,而不需要物理信道的冲突检测指示或无效CRC校验指示.如果收到的帧满足最小长度要求,则接着进行CRC校验.如果收到帧的CRC值不正确,就丢弃掉该帧.假设一个长度有效的帧具有有效的CRC值,接收方将检查目的地址以查看其是否是如下三者之一:1单播地址,帧的目的地址与接收站点的MAC地址相同2组播地址,上层协议定义一些特殊的地址作为多播地址,帧中的目的地址包含组播地址.3广播地址,目的地址为全1的地址.如果这些地址表明帧确实是以该站为目的地,MAC将把帧传递到其客户方,并返回到开头,重新等待新到达的帧.6以太网流量控制以太网流量控制需求以太网实际上包括所有其他LAN技术本质上是无连接的.这样就没有虚电路的概念,帧传输的可靠性也没有什么保证.帧无错传输的概率是很高的,但是无法保证绝对正确.在数据位出错、接收器的缓冲区不能满足或其他异常情况下,以太网接收器会简单地丢弃帧,而不给出任何提示.因此以太网接口的成本可以很低.无连接的系统比较容易实现,而在数据链路层中包括错误恢复和流量控制机制的系统,实现起来要复杂得多.LAN上数据位出错的可能性非常小.这个数字对于数据链路层已经低到可以忽略不计的地步,并且可以满足高层协议或应用的可靠数据传输需要.然而,帧缓冲不可使用产生的丢帧与位出错而丢帧结果是一样的.这两种情况下,帧都无法传送到接收方,数据链路层也不会收到出错指示.缓冲拥塞造成丢帧的可能性要远远大于位出错,特别是在高数据率下或网络互连设备如交换机中.最初的以太网没有提供任何流量控制机制,即保证发送者的发送速度不会比接收者可接收的速度更快的机制.当网络由通信端站组成时,这样的机制通常可由高层协议提供.随着透明网桥交换机的出现,发送者可能不知道帧的直接接收者是谁.也就是说,交换机不需要接入站的信息和参与,就可以代表它们接收和转发帧.如果没有能提供流量控制的协议,就可能由于交换机缓冲区拥塞而丢失过多的帧.半双工网络的后退压力当交换机端口连接到共享式LAN半双工网络时上,那么就可能通过改变MAC算法的行为,抢在将要到来的数据之前采取某种动作,来阻止发送者发送它们的数据.这就称为背压backpressure.在CSMA/CD LAN中,有两种方法可用来防止交换机的输入缓冲区溢出:1强行与将要到达的帧发生冲突.表面上看,这是一个合理的策略,冲突将使发送站重新传送该帧.这确实能像设想的那样防止缓冲区溢出,但不幸的是,存在一些不利影响:·发送站可能阻塞太多,导致系统实际吞吐量要比可用吞吐量低即,在信道上有不必要的空闲时间.这是因为冲突使站产生指数级增长的后退时间.在这段较长的时间里,交换机也同时把缓冲的数据转移到输出端口上,因此交换机的输入缓冲区很可能已经可用了.即使队列被清空了信道也将一直空闲,直到后退计时器超时.·若交换机输入缓冲区持续拥塞,站中的待发帧可能要经历连续16次的冲突与重发.如果16次发送都不成功,则按照MAC算法,站将丢弃该帧,并把该帧作为错误向站管理程序报告.对于高层协议而言,这与交换机丢失帧是一样的.这种情况和前面讨论的情况有一样的超时过长与性能降低问题,只不过是发生在持续拥塞的条件下.·管理计数器与统计资料除了表明有“过多的冲突错误”之外,还将显示很高的冲突次数.网络管理人员会认为该网络出现了某些严重的错误.“正常的”以太网不会有极高的冲突率或过多的冲突错误.后一种情况特别表明了网络系统出现了问题,需要重新进行配置.2使信道看起来处于忙状态.这种方法使用“拖延”策略而不是以太网MAC的冲突后退策略.只要站发现信道忙载波侦听判断,它将延迟传输.然而,它不增加后退延迟时间,而且该帧保留在队首,并且不管拖延的时间有多长,该帧都不会被丢弃.这种方法比强迫冲突法要优越.让共享式LAN接入站的载波侦听作出“信道忙”判断是比较容易的;只要把构造好的数据比特串放在连接交换机和站的以太网上就可以了.最简单的方法是,在交换机遭遇拥塞而想要阻塞供应负载时,生成一段前导码,把它放到需要的输入端口上.这段前导码的结尾绝对不能是帧起始定界符,这保证接收站不会把它解释为一个真正的帧.上述方法可以在任何必要的时候使用.这将完全消除强迫冲突并且没有严重的不利影响.唯一的问题是如果这段前导码的发送时间超过20ms,标准的10Mb/s收发器会作出“过长发送控制”jabber control的判断使它们的传输功能失效.而在100Mb/s和1000Mb/s系统中,就完全不会出现这样的问题.全双工网络中的显式流量控制在全双工以太网中,无论是伪载波侦听,还是强迫冲突算法都不能工作.全双工以太网接口不检测冲突,并且忽略可延迟传送的载波侦听.全双工网络需要显式的流量控制机制,使交换机能够阻塞处于拥塞状态的站.为了实现这个目标,开发了为全双工以太网流量控制的标准算法IEEE802. 3x.MAC控制......p57MAC控制层的结构MAC控制是数据链路层的一个子层.它是介于传统以太网MAC层和MAC 客户之间的可选功能.客户可以是网络层协议如IP或数据链路层内部实现转发功能的网桥交换机.如果MAC的客户不知道或不关心MAC控制提供的功能,则这个子层就“消失”了;就像这个MAC控制子层不存在一样,正常的发送和接收数据流会经过MAC与MAC控制子层的客户交互.对MAC控制敏感的客户如需要防止缓冲区溢出的交换机,可以利用这个子层来控制底层以太网MAC的操作.特别是,它可以请求全双工链路另一端的MAC停止进一步传送数据,因而防止将要发生的溢出.MAC控制的层次结构如下图所示:OSI参考模型层图 MAC控制在OSI参考模型中的位置一旦对MAC控制敏感的上层发出了控制请求,则MAC控制层会产生控制帧.这些控制帧将被送往发送模块发送;同样,接收模块接收到其他站点发送的控制帧并把它们交给MAC控制子层中的相应模块处理.因此在以太网上普遍的MAC客户数据帧中将会夹杂一些MAC控制帧.在MAC控制出现以前,在以太网上传送的每一个帧都是由上层协议提供,交由数据收发模块发送和接收,然而MAC控制帧与它们不同的是,控制帧的产生和处理都是在数据链路层内完成的.在接收到控制请求后,MAC控制层将控制帧插入到发送队列中发送,当接收到控制帧时,控制帧在MAC控制层内被解封,控制帧本身不交往上层协议处理.MAC控制帧格式MAC控制帧是正规、合法的MAC帧,拥有正常的MAC帧的所有字段,并且采用同样的算法发送.除了长度/类型字段外,MAC控制帧在结构上与数据帧完全一样.MAC控制帧的长度都恰好是以太网帧的最小长度——64字节,不包括前导码和帧起始定界符.MAC控制帧的格式如下图:图 MAC控制帧格式MAC控制帧区别于普通数据帧之处在于其长度/类型字段的值为0x8808,该值是专门为控制帧保留的.在MAC控制帧的数据字段中,前2个字节代表MAC控制操作码,用于表示接收到该控制帧的站点需要做何种操作,目前只定义了一种操作代码,即随后讨论的全双工中的暂停操作PAUSE,它的代码为0x0001.操作代码后面的域是该操作所需的参数.如果该参数不足44字节的长度,那么剩下的空间将用0来填充.PAUSE功能PAUSE功能用来在全双工以太网链路上实现流量控制.PAUSE操作是用MAC控制体系结构及帧格式实现的.目前该操作只工作于单个的全双工链路.也就是说,他不能用于共享式半双工LAN,也不能用于需要跨越交换机的链路.可用它来控制下列设备之间的数据帧流:(1)一对端站简单的两站网络.(2)一个交换机和一个端站.(3)交换机到交换机链路.在交换机或站中增加PAUSE功能,是为了当瞬时过载导致缓冲区溢出时防止不必要的帧丢弃.假设一个设备设计用来处理网络上恒稳状态的数据传输,并允许随时间变化有一定数量的过载.PAUSE功能可使这样的设备在负载增长暂时超过其设计水平时,不会发生丢帧现象.该设备通过向全双工链路的另一端发送PAUSE帧,来防止自己的内部缓冲区溢出.另一端设备在接收到PAUSE帧后,就停止发送数据帧.这将使第一个设备有时间来减少自己的缓冲拥塞它可以处理掉缓冲队列中发给自己的帧站操作,或者把帧转发到其他的端口交换机操作.PAUSE操作概述PAUSE操作实现了一种简单的“停-起”形式的流量控制.如果某个设备站或交换机想阻止帧到来,它可以发送一个带有参数的PAUSE帧,该参数指明了全双工中的另一方在开始继续发送数据前需要等待的时间.当另一个站接收到PAUSE帧后,将在指定的时间内停止发送数据.当这个时间超时后,该站将从暂停的位置继续发送数据帧.PAUSE帧能禁止发送数据帧,但它不影响MAC控制帧的发送例如,从另一个方向到来的PAUSE帧.已发送了PAUSE指令的站,可以再发送一个时间参数为0的PAUSE 帧取消剩余的暂停时间.即新收到的PAUSE帧将覆盖掉当前执行的PAUSE操作.类似地,该站也可以在前一个PAUSE时间还未结束时,发出另一个包含非零时间参数的帧延长暂停时间.因为PAUSE操作使用标准的以太网MAC,所以不能保证接收者一定能收到帧.PAUSE帧也可能出问题,而使接收者可能不知道曾发出了这样的帧.在设计PAUSE传输策略时必须考虑这样的问题.PAUSE帧的语义由于目前控制帧的内同只有暂停一种,MAC控制帧也被称为PAUSE帧,其包含的前导码、帧起始定界符和FCS字段的格式和含义与普通MAC数据帧一样,其余字段的格式虽然和数据帧没有区别,但是内容却有一些区别:1目的地址目的地址就是PAUSE帧所要发往站点的地址.它总是包含一个为PAUSE 帧保留的唯一的组播地址01-80-C2-00-00-01.既然PAUSE功能只用于全双工的链路上,而全双工链路的一个前提就是一个链路上只有2个站点,那么PAUSE帧的目的地无疑就是链路另一端的站点,下面将解释为什么PAUSE帧的目的地址需要指定,并且还是一个组播地址:·如果因为配置错误,PAUSE帧被不经意地发送到共享式LAN上,使用特定的组播地址可以保证接收并解释这些帧的是那些真正懂得PAUSE协议的站即,地址是专门为这个目的而保留的.·使用组播地址,就可以使PAUSE帧的发送者不必知道链路另一端的唯一地址.虽然高层协议很可能知道这个地址,但数据链路层没有必要知道.·这个精心挑选的组播地址是特殊保留地址组中的一个,所有标准的网桥和交换机都会阻塞吸收这组地址.交换机不会把发往这些地址的帧转发到其他的端口,这使得PAUSE帧只在与其相关单全双工链路上使用.2源地址源地址字段包含发出PAUSE帧站点的MAC地址.尽管控制帧只能有链路上的一个站点发出,设定源地址貌似没有必要,但是在帧中包含一个源地址还是有以下的用途:·可与其他所有类型以太网帧保持一致即所有以太网帧的源地址都包含了发送站的唯一地址。
简述以太网的介质访问控制方式的工作原理
简述以太网的介质访问控制方式的工作原理以太网的介质访问控制(MAC)方式是一种基于软件和硬件的技术,它可以控制计算机网络中节点对网络介质的访问。
MAC在许多现代局域网中被广泛使用,它是一种控制节点访问网络介质的机制,可以有效地抵抗网络中的干扰,允许网络中的节点在有限的带宽情况下进行特定的任务。
MAC方式的定义基于局域网中的服务范围,它是指网络中节点间通信的一种协议,它允许节点访问网络介质,让每个节点都能够顺利传输数据。
MAC是一种特殊的应用层协议,它由应用层协议定义,直接运作在物理层在介质访问控制的机制上,以实现数据的可靠传输。
MAC方式的工作原理是在网络中的每个节点分配一个唯一的MAC地址,这个地址可以用来标识终端设备的身份,并在网络上传输数据,可以用来表示某一设备的识别标识。
MAC方式允许每个节点在网络中发送数据,首先发送方需要在网络中广播一条源MAC地址信息,通知接收方让接收方准备接受数据,并确定发送方的位置,这个过程就是MAC方式的工作原理。
在发送数据之前,需要确定网络介质是否空闲,即无其他节点正在传输数据。
根据CSMA/CD(载波侦听多路径系统/检测冲突)的协议,使用的方法是源节点从网络介质中接收信号,如果介质发出信号,表示介质中有其他节点正在发送数据,此时源节点需要停止发送数据,等待信道空闲,当信道空闲时,源节点才能发送数据。
源节点发送帧信息时,帧中还会包括一组序列号,此序列号可以用来标识此次发送数据的位置,以便接收方确定收到的数据帧的次序。
此外,每个帧信息中还有一个CRC校验和,可以用来检测数据传输时的错误,如果发现错误,接收方就会发送一个错误报文进行错误确认,然后要求发送方再次发送数据,以确保数据在网络中传输的正确性。
以太网的MAC方式可以有效地抑制网络干扰,保证网络中各节点访问网络介质的有序性,这样就可以实现数据可靠传输,同时还可以保证网络中的节点在有限的带宽情况下完成特定的任务。
macsec协议
macsec协议简介macsec是一种用于以太网链路层安全的协议。
它提供了数据加密、完整性保护和源认证等安全功能,以保护以太网链路上的数据通信。
macsec协议可在以太网物理层之上实现,对上层协议透明,因此在使用macsec协议的网络中,上层协议无需做任何修改。
macsec的工作原理macsec协议使用两个实体之间的密钥来加密和解密数据。
这两个实体分别是MACsec密钥交互协议(MKA)和基于端口的网络访问控制(PNAC)。
MKA负责协商和交换密钥,而PNAC负责应用密钥并管理密钥的分发和更新。
macsec协议通过在以太网帧的帧头和帧尾中插入MACsec头部和尾部来实现数据的加密和认证。
MACsec头部中包含了加密相关的信息,如密钥版本号、加密算法等。
MACsec尾部中包含了完整性校验码,用于验证数据的完整性。
在数据传输过程中,发送方根据加密算法对数据进行加密,并计算完整性校验码。
接收方通过解密数据,并验证完整性校验码来还原原始数据。
如果完整性校验码不匹配,接收方将丢弃该数据包。
macsec的应用场景macsec协议广泛应用于对网络数据安全要求较高的领域,如金融、政府和军事等。
以下是一些macsec协议的典型应用场景:1. 保护机密数据传输macsec协议可以保护敏感数据的传输,确保数据不会被窃听或篡改。
例如,在金融领域,macsec协议可以保护交易数据的安全传输,防止黑客攻击或数据泄露。
2. 防止ARP欺骗攻击ARP欺骗攻击是一种常见的网络攻击手段,攻击者通过伪造ARP响应包来欺骗网络设备。
macsec协议可以在以太网链路层提供源认证的功能,有效防止ARP 欺骗攻击的发生。
3. 保护网络基础设施的安全macsec协议可以保护网络基础设施的安全,防止未经授权的设备接入网络。
通过对网络设备进行身份验证,macsec协议可以确保网络只允许合法设备的接入。
4. 提供数据完整性保护macsec协议通过完整性校验码的验证,可以保护数据的完整性。
以太网MAC层协议实验板开发
板 的 目的 , 对 MAC层 实 验 的 所 需 设 备 组 成 和功 能 、 并 MAC层 实 验 板 结 构 组 成 和 主 要模 块 作 用 进 行 了 简 要 论
述 。它 的应 用 提 高 了学 生 对 网络 理论 知识 的 应 用 能 力 和 实 际 动手 能力 。 关键词 : 验板 ; 实 MAC层 协 议 格 式 ;单 片 机
Ab ta t sr c :St de s’r a pe ato iiy nd e u nt e lo r in ablt a xpe inc c u u a i r otad qu t e a e e pe i e a re e a c m l ton a e n e a e b c us x rm nt l e ui e tlke “ he t’i d l pp id an he e o et xp rm e tboa d ofEt e n t S M AC a rpr o o q pm n i c s’ s wi e y a le d t r f r hee e i n r h r e ’ lye ot c l i veo d T he f a e o m a aon w ih un ton of is e c fed nd pur s o v l p n e s de lpe r m f r t l g t f c i t a h il a po e f de e o i g xpe i e rm nt b r b t M AC a e ot c l s dic s e . N e de e uim e om p oa d a ou l y r pr o o i s u s d e d q p nt c one t a ela t ei un ton a ou n s sw l s h rf ci b t M AC a e S e e i e r i fy it od ed S r t r lc l y r’ xp rm nta e brel n r uc . t uc u a ompon nta outM AC a e S e pe i e t lb r e b l y r’ x rm n a oa d a ela herprm a y m ode ’ unc in i ify e ou sw l s t i i r lSf to s bre l xp nde s we 1 St de s a iiis f rap i g n t o k d a l. u nt ’ b lte o pln e w r
MACsec网络数据加密协议概述
MACsec网络数据加密协议概述网络安全一直是我们在数字化时代面临的重要挑战之一。
为了保护传输过程中的数据安全,现代网络通信系统使用了不同的加密协议。
其中一个被广泛应用的协议是MACsec(Media Access Control Security)网络数据加密协议。
本文将对MACsec协议进行概述,并介绍其工作原理和在网络中的应用。
1. MACsec协议简介MACsec协议是一种用于以太网链路层加密的协议,通过在链路层对数据进行加密和校验,保护数据在物理层和数据链路层之间的传输安全。
MACsec协议基于IEEE 802.1AE标准,并提供了安全接入控制和数据完整性保护。
2. MACsec协议工作原理MACsec协议通过三种关键机制来保证网络数据的安全性:身份认证、密钥协商和数据加密。
身份认证:在建立链路连接时,MACsec协议会进行身份认证以确保通信的两端都是合法的。
这个过程基于双方事先共享的密钥,通常使用了基于密钥的消息认证码(MAC)算法。
密钥协商:在链路建立阶段,通信双方需要协商生成会话密钥,用来对数据进行加密和解密。
密钥协商过程一般采用密钥交换协议,例如Diffie-Hellman密钥交换算法。
数据加密:使用会话密钥对待传输的数据进行加密,确保数据在传输过程中不会被窃取或篡改。
3. MACsec协议在网络中的应用MACsec协议广泛应用于需要对敏感数据进行保护的网络环境中,特别是在金融、医疗和政府等领域。
它可以应用于各种物理链路类型,包括以太网、SONET/SDH和无线局域网等。
在企业网络中,MACsec协议可用于连接交换机和路由器之间的链路加密,确保数据在传输过程中不被黑客或未经授权的用户访问。
在数据中心网络中,MACsec协议可以提供对服务器之间通信的保护,防止内部攻击和数据泄露。
在无线网络中,MACsec协议可以用于提高Wi-Fi网络的安全性,防止Wi-Fi数据的窃取和篡改,尤其对于需要使用公共无线网络的用户来说,MACsec协议可以提供额外的保护。
计算机学科专业基础综合计算机网络-数据链路层(四)
计算机学科专业基础综合计算机网络-数据链路层(四)(总分:66.00,做题时间:90分钟)一、{{B}}单项选择题{{/B}}(总题数:51,分数:51.00)1.以太网的MAC协议提供的是______。
∙ A.无连接的不可靠的服务∙ B.无连接的可靠的服务∙ C.有连接的可靠的服务∙ D.有连接的不可靠的服务(分数:1.00)A. √B.C.D.解析:考虑到局域网信道质量好,以太网采取了两项重要的措施以使通信更简便:①采用无连接的工作方式;②不对发送的数据帧进行编号,也不要求对方发回确认。
因此,以太网提供的服务是不可靠的服务,即尽最大努力的交付。
差错的纠正由高层完成。
2.以下关于以太网的说法中,正确的是______。
∙ A.以太网的物理拓扑是总线型结构∙ B.以太网提供有确认的无连接服务∙ C.以太网参考模型一般只包括物理层和数据链路层∙ D.以太网必须使用CSMA/CD协议(分数:1.00)A.B.C. √D.解析:以太网的逻辑拓扑是总线型结构,物理拓扑是星形或拓展星形结构,因此A错误。
以太网采用两项措施简化通信:采用无连接的工作方式;不对发送的数据帧编号,也不要求接收方发送确认,因此B错误。
从相关层次看,局域网仅工作在OSI的物理层和数据链路层,而广域网工作在OSI的下三层,而以太网是局域网的一种实现形式,因此C正确。
只有当以太网工作于半双工方式下才需要CSMA/CD协议来应对冲突问题,速度小于或等于1Gb/s的以太网可以工作于半双工或全双工,而速度大于或等于10Gb/s的以太网只工作在全双工方式下,因此没有争用问题,不使用CSMA/CD协议,因此D错误。
3.下列以太网中,采用双绞线作为传输介质的是______。
∙ A.10BASE-2∙ B.10BASE-5∙ C.10BASE-T∙ D.10BASE-F(分数:1.00)A.B.C. √D.解析:这里的BASE前面的数字代表数据率,单位为Mb/s;“BASE”指介质上的信号为基带信号(即基带传输,采用曼彻斯特编码);后面的5或2表示每段电缆的最长长度为500m或200m(实际为185m),T表示双绞线,F表示光纤。
以太网,mac协议提供的是
竭诚为您提供优质文档/双击可除以太网,mac协议提供的是篇一:以太网基于alteraFpga的千兆以太网实现方案在系统设备不断向小型化、集成化、网络化发展的今天,嵌入式开发成为新技术发展的最前沿,改变着系统的整体结构。
Fpga由于其自身特点,成为嵌入式开发的最佳平台。
altera公司结合其最新一代高端器件推出了全新的嵌入式开发系统,能够实现软核niosii32位处理器为核心的嵌入式开发系统。
在cvcloneii中,a1tera集成了完整的千兆以太网硬核,硬核包括mac模块以及可选择的物理层pcs模块和pma模块,其中mac模块支持l0/100/1000mb/s。
altera的sopcbuilder工具提供快速搭建sopc系统的能力,这种架构可以包含一个或多个cpu,提供存储器接口,外围设备和系统互连逻辑的复杂系统。
2千兆以太网技术简介以太网技术是当今应用广泛的网络技术,千兆以太网技术继承了以往以太网技术的许多优点,同时又具有诸多新特性,例如传输介质包括光纤和铜缆,使用8b/10b的编解码方案,采用载波扩展和分组突发技术等。
正是因为具有良好的继承性和许多优秀的新特性,千兆以太网已经成为目前局域网的主流解决方案。
千兆以太网利用原以太网标准所规定的全部技术规范,其中包括csma/cd协议、以太网帧、全双工、流量控制以及ieee802.3标准中所定义的管理对象。
千兆以太网的关键技术是千兆以太网的mac层和以太网接口的实现。
随着多媒体应用的普及,干兆以太网必然得到广泛应用。
3altera的千兆以太网解决方案3.1ip核的支持altera提供了可参数化的千兆以太网megacore解决方案。
该方案可在altera的arriagx,cycloneii,cycloneiii 系列Fpga上工作,可配置使其包含mac,pcs,pma模块中的一种或多种,配置选择及相应的接口标准。
千兆以太网ip核的功能描述如下:(1)支持ieee802.3标准。
以太网协议详情报文格式
以太网协议详情报文格式1.以太网帧首部(Ethernet Header):- 目的MAC地址(Destination MAC Address):6个字节,表示接收方的物理地址。
- 源MAC地址(Source MAC Address):6个字节,表示发送方的物理地址。
- 类型或长度(Type or Length):2个字节,表示数据的类型或长度。
2.有效载荷数据(Payload Data):- 数据(Data):46-1500个字节,表示待传输的数据。
3.填充(Padding):- 填充(Padding):0-46个字节,用于填充以太网帧的长度。
4.帧校验序列(Frame Check Sequence):-帧校验序列(FCS):4个字节,用于校验以太网帧的完整性。
在以太网协议中,各个字段的含义如下:1.目的MAC地址:表示帧的接收方的物理地址。
每个网络接口都有一个唯一的MAC地址。
2.源MAC地址:表示帧的发送方的物理地址。
同样,每个网络接口都有一个唯一的MAC地址。
3.类型或长度:标识有效载荷数据的类型或长度。
当该字段的值小于等于1500时,表示长度;当值大于1500时,表示数据的类型。
4.数据:是待传输的数据,可以是其他高层协议的报文,如IP数据报等。
5.填充:为了使帧达到最小长度而填充的虚拟数据。
以太网帧要求长度至少为64个字节,如果数据字段长度不足,则需要填充。
6.帧校验序列:用于检测帧中是否发生错误。
发送方在发送帧时,通过计算帧中除了FCS字段之外所有字段的CRC校验值,并将该值存储在FCS字段中。
接收方在接收到帧时,同样通过计算帧中的CRC校验值,并与FCS字段中的值进行比较,以确定帧是否被损坏。
以太网协议使用的是分组式交换技术,即将数据拆分为一系列的帧进行传输。
每个帧都独立传输且具有不同的目的MAC地址,在传输过程中可以经过多个设备,如交换机、路由器等。
每个设备根据帧中的目的MAC地址进行决策,以将帧转发到正确的接口。
MAC介绍
MAC(Media access control)是介质访问控制,也为媒体访问控制。
以太网协议是由一组IEEE 802.3标准定义的局域网协议集。
在以太网标准中,有两种操作模式:半双工和全双工。
半双工模式中,数据是通过在共享介质上采用载波监听多路访问/冲突检测(CSMA/CD)协议实现传输的。
它的主要缺点在于有效性和距离限制,链路距离受最小MAC帧大小的限制。
该限制极大地降低了其高速传输的有效性。
因此,引入了载波扩展技术来确保千兆位以太网中MAC帧的最小长度为512字节,从而达到了合理的链路距离要求。
在所有IEEE 802协议中,OSI数据链路层被划分为两个IEEE 802子层,即:媒体访问控制(MAC)子层和MAC客户端子层。
MAC子层有以下几个基本职能。
(1)数据封装、(2)发送媒体访问管理、(3)接收媒体访问管理、(4)接收数据解封。
Preamble(Pre):前导码字段,7字节。
Pre字段中1和0交互使用,接收站通过该字段知道导入帧,并且该字段提供了同步化接收物理层帧接收部分和导入比特流的方法。
Pre字段的每个字节的比特模式为“10101010”,用于实现收发双方的时钟同步。
Start-of-Frame Delimiter(SFD):帧起始定界符字段,1字节。
字段中1和0交互使用,结尾是两个连续的1,表示下一位是利用目的地址的重复使用字节的重复使用位。
SFD占1个字节,其比特模式为“10101011”,它紧跟在前导码后,用于指示一帧的开始。
前导码的作用是使接收端能根据“1”、“0”交变的比特模式迅速实现比特同步,当检测到连续两位“1”(即读到帧起始定界符字段SFD最末两位)时,便将后续的信息递交给MAC子层。
Destination Address(DA)/Source Addresses(SA):目的地址/源地址字段,6字节。
地址字段包括目的地址字段DA和源地址字段SA。
目的地址字段占2个或6个字节,用于标识接收站点的地址,它可以是单个的地址,也可以是组地址或广播地址。
网卡协议书
网卡协议书网络协议是计算机网络中一种规定通信规则和数据传输格式的约定。
网卡协议是指在网络通信中,用于数据传输控制和数据包组织的一套规范。
下面我将以1000字左右为您介绍一些常见的网卡协议。
1. 以太网协议:以太网协议是最常见的局域网协议,也是互联网的基础协议之一。
它规定了帧的格式、MAC地址分配、冲突检测等重要内容。
以太网协议使用MAC地址来唯一识别每一个网络接口,而帧的格式则是为了在网络中传输数据提供了统一的规则。
2. ARP协议:地址解析协议(ARP)是一种用于将IP地址解析为物理MAC 地址的协议。
当主机需要发送数据包给另一个主机时,需要知道目标主机的MAC地址。
通过ARP协议,发送方主机可以向本地局域网上的其他主机发送ARP请求,以获取目标主机的MAC地址。
3. ICMP协议:互联网控制报文协议(ICMP)是用于在IP网络上传递控制信息的协议。
它用于发送网络诊断和错误报告,如ping命令就是利用ICMP协议来实现数据包的往返延迟测量。
4. TCP协议:传输控制协议(TCP)是一种面向连接的协议,它提供了可靠的数据传输机制。
通过TCP协议,数据可以分成多个数据包进行传输,并且在接收端进行组装,确保数据的完整性和可靠性。
5. UDP协议:用户数据报协议(UDP)是一种无连接的协议,它提供了一种简单的数据传输机制。
通过UDP协议,数据可以直接封装在数据包中进行传输,没有建立和维护连接的过程,因此传输速度更快。
6. DHCP协议:动态主机配置协议(DHCP)是一种用于局域网上自动分配IP 地址的协议。
通过DHCP协议,主机可以自动获取IP地址、子网掩码、网关和DNS等网络配置信息,避免了手动配置IP 地址的繁琐过程。
7. DNS协议:域名系统(DNS)是一种用于将域名解析为IP地址的协议。
通过DNS协议,用户可以通过域名访问网络资源,而无需记住对应的IP地址。
DNS协议使用层次化的域名结构来组织和管理域名,通过查询DNS服务器获得域名对应的IP地址。
MACsec扩展协议以太网链路保护
MACsec扩展协议以太网链路保护以太网作为最常见的局域网技术,广泛应用于组织与企业的数据通信中。
然而,传统以太网链路存在被攻击与窃听的风险,这促使了网络安全领域的研究人员提出了一系列的安全扩展协议,其中之一就是MACsec(Media Access Control Security)扩展协议。
MACsec扩展协议为以太网链路提供了更高的保护机制,本文将深入探讨MACsec扩展协议以太网链路保护的原理、应用场景以及其它相关方面。
一、MACsec扩展协议的原理MACsec扩展协议通过在以太网链路层上提供数据的完整性验证与加密功能,有效地防止了链路中的数据包被篡改与窃取。
其原理如下:1. 安全会话建立:MACsec使用密钥交换协议来建立安全会话,在会话建立过程中协商双方使用的密钥和算法等安全参数。
密钥的安全交换保证了后续通信的机密性和完整性。
2. 数据的完整性保护:MACsec通过在数据包中添加完整性校验码(ICV)来保护数据的完整性。
接收端使用同样的密钥和算法对接收到的数据包进行解密,并验证ICV的正确性,以判断数据是否被篡改。
3. 数据的机密性保护:MACsec使用高强度的加密算法对数据进行加密,确保在数据传输过程中的机密性。
发送端使用事先约定的密钥对要发送的数据进行加密,接收端使用同样的密钥对接收到的数据进行解密。
二、MACsec扩展协议的应用场景MACsec扩展协议适用于对数据保密性和完整性要求较高的以太网链路。
以下是MACsec扩展协议的几个主要应用场景:1. 企业数据中心:在企业内部数据中心的以太网链路中使用MACsec,可以有效地防止数据泄露和篡改。
特别是在虚拟化环境下,不同虚拟机之间的数据传输更需要保护。
2. 金融机构:金融行业对数据的安全性有着极高的要求,MACsec可在各个金融机构的网络链路上使用,确保数据在传输过程中不被篡改,防止机密信息泄露。
3. 政府与军事通信:政府和军事领域的通信往往涉及到国家安全,使用MACsec可以提供更高的保护级别,确保数据的机密性和完整性。
macsec协议
macsec协议MACsec协议。
MACsec(Media Access Control Security)是一种用于以太网链路的数据链路层加密协议,它提供了数据完整性、数据保密性和数据源认证。
MACsec协议通过在数据链路层上提供加密和完整性保护,使得网络通信更加安全可靠。
下面将介绍MACsec协议的工作原理、优势和应用场景。
MACsec协议通过在以太网帧上应用加密算法和完整性校验,来保护数据的安全性。
在发送端,MACsec会对整个以太网帧进行加密,并附加完整性校验信息;在接收端,MACsec会对接收到的以太网帧进行解密和完整性校验,以确保数据的完整性和安全性。
这种在数据链路层上进行加密和完整性保护的方式,能够有效地防止数据被篡改和窃听,提高了网络通信的安全性。
MACsec协议在网络通信中具有多重优势。
首先,它能够提供对等端到端的数据链路层加密,无需依赖网络层或传输层的安全机制,从而保护了整个通信链路的数据安全。
其次,MACsec协议对于网络中的所有数据流都能够提供安全保护,无论是用户数据流、控制数据流还是管理数据流,都能够得到保护。
此外,MACsec协议还支持密钥协商和密钥管理机制,能够灵活地适应不同网络环境下的安全需求。
MACsec协议在实际网络中有着广泛的应用场景。
首先,它常用于对网络中的敏感数据进行加密保护,如金融机构、政府部门等对于用户数据的保护。
其次,MACsec协议也常用于对于网络中的管理数据进行安全保护,以防止网络管理信息被篡改或窃听。
此外,MACsec协议还能够应用于对于网络中的控制数据进行加密,确保网络控制信息的安全可靠。
总之,MACsec协议作为一种数据链路层的安全协议,能够在以太网链路上提供数据加密、完整性保护和数据源认证,从而提高网络通信的安全性。
它具有多重优势,能够适应不同的网络环境,并在实际网络中有着广泛的应用场景。
随着网络安全需求的不断增加,MACsec协议将会在网络通信中发挥越来越重要的作用。
3.3以太网的MAC子层协议
3.3 以太网的MAC子层协议1、以太网的MAC子层功能以太网的MAC子层有两个主要功能:(1)数据封装和解封发送端进行数据封装,包括将LLC子层送下来的LLC帧加上首部和尾部构成MAC帧,编址和校验码的生成等。
接收端进行数据解封,包括地址识别、帧校验码的检验和帧拆卸,即去掉MAC 帧的首部和尾部,而将LLC帧传送给LLC子层。
(2)介质访问管理发送介质访问管理包括:①载波监听;②冲突的检测和强化;③冲突退避和重发。
接收介质访问管理负责检测到达的帧是否有错(这里可能出现两种错误:一个是帧的长度大于规定的帧最大长度;二是帧的长度不是8bit的整倍数)过滤冲突的信号(凡是其长度小于允许的最小帧长度的帧,都认为是冲突的信号而予以过滤)。
2、MAC地址(硬件地址)IEEE 802标准为局域网规定了一种48bit的全球地址,即MAC地址(MAC帧的地址),它是指局域网上的每一台计算机所插入的网卡上固化在ROM中的地址,所以也叫硬件地址或物理地址。
MAC地址的前3个字节由IEEE的注册管理委员会RAC负责分配,凡是生产局域网网卡的厂家都必须向IEEE的RAC购买由这三个字节构成的一个号(即地址块)这个号的正式名称是机构唯一标识符OUI。
地址字段的后3个字节由厂家自行指派,称为扩展标识符。
一个地址块可生成224个不同的地址,用这种方式得到的48bit地址称为MAC-48或EUI-48。
3、MAC帧格式以太网的两个标准●IEEE802.3标准●DIX EthernetV2——没有LLC子层(TCP/IP体系经常使用)以太网MAC帧格式有两种标准:IEEE的802.3标准和DIX Ethernet V2标准。
(1)IEEE 802.3标准规定的MAC子层帧结构图3-11 IEEE 802.3标准规定的MAC子层帧结构①地址字段地址字段包括目的MAC地址字段和源MAC地址字段,都是6个字节。
②数据长度字段数据长度字段是2字节。
计算机网络中的物理层协议
计算机网络中的物理层协议计算机网络的物理层是网络通信的最底层,负责将数据以电信号的形式从发送方传输到接收方。
为了确保数据的可靠传输和通信的稳定性,物理层需要使用一系列的协议。
本文将介绍几种常见的物理层协议,并分析其特点及在计算机网络中的应用。
一、以太网协议以太网协议是最常用的局域网协议之一,它定义了计算机网络中的物理介质、数据帧格式、帧的传输速率等规范。
以太网协议使用双绞线、光纤等传输介质,以及CSMA/CD(载波监听多路访问/冲突检测)的介质访问控制方法。
其帧格式由目的MAC地址、源MAC地址、数据内容和校验字段组成,通过MAC地址的比对来实现数据的传输。
以太网协议广泛应用于局域网,具有传输速度快、成本低、安装和维护简便等优点。
然而,在大规模网络中,以太网的广播特性容易引发网络拥塞和冲突问题,因此在实际应用中需要采用交换机等设备来优化网络性能。
二、无线局域网协议无线局域网协议是一种基于无线电波传输的物理层协议,它使用无线传输介质,如无线电、红外线等,来实现计算机之间的通信。
常见的无线局域网协议有Wi-Fi(无线保真)和蓝牙协议。
Wi-Fi协议广泛应用于宽带无线接入和无线局域网,其使用2.4GHz或5GHz频段的无线电波进行数据传输。
Wi-Fi协议具有高速传输、覆盖范围广的特点,因此在家庭、办公室等场景中得到了广泛应用。
蓝牙协议主要用于短距离无线通信,如手机与耳机、键盘、鼠标等设备之间的连接。
蓝牙协议通过2.4GHz频段的无线电波进行通信,具有低功耗、低成本、易于使用等特点,被广泛应用于个人消费电子产品。
三、光纤通信协议光纤通信协议是一种基于光信号传输的物理层协议,它使用光纤作为传输介质,通过调制光波来传输数据。
光纤通信协议的典型代表是SONET(同步光网络)和光纤以太网协议。
SONET是一种面向长距离、高速传输的光纤通信协议,其传输速率可达到数十Gbps甚至更高。
由于其具有高可靠性、高容量等特点,SONET广泛应用于长距离通信网络中。
以太网采用的通信协议
竭诚为您提供优质文档/双击可除以太网采用的通信协议篇一:以太网基础协议802.3介绍802.3802.3通常指以太网。
一种网络协议。
描述物理层和数据链路层的mac子层的实现方法,在多种物理媒体上以多种速率采用csma/cd访问方式,对于快速以太网该标准说明的实现方法有所扩展。
dixethernetV2标准与ieee的802.3标准只有很小的差别,因此可以将802.3局域网简称为“以太网”。
严格说来,“以太网”应当是指符合dixethernetV2标准的局域网。
早期的ieee802.3描述的物理媒体类型包括:10base2、10base5、10baseF、10baset和10broad36等;快速以太网的物理媒体类型包括:100baset、100baset4和100basex等。
为了使数据链路层能更好地适应多种局域网标准,802委员会就将局域网的数据链路层拆成两个子层:逻辑链路控制llc(logicallinkcontrol)子层媒体接入控制mac(mediumaccesscontrol)子层。
与接入到传输媒体有关的内容都放在mac子层,而llc 子层则与传输媒体无关,不管采用何种协议的局域网对llc 子层来说都是透明的。
由于tcp/ip体系经常使用的局域网是dixethernetV2而不是802.3标准中的几种局域网,因此现在802委员会制定的逻辑链路控制子层llc(即802.2标准)的作用已经不大了。
很多厂商生产的网卡上就仅装有mac协议而没有llc协议。
mac子层的数据封装所包括的主要内容有:数据封装分为发送数据封装和接收数据封装两部分,包括成帧、编制和差错检测等功能。
数据封装的过程:当llc子层请求发送数据帧时,发送数据封装部分开始按mac子层的帧格式组帧:(1)将一个前导码p和一个帧起始定界符sFd附加到帧头部分;(2)填上目的地址、源地址、计算出llc数据帧的字节数并填入长度字段len;(3)必要时将填充字符pad附加到llc数据帧后;(4)求出cRc校验码附加到帧校验码序列Fcs中;(5)将完成封装后的mac帧递交miac子层的发送介质访问管理部分以供发送;接收数据解封部分主要用于校验帧的目的地址字段,以确定本站是否应该接受该帧,如地址符合,则将其送到llc子层,并进行差错校验。
MACsec协议以太网链路保护
MACsec协议以太网链路保护随着网络技术的迅速发展,信息的安全性需求变得越来越重要。
MACsec(Media Access Control Security)协议作为一种数据链路层的安全保护机制,为以太网链路提供了有效的保护措施。
本文将介绍MACsec协议的原理和应用,以及该协议在以太网链路保护中的重要性。
一、MACsec协议的原理MACsec协议基于IEEE 802.1AE标准,并在此基础上进行了一些扩展。
它通过在以太网帧中添加安全标签(Secure Channel Identifier,SCI),对数据进行加密和身份验证,确保数据在传输过程中的安全性。
MACsec协议使用了高级加密标准(Advanced Encryption Standard,AES)算法,它提供了对数据进行机密性和完整性保护的能力。
MACsec还使用了密钥交换协议,确保通信双方共享相同的密钥,从而保证数据的机密性。
二、MACsec协议的应用MACsec协议主要应用于企业网络、数据中心和运营商网络等对数据安全要求较高的环境中。
它可以提供以下几个方面的安全保护:1. 数据机密性:MACsec协议通过加密以太网帧的有效载荷,保护数据在传输过程中不被未经授权的人员访问和篡改。
2. 数据完整性:MACsec协议通过对以太网帧进行完整性校验,能够检测出数据在传输过程中是否被篡改,从而确保数据的完整性。
3. 身份验证:MACsec协议使用了基于IEEE 802.1X的身份验证机制,能够识别通信双方的身份,并确保通信双方的身份是合法的。
三、MACsec协议在以太网链路保护中的重要性MACsec协议在保护以太网链路安全方面发挥着重要的作用。
它可以有效地防止以下几种攻击:1. 窃听攻击:MACsec协议通过对数据进行加密,防止未经授权的人员窃听网络中的数据,确保数据的机密性。
2. 重放攻击:MACsec协议在每个以太网帧上添加了序列号,防止攻击者通过重放已经捕获的帧来进行攻击,确保数据的完整性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以太网MAC协议1位/字节顺序的表示方法1.1位序严格地讲,以太网对于字节中位的解释是完全不敏感的。
也就是说,以太网并不需要将一个字节看成是一个具有8个比特的数字值。
但是为了使位序更容易描述以及防止不兼容,以太网和多数数据通信系统一样,传输一个字节的顺序是从最低有效位(对应于20的数字位)到最高有效位(对应于27的数字位)。
另外习惯上在书写二进制数字时,最低值位写在最左面,而最高值位写在最右面。
这种写法被称为“小端”形式或正规形式。
一个字节可以写成两个十六进制数字,第一个数字(最左边)是最高位数字,第二个(最右边)是最低位数字。
1.2字节顺序如果所有有定义的数据值都是1字节长,则在介绍完位序后就可以停止了。
但是很不幸事实并非如此,所以我们必须面对长于单个字节的域,这些域是以从左到右排列的,以连接符“-”分隔的字节串表示。
每个字节包含两个十六进制数字。
多字节域的各个字节按第一个到最后一个(即从左到右)的顺序发送,而每个字节采用小端位序传送。
例如,6字节域:08-00-60-01-2C-4A将按以下顺序(从左向右读)串行地发送:0001 0000-0000 0000-0000 0110-1000 0000-0011 0100-0101 00102以太网地址地址是一个指明特定站或一组站的标识。
以太网地址是6字节(48比特)长。
图1说明了以太网地址格式。
图1 以太网地址格式在目的地址中,地址的第1位表明该帧将要发送给单个站点还是一组站点。
在源地址中,第1位必须为0。
站地址要唯一确定是至关重要的,一个帧的目的地不能是模糊的。
地址的唯一性可以是:●局限于本网络内。
保证地址在某个特定LAN中是唯一的,但不能保证在相互连接的LAN中是唯一的。
当使用局部唯一地址时,要求网络管理员对地址进行分配。
●全局的。
保证地址在所有的LAN中,在任何时间,以及对于所有的技术都是唯一的,这是一个强大的机制,因为:(1)使网络管理员不必为地址分配而烦恼;(2)使得站点可以在LAN之间移动,而不必重新分配地址;(3)可以实现数据链路网桥/交换机。
全局唯一地址以块为单位进行分配,地址块由IEEE管理。
一个组织从IEEE 获得唯一的地址块(称为OUI),并可用该地址块创建224个设备。
那么保证该地址块中地址(最后3个字节)的唯一性就是制造商的责任。
地址中的第2位指示该地址是全局唯一还是局部唯一。
除了个别情况,历史上以太网一直使用全局唯一地址。
3以太网数据帧格式图2 基本的以太网帧格式及传输次序图2显示了以太网MAC帧各个字段的大小和内容以及传输次序。
该格式中每个字段的字节次序是先传输的字节在左,后传输的字节在右。
在每个字节中的位次序正好相反,低位在左,高位在右。
字节次序和位的次序通常用于FCS之外的所有字段。
FCS将作为一个特殊的32位字段(最高位在左),而不是4个单独的字节。
3.1前导码(Preamble)和帧起始定界符(SFD)前导码包含8个字节。
前7个字节(56位)的职位0x55,而最后一个字节为帧起始定界符,其值为0xD5。
结果前导码将成为一个由62个1和0间隔(10101010---)的串行比特流,最后2位是连续的1,表示数据链路层帧的开始。
其作用就是提醒接收系统有帧的到来,以及使到来的帧与输入定时进行同步。
在DIX以太网中,前导码被认为是物理层封装的一部分,而不是数据链路层的封装。
3.2地址字段每个MAC帧包含两个地址字段:目标地址(Destination Address)和源地址(Source Address)。
目的地址标识了帧的目的地站点,源地址标识了发送帧的站。
DA可以是单播地址(单个目的地)或组播地址(组目的地),SA通常是单播地址(即,第1位是0)。
3.3长度/类型(Length/Type )长度/类型字段具有两种意义中的一种。
如果这个字段的值小于1518,那么这个字段就是长度字段,并定义后面的数据字段的长度。
但是如果这个字段的值大于1518,它就标识了在以太网上运行的客户端协议。
3.4数据(Data)数据字段包含46~1500字节。
数据域封装了通过以太网传输的高层协议信息。
由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度。
高层协议要保证这个域至少包含46个字节。
数据域长度的上限是任意的,但已经被设置为1500字节。
3.5帧校验序列(FCS)帧校验序列包含4个字节。
FCS是从DA开始到数据域结束这部分的校验和。
校验和的算法是32位的循环冗余校验法(CRC)。
关于FCS部分后面将做详细介绍。
4无效的MAC帧格式满足下面条件至少一个的MAC帧即无效:(1)帧长度和length/type字段中指定的长度不一致。
如果length/type中包含的是类型值,则认为帧长度与该字段值一致而不认为是无效帧。
(2)不是整数字节的长度。
(3)对接收到的帧进行CRC校验,发现错误。
无效的MAC帧内容将不传送到LLC层或MAC控制子层。
并将出现无效帧这一情况报告给网络管理。
5 CSMA/CD协议为了通信的简便,以太网采用了两种重要的措施:第一,采用无连接的工作方式,在传输数据之前无需建立连接。
第二,对发送的帧不进行编号,也不要求接收方发回确认帧。
这样做的理由是不同于其他网络,局域网信道的质量非常好,因为信道质量而产生错误的概率非常小。
这与一般数据链路层协议有些区别,如滑动窗口协议等。
因此以太网提供的是服务是不可靠交付,即尽最大努力的交付。
当目的站点收到有错误的数据帧时,就简单的丢弃该帧,除此之外什么也不做。
上层协议会发现并处理,如上层协议发现丢失了一些数据,则过一段时间会把这些数据重新交给以太网,但以太网并不认为这是一个重传的帧,而是当作一个新的帧来处理。
在半双工模式下,一个重要的问题就是如何协调总线上的各个站点,因为半双工模式同一时间只允许一个站点发送数据,否则各站点之间将会互相干扰。
以太网采用的就是被称为CSMA/CD,即载波监听多路访问/冲突检测的协议。
“多路访问”说明是总线型网络,许多站点以多点的方式共用一个总线。
协议的实质是载波监听和冲突检测。
“载波监听”就是指站点在发送数据前先检查总线上是否已有数据在传输,如有则暂缓发送,避免冲突。
实质就是在冲突发生前尽量避免。
“冲突检测”就是边发送边对媒体上的电压信号大小进行监测。
当一个站点监测到电压摆动值超过一定的门限时,就可认为发生了冲突。
冲突检测具体由物理层完成,数据链路层根据物理层的信号来判断是否有冲突。
一旦发生了冲突,站点就要停止发送数据,然后根据协议进行重传。
5.1帧的发送数据发送模块主要实现以下两个功能:1)数据的封装。
2)发送媒体管理。
包括信道获取,冲突处理等。
5.1.1数据的封装发送模块按照以太网MAC帧格式,将待发送的数据与目的地址,源地址,类型/长度字段进行组合,并根据数据长度添加适当的填充字段以达到802. 3标准规定的最小帧长度,然后计算CRC校验作为FCS字段添加在帧尾,形成一个完整的MAC帧。
在发送时,模块首先自动生成并发送前同步码和帧开始定界符,然后开始发送组装好的MAC帧。
5.1.2发送媒体管理等待机制(Defference)当一个待发送帧准备就绪时,按照工作模式的不同,发送模块采用2种规则。
半双工模式:在半双工模式下,为了避免其他主机竞争媒体而产生的冲突,MAC通过监听载波信号来得知是否有其他站点在发送信息。
该信号由物理层信号提供。
如信道忙,MAC会暂缓发送自己的数据,直到信号变为空闲时,才开始发送。
通常当信道变为空闲后,MAC并不立刻发送数据,而是继续等待一个帧间间隔,目的是给物理层以及其他站点的MAC处理上一个帧的时间。
当一切准备就绪后,MAC就把帧交给物理层以二进制数据流的形式发送出去。
全双工模式:而在全双工模式下,情况则大不相同。
由于站点之间的连接为点到点,且可以同时进行发送和接收,所以就不存在冲突,也就不需要载波监听。
待发送的帧只要等待一个帧间间隔就可以立刻发送,不需要考虑是否正在接收数据。
5.1.3冲突监测和处理:在半双工模式下,假如有多个站点企图同时发送数据,尽管每个发送站都有等待机制,然而还是很有可能会相互干扰。
当2个站发送的信号叠加时,冲突就发生了。
只有在半双工的模式下,才有可能会发生冲突。
冲突说明当前有多个站企图使用共享信道。
在全双工模式下,两个站点之间有着点到点的独享信道,不存在冲突。
尽管物理层仍然会提供冲突信号,然而在全双工模式下,这个信号被忽略了。
当某个站点开始发送数据时,仅在发送开始的一段时间内可能遭遇到冲突,这个时间段被称为冲突窗口(collision window)。
这是由于信号在媒体上传播也需要时间,冲突窗口就是发送站点的信号传遍冲突域所需的时间。
这是一个很重要的参数,以太网取传输512bit数据所用时间为争用期的长度。
需要指出,以太网的端到端时延实际上是小于争用期的一半的,争用期被规定为传输512bit所用时间,不仅是考虑了以太网的端到端时延,而且还包括其它的许多因素,如可能存在的转发器所增加的时延,以及强化冲突的干扰信号的持续时间等。
一般以太网的冲突多为发生在冲突窗口内。
一旦冲突发生,物理层会监测到干扰信号,于是冲突监测信号被置1。
在半双工模式下,发送模块的接入管理模块响应这一信号,冲突处理机制开始执行。
首先,该模块会发送一系列被称为冲突强化的信息,确保其他的站点也能得知冲突的发生,强化冲突过后,发送端终止当前发送,并等待一个随机的时间重新尝试发送。
重新发送同样也有可能遭遇到冲突,最终的结果有两个,一是发送成功,二是达到了重传的数量上限,发送失败。
在全双工模式下,发送站点忽略物理层的冲突信号,站点随时可以发送帧而不会有冲突发生,所以不需要强化冲突和重传机制。
5.1.4退避算法以及重传以太网使用截断二进制指数回退算法来解决冲突后的重发问题。
截断二进制指数回退算法很简单,就是让发生冲突的站点在停止发送数据后,不是立刻重发,而是推迟一个随机的时间。
这样就使得重发时再次发生冲突的概率减小。
具体的算法是:(1)确定单位回退时间,通常是取冲突窗口的值,即传输512bit数据所需时间,称为时槽。
(2)定义参数k,它等于重传次数,但不超过10,因此k=min (n, 10)。
(3)取r满足0≤r <2 k。
重传的时延就是r倍的时槽。
(4)当重传达到16次仍不能成功时(这表明同时打算发送数据的站点过多,导致连续发生冲突),则丢弃该帧,并向上层协议报告。
使用以上的回退算法可使重传需要推迟的平均时间随重传次数增加而增加,这也被称为动态退避,有利于整个系统的稳定。
5.2帧的接收在接收端,站监视信道以获得帧到达的指示。
当发现信道变成非空闲状态时,站开始从信道接收比特,并查找标志MAC帧起始的前导码(preamble)和帧起始定界符(SDF)。