当前位置: 首页 > news >正文

【回眸】牛客网刷刷刷!(七)——通信协议之 网络通讯

目录

前言

1、TCP/IP分层模型

2、ARP缓存

3、TCP 协议之所以提供可靠传输,不怕丢包、乱序的主要的原因是

4、以太网数据链路层MII/GMII/RMII/RGMII四种常用接口

5、在以太网通信协议LWIP中,数据包管理机构采用数据结构pbuf 分类包括

6、关于以太网MAC帧传输先后顺序由左至右正确的是

7、在以太网通信中,数据从上层到下层交付时,要进行封装;同理,当目标主机接收到数据时,数据由下层传递给上层时需要进行拆封。这就是数据的封装与拆封

8、在以太网通信协议LWIP中,关于网络数据包pbuf的各种分类

9、在以太网通信中,如果要判断两个 IP 地址是否处于同一个子网

10、根据 IP 地址中网络地址和主机地址两部分分别占多少位的不同,将 IP 地址划分为 5 类,分别为 A、B、C、D、E 五类

11、不属于以太网物理层子层的是

12、TCP适用于对数据完整性要求很高的场景

13、在TCP协议首部中,保留位之后有 6 个标志位,分别是URG/ACK/PSH/RST/SYN/FIN

14、关于数据链路层中MII接口

15、在以太网通信中,当前网络中的主流程序设计都是使用 socket 进行编程的,在Linux中,socket()函数原型是:int socket(int domain, int type, int protocol)

16、在Linux以太网通信中,内核提供了专门用于网络通信数据的读取函数recv,recv()函数原型是:ssize_t recv(int sockfd, void *buf, size_t len, int flags)

17、在以太网通信中,当两个设备建立连接后,我们可以使用ping 命令来测试网络可达性,tracert 命令用来显示到达目的主机的路径。这两个命令是基于哪个协议的

18、在以太网通信中, 关于OSI 参考模型中每一层的作用

19、在以太网通信中,TCP 协议在建立连接、断开连接以及数据传输过程中都会呈现出现不同的状态,不同的状态采取的动作也是不同的,TCP状态包括

20、在以太网通信中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址

21、TCP与UDP的主要区别

22、以太网中所有的站点共享一个通信信道,因为多个站点可以同时向网络上发送数据,所以需要一些检测机制

23、在以太网通信中,当服务器程序accept()函数与远程客户端之间建立连接后,accept()函数返回

24、物理层的主要功能是

25、不属于以太网MAC帧中FCS字段校验范围的是

26、在Linux以太网通信中,send()函数用来发送数据, send()可以通过参数 flags 指定一些标志,来改变处理传输数据的方式。关于这些flag,描述不正确的是

27、在以太网通信中,以太网数据帧结构不包括

28、在以太网通信中,如果调用 accept()函数时,并没有客户端请求连接,此时 accept()会

29、在微型嵌入式操作系统中,以太网通信常用的协议栈就是LWIP,LWIP是瑞典计算机科学院(SICS)的Adam Dunkels等开发的一个小型开源的TCP/IP协议栈。LWIP 是轻量级 IP 协议,有无操作系统的支持都可以运行。

30、在以太网通信中,常用的就是TCP协议,TCP是一种面向连接的、可靠的、基于 IP 的传输协议。关于TCP描述

31、在网络通信中,端口号本质上就是一个数字编号,用来在一台主机中唯一标识一个能上网的进程,端口号的取值范围为 0~65535。很多常见的服务器它都有特定的端口号

32、以太网通信中,当数据由上层发送到传输层时,数据会被封装为 TCP 数据段,我们将其称为 TCP 报文,TCP 报文由 TCP 首部+数据区域组成。TCP首部信息不包括

33、ARP协议中的免费ARP说法错误

34、以下关于以太网MAC帧组成错误的是

35、在以太网通信中,IP 地址用于标识互联网中的每台主机的身份,关于IP地址描述,不正确的是

36、在Linux以太网通信中,connect()函数原型是:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)

37、在Linux以太网通信中,也可以通过 read()函数可以从一个socket描述符中读取指定字节大小的数据。关于read函数

38、在以太网通信中,我们有时候需要在点分十进制字符串和二进制地址之间进行转换。如果我们想将点分十进制表示的字符串形式转换成二进制Ipv6 地址。则可以调用函数


前言

牛客网刷刷刷在去年秋招之后就断更很久了,博主决定居安思危,在有空的时候多刷点题,提高一下应试素养,记录一下成长点滴。话不多说,开始今天的网络通讯协议的学习

1、TCP/IP分层模型

常用的TCP/IP 分层模型有两种,TCP/IP 五层模型和TCP/IP 四层模型。

TCP/IP 五层模型中,将 OSI 七层模型的最上三层应用层、表示层和会话层合并为一个层,即应用层,所以 TCP/IP 五层模型包括:应用层、传输层、网络层、数据链路层以及物理层。

TCP/IP 四层模型,与五层模型唯一不同的就是将数据链路层和物理层合并为网络接口层,所以 TCP/IP 四层模型包括:应用层、传输层、网络层、网络接口层。

2、ARP缓存

缓存中的静态ARP项目通过手工配置和维护,不会被老化,不会被动态ARP项目覆盖。直到重新启动计算机为止。

3、TCP 协议之所以提供可靠传输,不怕丢包、乱序的主要的原因是

TCP 协议之所以提供可靠传输,不怕丢包、乱序。主要的原因是:

