关于车载以太网理解

2023-11-08

目录

1.车载以太网概述

2. 物理层 PHY

2.1 总体说明

2.2 物理层架构

2.3 物理层控制器的架构

2.4 物理层编码原理

3. 链路层 MAC

3.1 MAC控制器架构

3.2 MAC地址

3.3 数据传输

3.4 MAC帧格式

4.网络层

4.1 IP地址

4.2 IP协议

4.3 ICMP协议

4.4 ARP协议

5.传输层

5.1 端口与Socket

5.2 UDP

5.3 TCP

6.应用层

6.1 DoIP

6.2 SOME/IP

6.3 DHCP协议

7. Autosar中的以太网协议栈


1.车载以太网概述

其中与车载以太网强相关的模块有:

  • SOME/IP(Scalable Service-Oriented MiddlewarE over IP):是一种用于传输服务(Service)信息的基于IP的可伸缩中间件,能够适应基于不同操作系统的不同大小的设备,小到摄像头,大到车机或自动驾驶模块;相比于传统的CAN总线的面向信号的通信方式,SOME/IP是一种面向服务的通信方式。

  • DoIP:基于以太网的诊断传输协议,能够将UDS进行封装并基于IP网络进行传输;应用于车辆检查和维修、车辆或ECU软件的重编程、车辆或ECU的下线检查和维修等,其主要工作原理类似于Diagnostic over CAN(或称为DoCAN)。

  • XCP:XCP on Ethernet能够基于以太网进行车载控制器的标定,主要用于标定、测量、少量的编程和刷新(大部分刷新会利用诊断协议)、ECU旁路功能等。

  • UDPNM:是AUTOSAR组织制定的基于汽车以太网的网络管理协议,能够有效的实现车载以太网节点的协同睡眠和唤醒,其主要工作原理类似于AUTOSAR的CAN NM

其中与传统以太网最核心区别是物理层车载以太网要用 100BASE-T1,而非100BASE-TX,下面依次介绍与车载相关的各层。

2. 物理层 PHY

2.1 总体说明

物理层PHY:数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口;

数据链路层MAC:提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。

100BASE-T1在物理连接上使用了一对双绞线实现全双工的信息传输,而100BASE-TX则使用了两对双绞线实现全双工,一对用于收,另一对用于发。

100BASE-T1利用所谓的回音消除技术(echo cancellation)实现了在一对双绞线上的全双工通信。

回音消除技术的主要过程:作为发送方的节点将自己要发送的差分电压加载到双绞线上,而作为接收者的节点则将双绞线上的总电压减去自己发出去的电压,做减法得到的结果就是发送节点发送的电压。

车载以太网固定为全双工通信方式,出于对汽车启动时间的考虑而没有引入自动协商机制,此外车载以太网是通过单对非屏蔽或屏蔽电缆连接。

2.2 物理层架构

物理层主要作用:

1)定义硬件接口;

2)定义信号与编码;

3)定义数据与信号之间的转换收发;

物理层基本架构

主要包括PMD,PMA和PCS。

PMD,介质依赖层,主要职责是转换PMA的数据与实际网络上的信号。发送时,它从PMA读取数据并执行实现该功能所需的必需的低级行编码功能设计的媒介。接收时,它会读取并解释这些内容编码信号,然后将它们转换回位以发送到PMA。

PMA,介质连接层,结余PMA和PCS之间,其中PMD是按照bit串行处理方式,而PCS则是按照数据块处理方式,因此PMA则是起到中间转换的作用,此外还起到数据冲突检测的功能。

PCS,编码子层,主要进行初始编码 ,实现特定于以太网速度和传输介质要求的子层中的一部分。

2.3 物理层控制器的架构

其中,MDI , Medium Dependent Interface。MII Medium Independent Interface,MIIM主要用于寄存器的配置管理。

我们这里需要注意的是RXD 和TXD都是4个数据。

2.4 物理层编码原理

首先总线上的电平信号有,-1 0 和 1如图:

数据和电平的编码转换关系有如下表关系:

如数据 000 对应两根线上的电平为 -1 01 ,

主要数据到电平转换过程为以下四步:

1.首先从MII接收到数据(4bit 4bit...)

2.接下来分割成(3bit 3bit...)进行处理;

