关于车载以太网理解

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(使用前将#替换为@)

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

  • Android 上的 UDP 视频流

    我有一个 Android 项目 需要构建一个客户端应用程序来接收 UDP 或 RTP 单播视频流并播放它们 不幸的是 我似乎无法使其正常工作 并且已经广泛搜索了解决方案 我已经在 Xoom Android 3 2 和 Nexus S And
  • C++ 反序列化通过 UDP 从 C# 应用程序发送的对象

    我有一个申请c 它连接到另一个应用程序 编写为c 通过UDP 我更喜欢高性能的解决方案 因为我希望测量事件客户端 某些处理服务器端和客户端处理完成的响应之间的时间 本质上是 往返延迟 我有一个 C 对象 例如 public class Pa
  • 更改Windows下的默认套接字缓冲区大小[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法更改的应用程序正在丢弃一些传入的 UDP 数据包 我怀疑接收缓冲区溢出 是否有注册表设置可以使默认缓冲区大于 8KB From th
  • C#/Unity - 无法从异步方法调用 Unity 方法

    我正在使用Unity3D 这是我的异步方法 private void Receive IAsyncResult ar try IPEndPoint ipEndPoint null byte data udpClient EndReceive
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • 什么是消息边界?

    什么是 消息边界 在以下情况下 TCP 和 UDP 之间的区别之一是 UDP 保留消息 边界 我理解之间的区别TCP and UDP 但我不确定的定义 消息边界 由于 UDP 在每个单独的数据包中包含目的地和端口信息 因此是否可以为消息提供
  • netty 4.x.x 中的 UDP 广播

    我们需要使用 Netty 4 0 0 二进制文件通过 UDP 通道广播对象 Pojo 在 Netty 4 0 0 中 它允许我们仅使用 DatagramPacket 类来发送 UDP 数据包 此类仅接受 ByteBuf 作为参数 还有其他方
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 自 2012 年以来,WinSock 注册 IO 性能是否有所下降?

    我最近使用 MS 为该 API 提供的稍微可接受的文档编写了基于 WinSock Registered IO RIO 的 UDP 接收 最终的性能非常令人失望 单套接字性能有些稳定 约为每秒 180k 数据包 使用多个 RSS 队列 即多个
  • 提高UDP可靠性

    我正在构建一个基于 UDP 的小型服务器 服务器基于 Net并使用它自己的Socket类 我通过 ReceiveMessageFromAsync 和异步发送使用完成端口 我的问题是我失去了大约 5 10 的流量 现在我明白这是正常的 但是有
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 使用 Boost.Asio 进行广播的问题

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

    今天早上 工作中出现了大问题 因为 SNMP 陷阱没有 通过 因为 SNMP 是通过 UDP 运行的 我记得在大学网络课上 UDP 不能像 TCP IP 那样保证传输 维基百科说 SNMP 可以在 TCP IP 上运行 但 UDP 更常见
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • Node.js 可读流_read用法

    我了解如何在 Node 的 new 中使用可写流Streams2库 但我不明白如何使用可读流 举个例子 一个流包装器围绕dgram module var dgram require dgram var thumbs twiddle func
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL

随机推荐

  • 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帧格式