①、TCP 协议采用发送应答机制,即发送端发送的每个 TCP 报文段都必须得到接收方的应答,才能认为这个 TCP 报文段传输成功。

②、TCP 协议采用超时重传机制,发送端在发送出一个 TCP 报文段之后启动定时器,如果在定时时间内未收到应答,它将重新发送该报文段。

③、由于 TCP 报文段最终是以 IP 数据报发送的,而 IP 数据报到达接收端可能乱序、重复、所以 TCP协议还会将接收到的 TCP 报文段重排、整理、再交付给应用层

TCP 协议的滑动窗口机制是用来TCP流量控制的,不属于TCP协议稳定可靠的主要原因

4、以太网数据链路层MII/GMII/RMII/RGMII四种常用接口

RGMII接口的RXD和TXD信号位宽均是4位,有效的避免了GMII管脚多(24PIN)导致封装成本增加。

5、在以太网通信协议LWIP中,数据包管理机构采用数据结构pbuf 分类包括

在LWIP中,pbuf 共分为四类:PBUF_RAM、PBUF_ROM、PBUF_REF和 PBUF_POOL。

6、关于以太网MAC帧传输先后顺序由左至右正确的是

根据IEEE802.3协议要求,MAC帧传输顺序为前导码-定界符-目的地址-源地址-LENGTH/TYPE-DATA/PAD-校验字段-扩展字段

7、在以太网通信中,数据从上层到下层交付时,要进行封装;同理,当目标主机接收到数据时,数据由下层传递给上层时需要进行拆封。这就是数据的封装与拆封

数据封装如下:

当用户发送数据时,将数据向下交给传输层,但是在交给传输层之前,应用层相关协议会对用户数据进行封装,譬如 MQTT、HTTP 等协议,其实就是在用户数据前添加一个应用程序头部,这是处于应用层的操作,最后应用层通过调用传输层接口来将封装好的数据交给传输层。

传输层会在数据前面加上传输层首部传输层首部可以为 TCP 首部,也可以是 UDP 首部,然后向下交给网络层。

网络层会在数据前面加上网络层首部(IP 首部),然后将数据向下交给链路层,链路层会对数据进行最后一次封装,即在数据前面加上链路层首部(以太网接口为例,对应以太网首部),然后将数据交给网卡。
最后,由网卡硬件设备将数据转换成物理链路上的电平信号,数据就这样被发送到了网络中。

当数据被目标主机接收到之后,会进行相反的拆封过程,将每一层的首部进行拆解最终得到用户数据。所以,数据的接收过程与发送过程正好相反,可以概括为 TCP/IP 模型中的各层协议对数据进行解析的过程。

8、在以太网通信协议LWIP中,关于网络数据包pbuf的各种分类

PBUF_RAM 类型的 pbuf 主要通过内存堆分配得到的。这种类型的 pbuf 在协议栈中是用得最多的。PBUF_POOL 类型和 PBUF_RAM 类型的 pbuf 有很大的相似之处,但它主要通过内存池分配得到的。这种类型的 pbuf 可以在极短的时间内得到分配。PBUF_ROM 和 PBUF_REF 类型的 pbuf 基本相同,它们的申请都是在内存堆中分配一个相应的 pbuf 结构头,而不申请数据区的空间。这就是它们与 PBUF_RAM 和 PBUF_POOL 的最大区别。PBUF_ROM 和 PBUF_REF 类型的区别在于前者指向 ROM 空间内的某段数据,而后者指向 RAM 空间内的某段数据。

9、在以太网通信中,如果要判断两个 IP 地址是否处于同一个子网

在以太网通信中,可通过网络标识来进行判断两个 IP 地址是否处于同一个子网,网络标识定义如下:
网络标识 = IP 地址 & 码 子网掩码
2 个 IP 地址的网络标识相同,那么它们就处于同一网络。譬如 192.168.1.50 和 192.168.1.100,这 2 个都是 C 类地址,对应的子网掩码为 255.255.255.0,很明显,这两个 IP 地址与子网掩码进行按位与操作时得到的结果(网络标识)是一样的,所以它们处于同一网络。

10、根据 IP 地址中网络地址和主机地址两部分分别占多少位的不同,将 IP 地址划分为 5 类,分别为 A、B、C、D、E 五类

一个 A 类 IP 地址由 1 个字节网络地址和 3 个字节主机地址组成,A 类地址范围为:1.0.0.1 ~ 127.255.255.254;

一个 B 类 IP 地址由 2 个字节的网络地址和 2 个字节的主机地址组成,B 类地址范围:128.0.0.1 ~ 191.255.255.254。

一个 C 类 IP 地址由 3 字节的网络地址和 1 字节的主机地址组成,C 类地址范围为:192.0.0.1 ~ 223.255.255.254。

D 类 IP 地址第一个字节以“1110”开始,它是一个专门保留的地址,它并不指向特定的网络,D 类地址范围:224.0.0.1 ~ 239.255.255.254。

E 类 IP 地址以“llll0”开始,为将来使用保留。E 类地址范围:240.0.0.1 ~ 255.255.255.254。

11、不属于以太网物理层子层的是

LLC是逻辑链路控制的缩写,是数据链路层的子层,不属于物理层的子层

12、TCP适用于对数据完整性要求很高的场景

TCP适用于对数据完整性要求很高的场景,比如文件传输等,视频直播不属于对数据完整性要求较高的场景,在传输视频时,丢失一些数据,比如像素点,影响不会很大。