3.根据上表,电平与数据编码的关系,转换为电平信号;

4.将电平信号发到总线。

一个案例说明以上的转换过程:

100Mbps 速度的由来:

在微控制器的每个时钟周期中,MII接口到来的数据是4个bit,PHY从MII接口收到数据后,会首先进行一个4B3B的转换,为了匹配25MHz * 4bit = 100Mbit/s的速率,PHY的MII接口时钟周期应该是33.3333M,每次接收3bit,也实现了33.3333M * 3bit = 100Mbit/s的速率。之后PHY要再进行3B2T的操作,将每次接收到的3个bit转化为2个电平值(取值范围是-1,0,1),具体的对应关系如上图中的表所示。3个bit有8种组合(即2的三次方),两个电平值有9种组成(即3的平方),所以后者可以覆盖前者。此时时钟周期仍然是33.333M,但是每个时钟周期中的两个电平就能够表示3个 bit了,所以此时的数据速率仍然是100Mbit/s,每个电平实际上包含了1.5bit信息。最后一步是PAM3,将逻辑的-1,0,1转化为在双绞线上的电压,所以,最终在总线上信号的波特率是66.666MHz,但是它实现了100Mbit/s的通信速率。

3. 链路层 MAC

MAC层主要内容,

1) 寻址

2) 传输方式

3) 帧格式

3.1 MAC控制器架构

其中比较关键的是MII 和 MIIM 与PHY接口连接。

数据发送,MAC协议会判断当前是否适合发送数据,若能,它会在将要发送的数据上附加一些控制信息,最终使数据以规定的格式到达物理层;

数据接收,它会判断数据是否有错误,如果没有错误的话,它会去掉附加的控制信息发送至LCC(逻辑链路控制)子层。

SMI接口包括MDIO(控制和管理PHY以获取PHY的状态)和MDC(为MDIO提供时钟)。

MDC由MAC提供,MDIO是一根双向的数据线。用来传送MAC层的控制信息和物理层的状态信息。

MDIO数据与MDC时钟同步,在MDC上升沿有效。

3.2 MAC地址

在我们给别人联系时,我们往往需要知道对方的邮件地址或电话或住址,而以太网通信也是类似。因此需要通信的两个设备,必须具有唯一标识的MAC地址。

MAC地址长度为48bit、6byte,前三个字节是组织标识ID,后三个字节是本地管理ID。

全局或本地地址U/L:第一个字节的第二位MAC地址的OUI字段(从右数第二低位开始计数)被称为U / L(通用/本地)标志。 设为0时,将MAC地址标记为被普遍管理; 当它是1时,MAC地址是本地管理的。 

单播与组播MAC地址I/G:OUI的第一个字节的第一个(最低有效)位MAC地址的字段,称为I / G(个人/组)标志。当这个位设置为0,MAC地址是单个设备,并且消息是单播。设置为1时,表示组地址(多播)。

广播MAC地址:FF-FF-FF-FF-FF-FF

3.3 数据传输

主要介绍一下CSMA/CD 冲突检测方法。

在以太网中,网络不断监控(或感知)传输线,侦听确定线路是否繁忙。任何设备听到正在进行的传输则禁止尝试发送自己的消息,直到线路空闲为止。

它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两个碰巧同时送出了数据,那样必将造成冲突。这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突

3.4 MAC帧格式

Preamble:7byte 帧前缀,主要用于帧设备之间的事件同步;

Start of frame delimiter:1byte,标识帧开始

MAC destination :目标MAC地址

MAC source : 源MAC地址

802.1Q Tag:是一个可选项,主要用于VLAN,如在这个字段中定义VLAN的ID或优先级等,未定义的则会自动把该帧丢弃。

length:数据长度/payload长度

Payload:有效负载、数据

frame check :CRC

interframe gap :帧之间的间隔

4.网络层

4.1 IP地址

主要作用为,寻址,数据封装,路由。仅以IPV4说明

长度为4byte 32bit,每个字节用dot隔开,用十进制表示。

192.168.0.1      ,其中加粗的前三个字节192.168.0 表示网络ID,最后一个字节 1表示主机ID

网络ID(网络ID):一定位数,从头开始从最左边的位开始,用于标识主机或位于其他网络接口。 有时也称为网络前缀,甚至只是前缀。
主机ID(主机ID):其余位用于标识 网络上的主机。