13、在TCP协议首部中,保留位之后有 6 个标志位,分别是URG/ACK/PSH/RST/SYN/FIN

保留位之后有 6 个标志位,作用分别如下:

①、URG :首部中的紧急指针字段标志,如果是 1 表示紧急指针字段有效。
②、ACK :只有当 ACK=1 时,确认序号字段才有效。
③、PSH :当 PSH=1 时,接收方应该尽快将本报文段立即传送给其应用层。
④、RST :当 RST=1 时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接。
⑤、SYN :SYN=1,ACK=0 时表示请求建立一个连接,携带 SYN 标志的 TCP 报文段为同步报文段。
⑥、FIN :为 1 表示发送方没有数据要传输了,要求释放连接。

14、关于数据链路层中MII接口

MII接口中 RX_CLK和TX_CLK均是由PHY提供的

15、在以太网通信中,当前网络中的主流程序设计都是使用 socket 进行编程的,在Linux中,socket()函数原型是:int socket(int domain, int type, int protocol)

socket()函数类似于 open()函数,它用于创建一个网络通信端点,如果成功则返回一个网络文件描述符,通常把这个文件描述符称为 socket 描述符,这个 socket 描述符跟文件描述符一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。该函数包括 3 个参数

参数 domain 用于指定一个通信域;这将选择将用于通信的协议族。

参数 type 指定套接字的类型。

参数 protocol 通常设置为 0,表示为给定的通信域和套接字类型选择默认协议。

16、在Linux以太网通信中,内核提供了专门用于网络通信数据的读取函数recv,recv()函数原型是:ssize_t recv(int sockfd, void *buf, size_t len, int flags)

在Linux中,不论是客户端还是服务器都可以通过 revc()函数读取网络数据,它与 read()函数的功能是相似的。参数sockfd 指定套接字描述符,参数 buf 指向了一个数据接收缓冲区,参数 len 指定了读取数据的字节大小,参数 flags 可以指定一些标志用于控制如何接收数据。这些标志如下所示:
MSG_CMSG_CLOEXEC  为 UNIX 域套接字上接收的文件描述符设置执行时关闭标志
MSG_DONTWAIT  启动非阻塞操作(相当于 O_NONBLOCK)
MSG_ERRQUEUE  接收错误信息作为辅助数据
MSG_OOB  如果协议支持,获取带外数据
MSG_PEEK  返回数据包内容而不真正取走数据包
MSG_TRUNC  即使数据包被截断,也返回数据包的长度
MSG_WAITALL  等待知道所有的数据可用(仅 SOCK_STREAM)

17、在以太网通信中,当两个设备建立连接后,我们可以使用ping 命令来测试网络可达性,tracert 命令用来显示到达目的主机的路径。这两个命令是基于哪个协议的

在以太网通信中,ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ARP 协议是以太网地址解析协议,IGMP 协议用于网络组管理,可以实现多播数据的接收;SNMP,简单网络管理协议。

18、在以太网通信中, 关于OSI 参考模型中每一层的作用

应用层:应用层(Application Layer)是 OSI 参考模型中的最高层,是最靠近用户的一层,为上层用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP。

表示层:表示层(Presentation Layer)提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩/解压缩和加密/解密(提供网络的安全性)也是表示层可提供的功能之一。
会话层:会话层(Session Layer)对应主机进程,指本地主机与远程主机正在进行的会话。会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。将不同实体之间表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。
传输层:传输层(Transport Layer)定义传输数据的协议端口号,以及端到端的流控和差错校验。该层建立了主机端到端的连接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括差错校验处理和流控等问题。我们通常说的,TCP、UDP 协议就工作在这一层,端口号既是这里的“端”。
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。本层通过 IP 寻址来建立两个节点之间的连接,为源端发送的数据包选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。网络层也就是通常说的 IP 层。该层包含的协议有:IP(Ipv4、Ipv6)、ICMP、IGMP 等。
数据链路层:数据链路层(Data Link Layer)是 OSI 参考模型中的第二层,负责建立和管理节点间逻辑连接、进行硬件地址寻址、差错检测等功能。将比特组合成字节进而组合成帧,用 MAC 地址访问介质,错误发现但不能纠正。

物理层:物理层(Physical Layer)是 OSI 参考模型的最低层,物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。

19、在以太网通信中,TCP 协议在建立连接、断开连接以及数据传输过程中都会呈现出现不同的状态,不同的状态采取的动作也是不同的,TCP状态包括

TCP 拥有以下状态

 CLOSED 状态

LISTENING  状态

ESTABLISHED  状态

TIME_WAIT 状态

SYN_SENT  状态( 客户端状态)

SYN_REVD  状态( 服务端状态)

FIN_WAIT_1 和 和 FIN_WAIT_2  状态:

CLOSE_WAIT  状态:

LAST_ACK 状态

20、在以太网通信中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址

在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢,它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。ICMP 协议,用于网络调试与维护。IGMP 协议,用于网络组管理,可以实现多播数据的接收。SNMP是简单网络管理协议。

21、TCP与UDP的主要区别

TCP面向连接,UDP是无连接的。

TCP面向字节流,UDP是面向报文的。

TCP只支持一对一,UDP支持一对一或者一对多。

TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

22、以太网中所有的站点共享一个通信信道,因为多个站点可以同时向网络上发送数据,所以需要一些检测机制

以太网中所有的站点共享一个通信信道,在发送数据的时候,站点将自己要发送的数据帧在这个信道上进行广播,以太网上的所有其他站点都能够接收到这个帧,因为多个站点可以同时向网络上发送数据,在以太网中使用了CSMA/CD协议来减少和避免冲突。需要发送数据的工作站要先侦听网络上是否有数据在发送,如果有的只有检测到网络空闲时,工作站才能发送数据。当两个工作站发现网络空闲而同时发出数据时,就会发生冲突。这时,两个站点的传送操作都遭到破坏,工作站进行1-坚持退避操作。退避时间的长短遵照二进制指数随机时间退避算法来确定。

23、在以太网通信中,当服务器程序accept()函数与远程客户端之间建立连接后,accept()函数返回

当有客户端连接请求到达时,accept()函数与远程客户端之间建立连接,accept()函数返回一个新的套接字。这个套接字与 socket()函数返回的套接字并不同,socket()函数返回的是服务器的套接字(以服务器为例),而accept()函数返回的套接字连接到调用 connect()的客户端,服务器通过该套接字与客户端进行数据交互,譬如向客户端发送数据、或从客户端接收数据。理解 accept()函数的关键点在于它会创建一个新的套接字,其实这个新的套接字就是与执行connect()(客户端调用 connect()向服务器发起连接请求)的客户端之间建立了连接,这个套接字代表了服务器与客户端的一个连接

24、物理层的主要功能是

利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。网络数据信号的传输是通过物理层实现的,通过物理介质传输比特流。物理层规定了物理设备标准、电平、传输速率等。常用设备有集线器、中继器、调制解调器、网线、双绞线、同轴电缆等。路由器属于网络层设备。

25、不属于以太网MAC帧中FCS字段校验范围的是

根据IEEE802.3协议规定,FCS校验范围包括:目的地址、源地址、Length/Type字段、DATA/PAD字段,不包括前导码、定界符。

26、在Linux以太网通信中,send()函数用来发送数据, send()可以通过参数 flags 指定一些标志,来改变处理传输数据的方式。关于这些flag,描述不正确的是

send 和 write 很相似,但是 send 可以通过参数 flags 指定一些标志,来改变处理传输数据的方式。这些标志如下所示:

MSG_CONFIRM  提供链路层反馈以保持地址映射有效
MSG_DONTROUTE  勿将数据包路由出本地网络
MSG_DONTWAIT  允许非阻塞操作(等价于使用 O_NONBLOCK)
MSG_EOR  如果协议支持,标志记录结束
MSG_MORE  延迟发送数据包允许写更多数据
MSG_NOSIGNAL  在写无连接的套接字时不产生 SIGPIPE 信号
MSG_OOB  如果协议支持,发送带外数据

27、在以太网通信中,以太网数据帧结构不包括

以太网中的帧格式定义了站点如何解释从物理层传来的二进制串,即如何在收到的数据帧中分离出各个不同含义的字段。以太网帧结构包括6字节的源站MAC地址、6字节的目标站点MAC地址、2字节的协议类型字段、数据字段以及帧校验字段,MAC地址是一个六个字节长的二进制序列,全球唯一的标识了一个网卡。

28、在以太网通信中,如果调用 accept()函数时,并没有客户端请求连接,此时 accept()会

accept()函数通常只用于服务器应用程序中,如果调用 accept()函数时,并没有客户端请求连接即等待连接队列中也没有等待连接的请求,此时 accept()会进入阻塞状态,直到有客户端连接请求到达为止。当有客户端连接请求到达时,accept()函数与远程客户端之间建立连接,accept()函数返回一个新的套接字

29、在微型嵌入式操作系统中,以太网通信常用的协议栈就是LWIP,LWIP是瑞典计算机科学院(SICS)的Adam Dunkels等开发的一个小型开源的TCP/IP协议栈。LWIP 是轻量级 IP 协议,有无操作系统的支持都可以运行。

LWIP 支持的网络协议主要包括:
 ARP 协议,以太网地址解析协议;
IP 协议,包括 IPv4 和 IPv6,支持 IP 分片与重装,支持多网络接口下数据转发;
ICMP 协议,用于网络调试与维护;
IGMP 协议,用于网络组管理,可以实现多播数据的接收;
UDP 协议,用户数据报协议;
TCP 协议,支持 TCP 拥塞控制,RTT 估计,快速恢复与重传等;DNS,域名解析;
SNMP,简单网络管理协议;
DHCP,动态主机配置协议;
AUTOIP,IP 地址自动配置;
 PPP,点对点协议,支持 PPPoE。

30、在以太网通信中,常用的就是TCP协议,TCP是一种面向连接的、可靠的、基于 IP 的传输协议。关于TCP描述

关于 TCP 协议我们需要理解的重点如下:
①、TCP 协议工作在传输层,对上服务 socket 接口,对下调用 IP 层;
②、TCP 是一种面向连接的传输协议,通信之前必须通过三次握手与客户端建立连接关系后才可通信;
③、TCP 协议提供可靠传输,不怕丢包、乱序。
TCP 连接一旦建立,就可以在连接上进行双向的通信。任何一个主机都可以向另一个主机发送数据,数据是双向流通的,所以 TCP 协议是一个全双工的协议

31、在网络通信中,端口号本质上就是一个数字编号,用来在一台主机中唯一标识一个能上网的进程,端口号的取值范围为 0~65535。很多常见的服务器它都有特定的端口号