IP地址类别:

类别 默认子网掩码
A类 255.0.0.0
B类 255.255.0.0
C类 255.255.255.0

A类地址第一字节为网络ID,后三个字节为主机ID,范围是1.0.0.1—126.155.255.254;
B类地址第一二字节为网络ID,后两个字节为主机ID,范围是128.0.0.1—191.255.255.254;
C类地址前三个字节为网络ID,最后一个字节为主机ID,范围是192.0.0.1—223.255.255.254

D类地址:为组播地址

224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;
224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;

239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。

D类地址的MAC有特殊转换关系:

MAC地址前三位为:01 00 5E

MAC地址后三位为:0x7FFFFF & 组播IP地址

举例来说 组播IP地址 242.147.109.235 对应的MAC地址为:01.00.5E.13.6D.EB

4.2 IP协议

Version:版本  如4表示IPV4      IPV4:4,IPV6:6

IHL:Internet Header length,Header 长度  没有选项,则一般为5(5x32bit=20B)

DSCP:Differentiated Service   一般没有使用,详细参考RFC

ECN:Explicit Congestion Notification  用于扩展检测丢包

Total length :总长度,header+数据 总长度

Identification :占16位,它是一个计数器,用来产生数据报的标识

Flags:标明是否分片 bit 0: Reserved; must be zerobit 1: Don't Fragment (DF) bit 2: More Fragments (MF)

Fragment Offset :占12位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以 8 个字节为偏移单位

Time to Live :生存时间,占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255

Protocol:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议

Header checksum:数据头CRC

Source IP address:源IP地址

Destination IP Address:目标IP地址

4.3 ICMP协议

ICMP:Internet Control Message Protocol  网际控制报文协议

作用:提高 IP 数据报交付成功的机会 用于ping,跟踪路由

这里的Type如下图所示:

这里主要说明 Code,用于表示网络相关的错误。

4.4 ARP协议

ARP:Address Resolution Protocol 地址解析协议

由于上层用的是IP地址,下层用的是MAC地址,ARP协议就是用于解决协议转换的问题。

主要用两种映射方式,一种为直接mapping,一种为动态mapping

以下说明ARP过程:

1)首先查询表中是否有目标地址,若没有则下一步;

2)产生ARP请求帧;

3) 广播ARP请求帧;

4)目标方接收ARP请求帧,并处理

5)目标方产生ARP响应帧

6)目标方更新ARP表

7)目标方发送ARP响应帧

8)请求方接收响应帧并处理

9)请求方更新ARP表。

5.传输层

传输层的目的在于,控制分段传输大块数据。

5.1 端口与Socket

前面我们提到了IP地址,IP地址一般表示一个ECU级别;

而为了进一步表示一个ECU上的不同软件进程,功能或模块,我们引入端口的概念(port)。

在TCP和UDP中,都包含了16bit的 源地址端口和目标地址端口。

而 IP地址+port =  socket。

5.2 UDP

UDP:User Datagram Protocol 用户数据报协议

主要特点:传输协议比TCP轻,不保证发包的传输以及数据包的顺序,主要用于对时间敏感的传输;

5.3 TCP

TCP:Transmission Control Protocol  传输控制协议

主要特点,主要是用于可靠的面向连接的传输,在传输数据之前,必须先建立连接,同时确保所有数据按顺序到达客户端,客户端收到数据包后需要给出确认应答,若未确认,则该数据包会进行重传。

握手过程:

协议格式:

Source Port : 源端口

Destination Port:目标端口

Sequence Number:序列号,用于确保传输顺序;

Acknowledgment Number:应答号  比如当前接收端接收到一个净荷为12byte的数据包,SN为8,则会回复一个确认收到的数据包,如果这个数据包之前的数据也都已经收到了,这个数据包中的ACK Number则设置为12+8=20,表示之前的数据都已经收到了,准备接受SN=20的数据包

data offset:4位包括TCP头大小,指示TCP头的长度,即数据从何处开始。

CWR(Congestion Window Reduce):拥塞窗口减少标志set by sender,用来表明它接收到了设置ECE标志的TCP包;