HTTP  服务端口号为 80  超文本传输协议
FTP  服务端口号为 21  文件传输协议,使得主机间可以共享文件
SMTP  服务端口号为 25  简单邮件传输协议,它帮助每台计算机在发送或中转信件时找到下一个目的地。
TFTP  服务端口号为69  简单文件传输协议,主机之间进行简单文件传输
SSH  服务端口号为22  安全外壳协议,专为远程登录会话和其他网络服务提供安全性的协议
Telnet  服务端口号为 23  终端远程登录协议,它为用户提供了在本地计算机上完成远程主机工作的能力。

32、以太网通信中,当数据由上层发送到传输层时,数据会被封装为 TCP 数据段,我们将其称为 TCP 报文,TCP 报文由 TCP 首部+数据区域组成。TCP首部信息不包括

TCP 报文由 TCP 首部+数据区域组成,一般 TCP 首部通常为 20 个字节大小

33、ARP协议中的免费ARP说法错误

免费 ARP可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。

34、以下关于以太网MAC帧组成错误的是

根据802.3协议规定,校验字段长度是4字节,采用CRC校验方式

35、在以太网通信中,IP 地址用于标识互联网中的每台主机的身份,关于IP地址描述,不正确的是

传统的 IP 地址是一个 32 位二进制数的地址,也叫 IPv4 地址,由 4 个 8 位字段组成。除了 IPv4 之外,还有 IPv6,IPv6 采用 128 位地址长度,8 个 16 位字段组成,本小节我们暂时不去理会 IPv6 地址。在网络通信数据包中,IP 地址以 32 位二进制的形式表示;而在人机交互中,通常使用点分十进制方式表示,譬如 192.168.1.1,这就是点分十进制的表示方式。IP 地址中的 32 位实际上包含 2 部分,分别为网络地址和主机地址,可通过子网掩码来确定网络地址和主机地址分别占用多少位。

36、在Linux以太网通信中,connect()函数原型是:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)

 该函数用于客户端应用程序中,客户端调用 connect()函数将套接字 sockfd 与远程服务器进行连接,参数 addr 指定了待连接的服务器的 IP 地址以及端口号等信息,参数 addrlen 指定了 addr 指向的 struct sockaddr对象的字节大小。客户端通过 connect()函数请求与服务器建立连接,对于 TCP 连接来说,调用该函数将发生 TCP 连接的握手过程,并最终建立一个 TCP 连接,而对于 UDP 协议来说,调用这个函数只是在 sockfd 中记录服务器IP 地址与端口号,而不发送任何数据。

37、在Linux以太网通信中,也可以通过 read()函数可以从一个socket描述符中读取指定字节大小的数据。关于read函数

read是文件I/O中的操作函数,在Linux中,也可以通过 read()函数可以从一个socket描述符中读取指定字节大小的数据。套接字描述符也是文件描述符,所以使用 read()函数读取网络数据时,read()函数的参数 fd 就是对应的套接字描述符。read()调用成功将返回读取到的字节数,此返回值受文件剩余字节数限制,当返回值小于指定的字节数时并不意味着错误;这可能是因为当前可读取的字节数小于指定的字节数,比如已经接近文件结尾,或者正在从管道或者终端读取数据,或者 read()函数被信号中断等,出错返回-1 并设置 errno,如果在调 read 之前已到达文件末尾,则这次 read 返回 0

38、在以太网通信中,我们有时候需要在点分十进制字符串和二进制地址之间进行转换。如果我们想将点分十进制表示的字符串形式转换成二进制Ipv6 地址。则可以调用函数

inet_pton()函数和inet_aton()函数都可以将点分十进制表示的字符串形式转换成二进制 Ipv4地址,但是inet_aton()函数不能转换成Ipv6 地址,inet_pton()可以。inet_ntop()和inet_ntoa ()函数是反过来的。

相关文章:

【回眸】牛客网刷刷刷!(七)——通信协议之 网络通讯

目录 前言 1、TCP/IP分层模型 2、ARP缓存 3、TCP 协议之所以提供可靠传输,不怕丢包、乱序的主要的原因是 4、以太网数据链路层MII/GMII/RMII/RGMII四种常用接口 5、在以太网通信协议LWIP中,数据包管理机构采用数据结构pbuf 分类包括 6、关于以太网…...

MySQL 安装配置

MySQL 安装配置 MySQL 是最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 MySQL由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL…...

【0824作业】C++ 拷贝赋值函数、匿名对象、友元、常成员函数和常对象、运算符重载

一、思维导图 二、作业&#xff1a;实现关系运算符的重载 关系运算符重载 概念&#xff1a; 种类&#xff1a;>、>、< 、< 、 、!表达式&#xff1a;L#R (L表示左操作数&#xff0c;R表示有操作数&#xff0c;#表示运算符)左操作数&#xff1a;既可以是左值也可以…...

ubuntu 22.04 LTS openai triton 安装

第一种方法&#xff1a; pip install triton 第二种方法&#xff0c;安装最新的版本&#xff1a; pip install -U --index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/ triton-nightly 第三种方法&#xff1a; git c…...

Android SDK 上手指南||第七章 Java应用程序编程

第七章 Java应用程序编程 如果大家已经对Java非常熟悉&#xff0c;那么不妨直接忽略这部分内容。如果大家的技巧还存在局限或者对Java这种语言只闻其名&#xff0c;那么本文将为各位解答很多在Android开发当中经常遇到的问题。需要注意的是&#xff0c;这篇文章并不能作为Java…...

Vue 框架如何获取数组中的值?

在Vue框架中&#xff0c;获取数组中的值可以通过以下几种方式实现&#xff1a; 1、使用数组索引&#xff1a; 可以使用数组的索引来获取特定位置的值。在Vue中&#xff0c;可以通过在模板中使用差值表达式或指令来获取数组中的值。例如&#xff1a; <div>{{ myArray[0]…...

如何成立一家音频芯片/算法设计公司

一 如何成立一家音频芯片设计公司&#xff1f; 要成立一家音频芯片设计公司&#xff0c;可以按照以下步骤进行&#xff1a; 市场调研&#xff1a;了解音频芯片市场的需求和竞争情况&#xff0c;确定目标客户和定位。 制定商业计划&#xff1a;根据市场调研的结果&#xff0…...

用docker-compose搭建LNMP

docker-compose搭建LNMP 一、compose 的部署1.Docker Compose 环境安装 二、编写Docker Compose1.准备依赖文件,配置nginx2.配置mysql3.配置php4.编写docker-compose.yml5.执行6.查看 一、compose 的部署 &#xff08;1&#xff09;公司在实际的生产环境中&#xff0c;需要使用…...

JavaScript:基本语法(变量与函数的定义与使用)

文章目录 script 标签srcdefer 延迟加载 基本语法定义变量 与 使用变量基本类型typeof 查看变量类型复合类型数组类型定义对象类型定义 函数定义函数使用函数 script 标签 src 和scc一样可以内嵌也可以外src外引。 一般是推荐外引。 <script src"idx.js">&l…...

树莓派4B上安装Gitlab

参考连接&#xff1a; 树莓派上使用 GitLab 搭建专业 Git 服务 | 树莓派实验室 gitlab reconfigure 卡住 ruby_block[wait for redis service socket] action run_芹菜学长的博客-CSDN博客 以及用到了讯飞星火 系统版本信息 1.进入 giblab安装页面gitlab/gitlab-ce - Instal…...

JVM 之字节码(.class)文件

本文中的内容参考B站尚硅谷宋红康JVM全套教程 你将获得&#xff1a; 1、掌握字节码文件的结构 2、掌握Java源代码如何在JVM中执行 3、掌握一些虚拟机指令 4、回答一些面试题 课程介绍 通过几个面试题初始字节码文件为什么学习class字节码文件什么是class字节码文件分析c…...

neo4j函数

1、断言函数 1all()判断是否一个断言适用于列表中的所有元素2all()判断是否一个断言至少适用于列表中的一个元素3none()如果断言不适用于列表中的任何元素&#xff0c;则返回true4single()如果断言刚好只适用于列表中的某一个元素&#xff0c;则返回true5exists()如果数据局库…...

wazuh初探系列一 : wazuh环境配置

目录 方法一&#xff1a;一体化部署 安装先决条件 第一步、安装所有必需的软件包 第二步、安装Elasticsearch 1、添加 Elastic Stack 存储库 安装 GPG 密钥&#xff1a; 添加存储库&#xff1a; 更新源&#xff1a; 2、Elasticsearch安装和配置 安装 Elasticsearch 包…...

【2023】Spring Validation中@NotNull注解、@NotBlank注解介绍以及使用

【2023】Spring Validation中NotNull注解、NotBlank注解介绍以及使用 前言一、简介spring-validation框架的常用注解 二、代码实现添加依赖1、实体举例2、Controller层:3、统一异常处理4、结果返回验证通过返回验证失败返回 前言 平常我们在编写代码的时候总需要很多if判空&am…...

nodejs+vue养老院管理系统 u1yrv

本智慧养老中心管理系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了老人信息和管理员这两者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可…...

高效PDF校对:释放高质量内容的力量

在数字化世界中&#xff0c;内容是王者。随着企业和个人越来越依赖数字文档进行沟通、分享和创新&#xff0c;我们在PDF中传递的内容的质量变得至关重要。在这里&#xff0c;我们将探索高效的PDF校对如何帮助您释放高质量内容的真正潜力。 超越仅仅是“正确” 当我们谈论PDF校…...

【Git游戏】提交的技巧

修改历史的提交 rebase 通过git rebase -i 将要修改的提交提到最前端&#xff0c; 然后修改&#xff0c;再通过git commit --amend提交该记录&#xff0c;最后通过git rebase -i 在替换会原始的位置 &#xff08;该过程中有可能会产生rebase confict&#xff09; cherry-pick …...

SQL注入读写文件

文章目录 条件利用SQL注入漏洞读取hosts文件查看文件读写权限安全选项允许导入导出读取hosts文件 利用SQL注入漏洞写入一句话木马&#xff0c;并用蚁剑连接webshell写入文件 条件 SQL注入有直接SQL注入&#xff0c;也有文件读写时的注入&#xff0c;后者的主要 目的在于获取web…...

stm32之12.如何使用printf打印输出

主函数增加这些代码即可实现printf打印输出 需要添加头文件 #include "stdio.h" --------------- 源码 struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int c, FILE *f) { /* 发送一个字节 */ …...

敏感挂载hotplug容器逃逸分析与复现

前言 分析 实验 echo /path/to/hotplug/script > /proc/sys/kernel/hotplug 直接挂载设备即可&#xff0c;虚拟机直接启动或者卸载一下声卡就行 参考 Linux uevent分析、用户接收uevent以及mdev分析 - ArnoldLu - 博客园 (cnblogs.com)...