ECE(ECN Echo):ECN响应标志被用来在TCP3次握手时表明一个TCP端是具备ECN功能的。在数据传输过程中也用来表明接收到的TCP包的IP头部的ECN被设置为11;

URG(Urgent):该标志位置位表示紧急(The urgent pointer) 标志有效。

ACK:取值1代表Acknowledgment Number字段有效,这是一个确认的TCP包,取值0则不是确认包。

PSH(Push):该标志置位时,一般是表示发送端缓存中已经没有待发送的数据,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。

RST(Reset):用于reset相应的TCP连接。通常在发生异常或者错误的时候会触发复位TCP连接。

SYN:同步序列编号(Synchronize Sequence Numbers)有效。该标志仅在三次握手建立TCP连接时有效。

FIN(Finish):No more data from sender。当FIN标志有效的时候我们称呼这个包为FIN包。

Window Size:从Ack Number开始还愿意接收多少byte的数据量,用于TCP的流量控制。

Urgent Pointer:优先指针 指向后面是优先数据的字节,在URG标志设置了时才有效。

6.应用层

6.1 DoIP

参考:关于DoIP 协议的理解_AgingMoon的博客-CSDN博客_doip

6.2 SOME/IP

参考:关于SOME/IP的理解_AgingMoon的博客-CSDN博客_some ip

6.3 DHCP协议

DHCP的全称是Dynamic Host Configuration Protocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置IP地址。

DHCP是一个局域网应用层协议,使用UDP协议工作,用于在局域网内自动分配IP地址。

该协议基于Client / Server模式工作(Server一般由路由器担任),

•DHCP Server端,使用UDP端口:67 (0x43)

•DHCP Client端,使用UDP端口:68 (0x44)

DHCP的三种机制分配IP地址:

1)自动分配方式(Automatic Allocation),DHCP服务器为客户端指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。

2)动态分配方式(Dynamic Allocation),DHCP服务器给客户端指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

3)手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

其中我们最常使用的是第二种,即动态分配方式。

UDP 数据包

OP:

若是 client 送给 server 的封包,设为 1 ,反向为 2。

HTYPE:

硬件类别,Ethernet 为 1。

HLEN:

硬件地址长度,ethernet为6。

HOPS:

若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0。

SECONDS:

Client 端启动时间(秒)。

Transaction ID:

一个随机数,用于客户和服务器之间匹配请求和相应消息。

Flags:

从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用。

ciaddr:

要是 client 端想继续使用之前取得之 IP 地址,则列于这里。

yiaddr:

在 server 送回 client 的 DHCP OFFER 与 DHCPACK封包中,此栏填写分配给 client 的 IP 地址。

siaddr:

若 client 需要通过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。

giaddr:

若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。

chaddr:

Client 之硬件地址。(包括6字节MAC和10字节padding)

sname:

Server 之名称字符串,以 0x00 结尾。

file:

若 client 需要通过过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。

options:

允许厂商定议选项。每个option项由Type(1字节)、Length(1字节)、Value(长度由Length决定)三部分组成。

第一步:
DHCP客户端主动发送DHCP Discover包,用来寻找DHCP服务器,其中:

源MAC是自己的MAC地址,目的MAC是FF:FF:FF:FF:FF:FF的广播;

源IP是0.0.0.0(现在还没有IP,就用全0地址),目的IP是255.255.255.255的三层广播地址。

因为此时客户端还不知道DHCP服务器在哪里,所以使用广播来寻找,请求会被广播到整个网段中。

第二步:

DHCP服务器收到客户端发的DHCP Discover之后,会在自己的地址池中拿出一个没有分配的地址以及配套的参数(如:掩码、DNS、网关、域名、租期……),然后以一个DHCP Offer包发送出去。这个DHCP Offer数据包的地址如下:

源MAC是DHCP服务器的MAC,目的MAC是DHCP客户端的MAC地址;

源IP是DHCP服务器的IP,目的IP是即将分配给客户端使用的IP地址。

因为客户端目前还没有IP地址,所以在这个单播IP发送之前,服务器会使用客户端的MAC地址与之通信,如果MAC地址通信失败,那么服务器会使用广播的方式提供(Offer)数据包 。

第三步:

客户端收到这个DHCP Offer后,会再发出一个DHCP Request给服务器来申请这个Offer中包含的地址。此时客户端还没有正式拿到地址,所以还需要向DHCP服务器申请。

这个DHCP Request数据包的地址如下:

这时客户端的源IP还是0.0.0.0,目的IP还是255.255.255.255

源MAC是客户端的MAC,目的MAC是FFFF.FFFF.FFFF广播包

第四步:

服务器收到客户端的请求后,会发出一个DHCP ACK用来确认这个IP地址可以分配给这个客户端。

客户端收到这个DHCP ACK数据包才算正式拿到了这个IP。

在租约内续租的时候,发现( Discovery )和提供(Offer)数据包就变得没有必要了,只需要完成请求和确认两个步骤就可以

7. Autosar中的以太网协议栈

以下简要说明与以太网相关的Autosar协议栈。

其中LDCOM可以认为类似于COM模块,只是LD表示large data,此外SOAD表示 socket adapter,用于以太网中的socket适配。

当然与DCM相关的底层采用的是DOIP协议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于车载以太网理解 的相关文章

  • 是否可以将 char * 转换为结构?

    这是我的问题 rcvfrom 参数之一是 char 一旦我从中获取数据 我想将其转换为结构 然而选角并不成功 我究竟做错了什么 这是我所做的 struct int8 t seq int8 t ack bool flag char data
  • 我应该对 UDP 使用(非阻塞)NIO 吗?

    根据这个帖子 https stackoverflow com questions 569555 non blocking udp i o vs blocking udp i o in java UDP 只是不阻塞 使用 非阻塞 NIO AP
  • 使用.Net Core创建UDP套接字

    如何创建一个 UDP 套接字以非阻塞方式接收本地端点中的数据 我不知道数据来自的远程端口 我在 Linux 中使用 NET Core 我认为我可以使用 ReceiveAsync 但它似乎无法以这种方式工作 我这样解决了这个问题 static
  • 丢包纠错码 (UDP)

    我不知道要寻找什么 因为我从 纠错代码 中得到的只是与您不知道错误位置的情况相关的内容 因此 这些代码比我需要的要复杂得多 而且效率低下 在下文中 请注意位等于数据包 因为只有整个数据包可能会丢失 因此位类比非常适合 是否有 ECC 考虑到
  • UDP 数据包在交付时是否保证是完整的、具有实际意义的?

    众所周知 UDP 用户数据报协议 并不安全 因为用它发送的数据包的顺序可能不按顺序传送 甚至根本不按顺序传送 但是 如果发送了 UDP 数据包 该数据包中的信息在实际意义上 99 99 及以上 是否保证正确 在实际意义上 99 99 及以上
  • memcached 使用 Django 监听 UDP

    Question 我无法获得memcached正在听UDP 上班 get set delete 与姜戈 我只让 memcached 监听UDP 11211 正如我在上一个问题 https stackoverflow com question
  • Python-UDP客户端

    我目前正在阅读Pythonbook https www nostarch com blackhatpython并遇到了以下示例 import socket target host 127 0 0 1 target port 80 creat
  • 为什么我的 UDP 广播失败?

    我正在尝试发送 UDP 广播 但wireshark 没有报告任何流量 这是执行发送的代码片段 void SendBroadcast String ip 255 255 255 255 int port 30718 String messag
  • 如何在多个程序中接收相同的udp流?

    我有一个封闭的第三方系统 它发送单播 UDP 流 MPEG TS 我想在同一台计算机上的两个不同程序中访问该流 我无法更改源上的任何内容 甚至无法更改 IP 或端口 除了编写自己的小程序来捕获流然后创建新流并重新发送这两个流之外 还有其他选
  • 具有多个接口的 Python UDP 套接字

    我正在 Windows XP 机器上用 python2 7 编写脚本 本机使用不同的网卡连接到多个网络 我遇到了一个问题 我已将 UDP 套接字绑定到特定接口 我知道您可以通过仅提供网卡现有的 IP 地址来在 Windows 中完成此操作
  • 为什么UDP服务器上的UDP客户端端口会改变

    我一直在关注一个简 单的 UDP 服务器 客户端教程 发现here http www binarytides com udp socket programming in winsock 我有一个关于客户端连接到服务器的端口的快速问题 仅从代
  • Java UDP 服务器,并发客户端

    下面的代码足以接受并发 UDP 传输吗 更具体地说 如果 2 个客户端同时传输 当我调用 receive 时 DatagramSocket 会将传输排队并一一传送它们 还是只有一个能够通过 DatagramSocket socket new
  • Go:如何接收整个 UDP 数据报

    我的问题 使用 net Read 方法仅复制给定字节数组或切片大小的字节数 当然 我不想每次都分配最大 64 kB 的 UDP 数据报 有没有go如何确定数据报的大小 位于数据报头中 或再次读取直到数据报完全读取 Try 从UDP读取 ht
  • C# 广播是UDP消息,监听多个回复

    我正在尝试编写一些执行 UDP 广播的代码 然后侦听来自远程服务器的答复 说明它们存在 它用于识别子网上运行服务器应用程序的计算机 因此基本上会发出 谁在那儿 并听取所有答复 我在 Java 中有这个 工作完美 它将 DatagramPac
  • 致命错误:netinet/in.h:没有这样的文件或目录

    套接字编程 UDP 服务器 我正在尝试使用 UDP 服务器进行消息加密和解密 代码在这里 https www geeksforgeeks org message encryption decryption using udp server
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • 使用 STUN 打孔

    我目前正在尝试通过 Internet 发送 UDP 消息 并且必须为端点 A 和 B 都位于 NAT 后面 设置防火墙 为此 我想使用 STUN 服务器进行打孔 当 A 创建对 STUN 服务器的请求 例如 私有 85 1 1 12 600
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • 为什么 SNMP 通常在 UDP 上运行而不是 TCP/IP 上?

    今天早上 工作中出现了大问题 因为 SNMP 陷阱没有 通过 因为 SNMP 是通过 UDP 运行的 我记得在大学网络课上 UDP 不能像 TCP IP 那样保证传输 维基百科说 SNMP 可以在 TCP IP 上运行 但 UDP 更常见
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是