RTThread学习有关的Keil的两个符号 $Sub$ $main 与 $Super$ $main

Keil的两个符号$Sub$ $与 $Super$ $是其做的打“补丁”功能 具体调用方法就是程序中包含有main函数&#xff0c;和 $Sub$ $main 、 $Super$ $main 两个符号 源码先放出来 /* re-define main function */ int $Sub$$main(void) {rtthread_startup();return 0; }/*** brief Thi…...

Python实现企业微信群告警

Python实现企业微信告警 1. 创建企业微信群机器人 1-1. 什么是企业微信群机器人&#xff1f; 企业微信群机器人是企业微信平台提供的一种功能&#xff0c;可以通过Webhook方式将消息发送到指定的企业微信群中。它可以用于自动化发送通知、告警等信息&#xff0c;实现监控和信…...

python基础教程:re模块用法详解

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、正则表达式的特殊字符介绍 正则表达式 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ 素材、视频教程、完整代码、插件安装教程我都准备好了&a…...

基于亚马逊云科技无服务器服务快速搭建电商平台——部署篇

受疫情影响消费者习惯发生改变&#xff0c;刺激了全球电商行业的快速发展。除了依托第三方电商平台将产品销售给消费者之外&#xff0c;企业通过品牌官网或者自有电商平台销售商品也是近几年电商领域快速发展的商业模式。独立站电商模式可以进行多方面、全渠道的互联网市场拓展…...

git介绍+集成到IDEA中+使用gitee

目录 git介绍 本地工作流程 IDEA集git 添加到暂存区 添加到本地仓库 gitee使用 添加到远程仓库 git介绍 git是一个开源的分布式版本控制工具&#xff0c;效率高。可以记录历史代码&#xff0c;多人代码共享 知识小点&#xff1a; 集中式版本控制&#xff1a;使用中央存…...

【java】【项目实战】[外卖四]分类管理业务开发

前言&#xff1a;公共字段自动填充实现&#xff0c;删除业务逻辑实现 一、公共字段自动填充 1.1 问题分析 1.2 代码实现 1.2.1 修改实体类Employee package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.…...

【Go 基础篇】Go语言包详解:模块化开发与代码复用

介绍 在Go语言中&#xff0c;包&#xff08;Package&#xff09; 是一种用于组织代码的机制&#xff0c;用于将相关的函数、类型和变量等组织在一起&#xff0c;以便于模块化开发和代码复用。包的使用能够使程序结构更加清晰、可维护性更高&#xff0c;同时也是Go语言强调的一…...

【业务功能篇82】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-进阶实战

四、ElasticSearch进阶 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 1.ES中的检索方式 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri检索参数)通过使用 REST request body 来发送检索参数…...

【工具】XML和JSON互相转换