随机推荐

  • pycharm连接MYSQL数据库

    pycharm连接MYSQL 1 gt 使用pip工具 进入cmd 输入 pip install pymysql 回车进行安装 有网络的情况下进行 安装最新版的pymysql可以使用 python m pip install upgrade
  • 希尔排序(Shell Sort)

    如今是大数据时代 大量数据需要处理 便越来越需要跟优秀的算法 算法 Algorithm 是指解题方案的准确而完整的描述 是一系列解决问题的清晰指令 算法代表着用系统的方法描述解决问题的策略机制 也就是说 能够对一定规范的输入 在有限时间内获
  • strcpy和memcpy的区别

    1 strcpy函数 1 1 函数原型 char strcpy char dest const char src 1 2 函数功能 strcpy是一种C语言的标准库函数 strcpy把含有 0 结束符的字符串复制到另一个地址空间 返回值的类
  • linux:docker compose使用已经存在的网络

    问题 如题 参考 Networking in Compose Docker Documentation services networks network1 name my pre existing network external tru
  • vue2+ElementUI时间选择器限制可选范围为今天往前7天内的任意一天

    题目有2个重点 1 可选范围为今天往前7天 含今天 2 只能选择7天内的任意一天 由此可知 用户选择的最大日期和最小日期为同一天 即只能选择一天 也就是说 使用了时间范围插件 但是model中的两个日期是同一天 HTML
  • c# 位运算符

    说来惭愧 今天看别人提供的源码 看了这些运算符竟然有些记不起来 在这里就记录一下 首先认识这些运算符 按位与 其实与 逻辑运算符有一致的地方 下面会讲到 按位或 同样与 有类似的地方 按位取反 按位异或 lt lt 左移运算符 gt gt
  • Python爬取天气数据并进行分析与预测

    随着全球气候的不断变化 对于天气数据的获取 分析和预测显得越来越重要 本文将介绍如何使用Python编写一个简单而强大的天气数据爬虫 并结合相关库实现对历史和当前天气数据进行分析以及未来趋势预测 1 数据源选择 选择可靠丰富的公开API或网
  • 百度又开源一款压测工具,可模拟几十亿的并发场景,太强悍了

    dperf 是百度开源的一款基于 DPDK 的 100Gbps 网络性能和负载测试软件 能够每秒建立千万级的 HTTP 连接 亿级别的并发请求和数百 Gbps 的吞吐量 优点 性能强大 基于 DPDK 使用一台普通 x86 服务器就可以产生
  • burpsuite扩展集成sqlmap插件

    通常我们在使用sqlmap测试SQL注入问题的时候会先使用burpsuite来抓包 然后交给sqlmap进行扫描 此操作略显繁琐 为了避免这种繁琐的重复操作可以将sqlmap以插件的方式集成到burpsuite里面 实现request右击s
  • ConnectTimeout和ReadTimeout所代表的意义

    ConnectTimeout 指的是建立连接所用的时间 适用于网络状况正常的情况下 两端连接所用的时间 在java中 网络状况正常的情况下 例如使用HttpClient或者HttpURLConnetion连接时设置参数connectTime
  • GO语言学习-Sublime+Go语言环境搭建

    sublime text3 Golang 搭建开发环境 1 引言 sublime text3搭建Golang的开发环境顺序为 1 安装Golang 2 sublime 安装 Gosublime 3 修改Gosublime中的配置 使之支持G
  • 基于蓝牙技术使用stm32制造一个智能小车 (寻迹,避障,遥控)

    目录 1 制作智能小车的硬件名单 3 引脚图 2 先让小车动起来 1 小车运动 2 代码 3 寻迹 1 工作原理 2 代码 4 超声波避障 1 工作原理 2 代码 5 蓝牙遥控 1 蓝牙工作原理 2 代码 6 oled屏幕 1 工作内容 7
  • Bootstarp入门教程(3)栅格系统

    栅格系统简介 栅格系统用于通过一系列的行 row 与列 column 的组合创建页面布局 你的内容就可以放入创建好的布局中 下面就介绍以下Bootstrap栅格系统的工作原理 行 row 必须包含在 container中 以便为其赋予合适的
  • 【最新】Java基础学习笔记(20天学会java黑马)(一)

    文章目录 Java背景 初步了解 Java快速入门 HelloWorld案例 Java基础语法 注释 数据类型 变量 关键字与标志符 类型转换 强制类型转换 运算符 算术运算符 赋值运算符 自增自减运算符 关系运算符 逻辑运算符 短路逻辑运
  • 基于Linux系统下安装Tomcat

    Tomcat服务器是一个免费开放开源的轻量级Web应用服务器 可以实现项目的部署和管理 本博客将实现Tomcat在Linux操作系统中的安装 1 检查系统中是否有java JDK 1 1 Windows系统下查看 使用 Win R键打开运行
  • eclipse中编写spring配置文件时有design和source,namespace 如何设置出来的问题

    首先要安装Spring插件 在已经装了 spring插件的情况下 右键点击你要显示的 xml文件 会出来 open with gt spring config editor 如图
  • ubuntu18.04安装显卡驱动 + CUDA + cuDNN+Tensorflow+pytorch

    GeForce MX150 Python3 6 cuda 9 0 cudnn 7 tensorflow 1 12 0 按多个教程安装前后也出了很多问题 最终才安装成功 以防万一 现将过程记录如下 1 安装显卡驱动 注意 两种方法 方法一为我
  • vue 设置提示 @ 路径 和 ~@ 路径

    菜鸟最近用公司的电脑开发 结果发现之前有的路径提示全没了 感觉非常难受 然后去插件一看才发现 好像是菜鸟自己不小心把这个插件给删了 有点难受 但是安装了这插件还是有点不好用 就是感觉每次使用了 vue 的 或者 开头的路径时 总是没有提示
  • React:‘XXX’ is defined but nerver used的解决方法

    原因 想引入Login组件 但是一直显示 组件被定义但从未使用 的字样 但是我明明就有引用吖 解决方法 原来是组件的文件名首字母需要大写 因为要做项目 但是React的基础课程还没学完 只好以这种半桶水的知识与头脑去做项目 难免会遇到很多困
  • 关于车载以太网理解

    目录 1 车载以太网概述 2 物理层 PHY 2 1 总体说明 2 2 物理层架构 2 3 物理层控制器的架构 2 4 物理层编码原理 3 链路层 MAC 3 1 MAC控制器架构 3 2 MAC地址 3 3 数据传输 3 4 MAC帧格式