1、JSON解析为XML function parseJSONToXML(json) {let xmlDoc document.implementation.createDocument(null, );function parseValue(value, parentElement) {if (Array.isArray(value)) {for (let item of value) {let arrayElement xmlDoc.createElement(parentElement.…...

前端面试:【浏览器与渲染引擎】Web APIs - DOM、XHR、Fetch、Canvas

嗨&#xff0c;亲爱的读者&#xff01;当我们在浏览器中浏览网页时&#xff0c;我们常常会与各种Web API打交道。这些API允许我们与网页内容、服务器资源和图形进行交互。本文将深入探讨一些常见的Web API&#xff0c;包括DOM、XHR、Fetch和Canvas&#xff0c;以帮助你了解它们…...

编码基础一:侵入式链表

一、简介概述 1、普通链表数据结构 每个节点的next指针指向下一个节点的首地址。这样会有如下的限制&#xff1a; 一条链表上的所有节点的数据类型需要完全一致。对某条链表的操作如插入&#xff0c;删除等只能对这种类型的链表进行操作&#xff0c;如果链表的类型换了&#…...

深圳IT行业供需:蓬勃发展的科技中心

深圳作为中国的科技中心之一&#xff0c;IT行业在这座城市蓬勃发展。本文将探讨深圳IT行业的供需状况&#xff0c;包括就业机会、技能需求以及行业前景展望。 近年来&#xff0c;深圳IT行业迅速发展&#xff0c;成为全球科技创新的重要枢纽之一。随着大量的科技企业和初创公司在…...

LeetCode 面试题 02.01. 移除重复节点

文章目录 一、题目二、C# 题解 一、题目 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 点击此处跳转题目。 示例1: 输入&#xff1a;[1, 2, 3, 3, 2, 1] 输出&#xff1a;[1, 2, 3] 示例2: 输入&#xff1a;[1, 1, 1, 1, 2] 输出&#xff1a;[1, …...

【Java8特性】——Stream API

一、概述 <1> 是什么 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 Stream 不会存储数据Stream 不会改变数据源&#xff0c;相反&#xff0c;会返回一个持有结果的新Stream。Stream 操作是延迟执行的&#xff0c;这意…...

grep命令的用法

文章目录 前言一、使用说明二、应用举例 前言 grep 命令用于查找文件里符合条件的字符串。 一、使用说明 -r: 如果需要搜索目录中的文件内容, 需要进行递归操作, 必须指定该参数 -i: 对应要搜索的关键字, 忽略字符大小写的差别 -n: 在显示符合样式的那一行之前&#xff0c;标…...

【无标题】jenkins消息模板(飞书)

这里写目录标题 Jenkins 安装的插件 发送消息到飞书预览 1 &#xff08;单Job&#xff09;预览 2 &#xff08;多Job&#xff0c;概览&#xff09; Jenkins 安装的插件 插件名称作用Rebuilder Rebuilder。 官方地址&#xff1a;https://plugins.jenkins.io/rebuild 安装方式&a…...

2023年国赛 高教社杯数学建模思路 - 案例:随机森林

文章目录 1 什么是随机森林&#xff1f;2 随机深林构造流程3 随机森林的优缺点3.1 优点3.2 缺点 4 随机深林算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff…...

element Collapse 折叠面板 绑定事件

1. 点击面板触发事件 change <el-collapse accordion v-model"activeNames" change"handleChange"><el-collapse-item title"一致性 Consistency"><div>与现实生活一致&#xff1a;与现实生活的流程、逻辑保持一致&#xff0c…...

CSS :mix-blend-mode、aspect-ratio

mix-blend-mode 元素的内容应该与元素的直系父元素的内容和元素的背景如何混合。 mix-blend-mode: normal; // 正常mix-blend-mode: multiply; // 正片叠底mix-blend-mode: screen; // 滤色mix-blend-mode: overlay; // 叠加mix-blend-mode: darken; // 变暗mix-blend-mode: …...

Module not found: Error: Can‘t resolve ‘less-loader‘解决办法

前言&#xff1a; 主要是在自我提升方面&#xff0c;感觉自己做后端还是需要继续努力&#xff0c;争取炮筒前后端&#xff0c;作为一个全栈软阿金开发人员&#xff0c;所以还是需要努力下&#xff0c;找个方面&#xff0c;目前是计划学会Vue&#xff0c;这样后端有java和pytho…...

量化QAT QLoRA GPTQ

模型量化的思路可以分为PTQ&#xff08;Post-Training Quantization&#xff0c;训练后量化&#xff09;和QAT&#xff08;Quantization Aware Training&#xff0c;在量化过程中进行梯度反传更新权重&#xff0c;例如QLoRA&#xff09;&#xff0c;GPTQ是一种PTQ的思路。 QAT…...

CentOS下查看 ssd 寿命

SSD写入量达到设计极限&#xff0c;颗粒擦写寿命耗尽后会导致磁盘写入速度非常缓慢&#xff0c;读取正常。 使用smartctl及raid卡管理软件查看硬盘smart信息可以发现Media_Wearout_Indicator值降为1&#xff0c;表明寿命完全耗尽。 涉及范围 所有SSD处理方案 查看SSD smart信…...

Node基础--npm相关内容

下面,我们一起来看看Node中的至关重要的一个知识点-----npm 1.npm概述 npm(Node Package Manager),CommonJS包规范是理论,npm是其中一种实践。 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助npm,Node与第三方模块之间形成了很好的一个 生态系统。(类…...

Python图片爬虫工具

不废话了&#xff0c;直接上代码&#xff1a; import re import os import requests import tqdmheader{User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36}def getImg(url,idx,path):imgre…...

制造执行系统(MES)在汽车行业中的应用

汽车行业在不断发展中仍然面临一些挑战和痛点。以下是一些当前汽车行业可能面临的问题&#xff1a; 1.电动化和可持续性转型&#xff1a;汽车行业正逐渐向电动化和可持续性转型&#xff0c;但这需要投入大量资金和资源&#xff0c;包括电池技术、充电基础设施等&#xff0c;同时…...

Spring与Mybatis集成且Aop整合

目录 一、集成 1.1 集成的概述 1.2 集成的优点 1.3 代码示例 二、整合 2.1 整合概述 2.2 整合进行分页 一、集成 1.1 集成的概述 集成是指将不同的组件、部分或系统组合在一起&#xff0c;以形成一个整体功能完整的解决方案。它是通过连接、交互和协调组件之间的关系来实…...

【nonebot-plugin-mystool】快速安装使用nonebot-plugin-mystool

快速安装使用nonebot-plugin-mystool&#xff0c;以qq为主 前期准备&#xff1a;注册一个QQ号&#xff0c;python3.9以上的版本安装&#xff0c;go-cqhttp下载 用管理员模式打开powershell&#xff0c;并输入以下命令 #先排查是否有安装过的nonebot,若有则删除 pip uninstal…...

js实现数据关联查找更新。数据求和验证

为了实现这个功能我们和后端定义了数据结构 data:{id&#xff1a;‘’&#xff0c;formInfo:,formInfo2:,formInfo3:,formInfo4:, ......deailData:[ // 明细数据 // saleData 查询带出的对应明细序列号数据{ id:, ocopyId:, copyId:, odoId:, ......, saleData:[ { id:, oc…...

区块链上地址与银行账户有什么区别?

在区块链世界中&#xff0c;除了交易还有另一个基础要素&#xff1a;地址。在日前推出的Onchain AML合规技术方案&#xff0c;也有一个与区块链地址密切相关的概念&#xff1a;KYA(Know Your Address&#xff0c;了解你的地址)。 那问题来了&#xff0c;区块链地址究竟有什么用…...

CF 148 D Bag of mice(概率dp求概率)

CF 148 D. Bag of mice(概率dp求概率) Problem - 148D - Codeforces 大意&#xff1a;袋子里有 w 只白鼠和 b 只黑鼠 &#xff0c;A和B轮流从袋子里抓&#xff0c;谁先抓到白色谁就赢。A每次随机抓一只&#xff0c;B每次随机抓完一只之后会有另一只随机老鼠跑出来。如果两个人…...