写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线。 我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模。...在那个时候,彼时的联想佳沃蓝莓基地依旧用数据库轮询的方式来支持物联网设备,和他们对接的时候,发现经常会因为遇到网络层面的问题而愁眉不展,而彼时的我们却因为我们可以在任何设备上自动/手动控制我们的设备而高兴不已...在TCP进行数据传输的过程中,主机A传输数据给主机B,假设第一次A传输512字节的数据给B,那么seq=1;当B收到这512字节的时候,会将seq进行累加来避免乱序,在这里,B会将seq重新设置为512...>>粘包拆包 粘包拆包,顾名思义,粘包,就是指数据包黏在一块了;拆包,则是指完整的数据包被拆开了。由于TCP通讯过程中,会将数据包进行合并后再发出去,所以会有这两种情况发生,但是UDP通讯则不会。...第四种情况,A数据包的一部分先被接收,然后收到A数据包的剩余部分和B数据包的完整部分,此种情况,即发生了拆包现象,即A数据包被拆分。 ?
write() 方法发送数据时,另一端会通过 socket.on('data') 事件接收到,可以理解为读取数据 end: 每次 socket 链接会出现一次,例如客户端发送消息之后执行 Ctrl +...这也是在 TCP 中常见的粘包问题,客户端(发送的一端)在发送之前会将短时间有多个发送的数据块缓冲到一起(发送端缓冲区),形成一个大的数据块一并发送,同样接收端也有一个接收端缓冲区,收到的数据先存放接收端缓冲区...当网络中充斥着大量小数据块时,Nagle 算法能将小的数据块集合起来一起发送减少了网络拥堵,这个还是很有帮助的,但也并不是所有场景都需要这样,例如,REPL 终端交互,当用户输入单个字符以获取响应,所以在...因为其是在服务端完成合并,TCP 接收到数据会先存放于自己的缓冲区中,然后通知应用接收,应用层因为网络或其它的原因若不能及时从 TCP 缓冲区中取出数据,也会造成 TCP 缓冲区中存放多段数据块,就又会形成粘包...如果当前 buffer 长度数据小于包头,肯定不是一个完整的数据包,因此直接返回 0 不做处理(可能数据还未接收完等等) * 2.
-nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。 -A:以ascii的方式显示数据包,抓取web数据时很有用。 -X:数据包将会以16进制和ascii的方式显示。...TCP、UDP作为传输层,假如只想监听TCP的数据包 tcpdump tcp 来源主机+端口+TCP 监听来自主机123.207.116.169在端口22上的TCP数据包 tcpdump tcp port...eth1的包 (3)-t : 不显示时间戳 (4)-s 0 : 抓取数据包时默认抓取长度为68字节。...加上-S 0 后可以抓到完整的数据包 (5)-c 100 : 只抓取100个数据包 (6)dst port !...22 : 不抓取目标端口是22的数据包 (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24 (8)-w .
TCP、UDP作为传输层,假如只想监听TCP的数据包 tcpdump tcp 来源主机+端口+TCP 监听来自主机 123.207.116.169 在端口 22 上的TCP数据包 tcpdump tcp...eth1的包 (3)-t : 不显示时间戳 (4)-s 0 : 抓取数据包时默认抓取长度为68字节。...加上-S 0 后可以抓到完整的数据包 (5)-c 100 : 只抓取100个数据包 (6)dst port !...22 : 不抓取目标端口是22的数据包 (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24 (8)-w ....保存到本地 备注:tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘 tcpdump -n -vvv -c 1000 -w /tmp/
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。...在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。...这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。 "至少一次",确保消息到达,但消息重复可能会发生。...这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。...固定头的第二字节用来保存变长头部和消息体的总大小的,但不是直接保存的。这一字节是可以扩展,其保存机制,前7位用于保存长度,后一部用做标识。当最后一位为1时,表示长度不足,需要使用二个字节继续保存。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。...在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 ?...这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。 "至少一次",确保消息到达,但消息重复可能会发生。 "只有一次",确保消息到达一次。...这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。...固定头的第二字节用来保存变长头部和消息体的总大小的,但不是直接保存的。这一字节是可以扩展,其保存机制,前7位用于保存长度,后一部用做标识。当最后一位为1时,表示长度不足,需要使用二个字节继续保存。
服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包 tcpdump tcp 来源主机+端口+TCP 监听来自主机123.207.116.169在端口22上的TCP数据包 tcpdump...的包 (3)-t : 不显示时间戳 (4)-s 0 : 抓取数据包时默认抓取长度为68字节。...加上-S 0 后可以抓到完整的数据包 (5)-c 100 : 只抓取100个数据包 (6)dst port !...22 : 不抓取目标端口是22的数据包 (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24 (8)-w ....1000 保存到本地 备注:tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘 tcpdump -n -vvv -c 1000 -
这有助于软件进行进一步的处理和决策,以确保接收到的IP数据包的完整性和准确性。 TCPCS (bit 5): 在接收数据包时,硬件可以执行TCP/UDP校验和计算。...TCP/UDP校验和用于验证TCP或UDP数据包的完整性。...而当IXSM位被设置为0b时,IPCS和TCPCS位会指示硬件是否对接收到的数据包执行了IP或TCP/UDP校验和计算。 当IPCS位被设置为0b时,表示硬件没有执行IP校验和计算。...需要注意的是,只有当描述符的EOP和DD位同时被设置时,错误位才是有效的。这意味着当接收到完整的数据包并且硬件已经完成对描述符的处理时,才能读取错误位来获取错误信息。...TCPE (bit 5) 当设置了"TCP/UDP Checksum Error"(TCP/UDP校验和错误)位时,表示在接收到的数据包中检测到了TCP/UDP校验和错误。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 ...在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。...这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。 “至少一次”,确保消息到达,但消息重复可能会发生。 “只有一次”,确保消息到达一次。...这就是为什么在介绍里说它非常适合“在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。...当剩余长度使用1个字节存储时,其取值范围为0(0x00)~127(0x7f)。 当使用2个字节时,其取值范围为128(0x80,0x01)~16383(0Xff,0x7f)。
接收缓冲区是在操作系统内核中为接收数据包而分配的一块内存区域,一旦数据帧被复制到接收缓冲区,网卡会向主机发起硬中断信号,通知操作系统有新的数据包到达。...来处理接收到的数据包。。...列 说明 RX packets 设备已接收的数据包数 TX packets 设备已发送的数据包数 errors 发送或接收时的错误数 dropped 发送或接收时丢弃的数据包数 overruns 网络设备没有足够的缓冲区来发送或接收一个数据包的次数...包含三个整数的列表,表示 最小、默认和最大(以字节为单位)。TCP 接收缓冲区用于存储从网络接收到的数据,等待应用程序读取。 net.ipv4.tcp_wmem:配置 TCP 套接字发送缓冲区的大小。...当碎片缓冲区的使用率低于该阈值时,内核会停止丢弃新到达的碎片。 net.ipv4.ipfrag_max_dist 是一个用于限制数据包分片重组的内核参数。
任何类型的整数/缓冲区溢出漏洞都可能引起物联网设备被攻击的风险。...C.窃听攻击 此攻击是指来自目标物联网设备的数据流量被中间人(MITM)嗅探,该中间人能够提取关键网络信息用于进一步的攻击。...接下来,建立IP表和一个通过接口wlan0转发IP数据包的虚拟机(VM),将hostapd设置为虚拟WAP并将设备注册到其中。 使用Wireshark可以嗅到设备传输的数据包 ?...F.社会工程攻击 通过提取用户的私有信息,攻击者可以在家庭网络中对用户进行预归档,从而影响物联网设备的数据机密性和数据完整性。...当无人机在飞行中时,应该关闭未使用的控制服务,如FTP和Telnet及其相应的接口/调试端口。 H.恶意节点插入 这种攻击,是指软件恶意节点被插入到网络中。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。...在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。...这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。 (2)“至少一次”,确保消息到达,但消息重复可能会发生。...这就是为什么在介绍里说它非常适合”在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。...固定头的第二字节用来保存变长头部和消息体的总大小的,但不是直接保存的。这一字节是可以扩展,其保存机制,前7位用于保存长度,后一部用做标识。当最后一位为1时,表示长度不足,需要使用二个字节继续保存。
,最大值65535 校验和:UDP头部,UDP数据,UDP伪头部的累加校验和 udp协议的问题 面向无连接:即使对方不存在也会直接发送数据包,所有连接共用同一个缓冲区 没有流控:在接收到用户数据的那一刻原样发送出去...窗口收缩:快的发送方遇到慢的接收方时,为了提高链接利用率,当窗口小于MSS时通告窗口为0导致窗口收缩,RCF不建议此做法 零窗口:当窗口左边延到达窗口右边沿时,通告窗口为0,通告窗口为0时,发送方不能发送数据...当有错乱分组到达时不应延迟确认需要及时回复重复确认 收到一个重复确认意味着一个数据包到达目的主机 rto超时的拥塞避免 初始值:cwnd = 1 ,ssthresh = 65535 超时时:ssthresh...tcp放弃重传才会返回错误 如果另一端不主动写入,永远无法发现对端异常 机器崩溃并重启 机器重启后,该链接丢失,内核不会为该链接重新建立tcb数据,因此当收到该链接的数据包时,内核将响应rst报文 另一端...关闭整个链接会导致半关链接,需要在收到对端发送的FIN报文之后,及时关闭链接 Tcp协议总结 tcp的可靠性基于对发送数据按字节排序,并将发送数据暂存在发送缓冲区中,直到收到来自对方的对应确认报文后才会删除
可变长度头部,它驻位于固定的头和负载之间。可变头的内容因数据包类型而不同,较常的应用是作为包的标识:很多类型数据包中都包括一个2字节的数据包标识字段。...以下情况下可以选择 QoS 2 不能忍受消息丢失(消息的丢失会造成生命或财产的损失),且不希望收到重复的消息。 数据完整性与及时性要求较高的银行、消防、航空等行业。...当长时间无法收到设备的 PINGREQ 的时候,Broker 就会认为设备已经下线。 CoAP 是一种专用的Web传输协议,用于受约束的节点和网络。...支持可靠传输,数据重传,块传输 支持IP多播, 即可以同时向多个设备发送请求 非长连接通信,适用于低功耗物联网场景。...由开发移动联盟(OMA)提出,是一种轻量级的、标准通用的物联网设备管理协议,可用于快速部署客户端/服务器模式的物联网业务。 总结对比
3.1 数据的发送 发送数据的步骤如下: 协议栈将收到的数据写入发送缓冲区; 协议栈根据 MTU(网络包最大长度)减去头部长度,得到单个包的长度,对缓冲区中的数据进行拆分,然后将拆分后的数据逐个发送,如果达到计时器时间缓冲区中仍然不足一个包...,此时,子网中可以处理这一 IP 地址的设备就会向发出广播的设备发送回应,报告自己的 MAC 地址,当协议栈 IP 模块接收到设备的回应时,就可以将这个 ip 地址与回应中的 mac 地址相关联,并存储在刚刚提到的那块缓存中...MAC 模块将以太网包从缓冲区中取出,在数据包的前后分别拼接上报头、分隔符和校验序列,从而形成一个互联网帧。...MAC 模块将电信号或光信号转换为 0/1 的数据,并存储在接收缓冲区中,当 MAC 模块完成一整个互联网帧的接收工作后,他就会检查 FCS 来确认包的内容没有在传输过程中发生紊乱,如果存在紊乱,则丢弃这个包...,获取到接收到的原始数据,一次完整的接收过程就这样完成了。
物理层涉及通信信道上传输的原始比特流(bits),它的功能主要是为数据端设备提供传送数据的通路以及传输数据。...表示层关心所传输数据信息的格式定义,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。...TCP/IP参考模型 -网络接口层 TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着物理层和数据链路层。 互联网层 ( IP层 ) 互联网层是整个TCP/IP协议栈的核心。...所以说,当一个read操作发生时,它会经历两个阶段: 等待数据准备 将数据从内核拷贝到进程中 IO模型的分类有下: 阻塞 I/O(blocking IO) 非阻塞 I/O(nonblocking...比如,还没有收到一个完整的UDP包。这个时候kernel就要等待足够的数据到来)。这个过程需要等待,也就是说数据被拷贝到操作系统内核的缓冲区中是需要一个过程的。
根据序列号对收到的包进行正确的排序,再交给应用层;会丢弃掉序列号相同的数据包) ❝序列号回绕 原因:序列号大小为4个字节,当传输的数据超过2^32后,下一个报文的序列号可能会变成比上一个更小。...❝发送数据包后,会启动一个定时器,如果在一定时间(RTO 超时重传的时间)内没有收到对端的ACK确认,会进行重传,称为超时重传 当发送端收到3个或以上相同的ACK包时,就意味着之前有报文丢失了,会立刻进行重传...SACK来记录自己接收到的数据包的序列号范围,发送端通过这个可以知道需要重传哪些数据包 ❞ 流量控制 为什么需要流量控制 ❝数据包到接收端的接收缓冲区后,应用程序从缓冲区读取数据,但可能由于应用程序处理速度较慢...,考虑到在TCP/IP各层中,只有传输层有重传机制,在传输过程中,分段发生丢失、损坏时,可以通过TCP的重传机制保证接收方能收到完整的数据包,所以分段的工作应该由传输层完成。...各种特性 nagle算法(减少频繁发送小包给对端) 「原理」 第一次发送时,不需要等待,立刻将包发送给对端 后面的数据需要满足一定条件才会进行发送 如果当前有【已发送未确认】的数据报文时,TCP会先将待发送数据先放到缓冲区
TCP/IP 四层模型: TCP/IP 时 20 世纪 70 年代中期美国国防部为 APPANET 开发的网络体系协议,所有协议基于此类标准进行开发,此协议为所有厂商制定网络设备提供了一套完整的系统标准...第二 bit 为 0 时表示可以对数据报进行分片,如果该位是 1 表示数据报不能分片。当该位设置为 1 而帧长度不匹配又必须分片时,设备就会将数据报丢弃并返回错误信息。...⑫ Padding: :当 IP 报文头长度不是 32bit 的整数倍时,填充 0 来凑齐 32bit 整数倍,没有实际意义。 ⑬ Data: :来自第 4 层的数据段。...IP 数据报是网络层的数据单元,它需要被封装在第二层的数据帧中来传输。互联网是由各种二层规范不同的网络互联起来的产物,这些不同的网络的帧格式及帧长度各不相同。...“ 注:如何区分数据包使用哪种格式: ” ① 当数据包的长度大于或等于 1536Byte 时为 Ethernet_II 协议封装。
TCP/IP 四层模型: TCP/IP 时 20 世纪 70 年代中期美国国防部为 APPANET 开发的网络体系协议,所有协议基于此类标准进行开发,此协议为所有厂商制定网络设备提供了一套完整的系统标准...第二 bit 为 0 时表示可以对数据报进行分片,如果该位是 1 表示数据报不能分片。当该位设置为 1 而帧长度不匹配又必须分片时,设备就会将数据报丢弃并返回错误信息。...⑫ Padding: :当 IP 报文头长度不是 32bit 的整数倍时,填充 0 来凑齐 32bit 整数倍,没有实际意义。 ⑬ Data: :来自第 4 层的数据段。...IP 数据报是网络层的数据单元,它需要被封装在第二层的数据帧中来传输。互联网是由各种二层规范不同的网络互联起来的产物,这些不同的网络的帧格式及帧长度各不相同。...❝ 注:如何区分数据包使用哪种格式: ① 当数据包的长度大于或等于 1536Byte 时为 Ethernet_II 协议封装。
领取专属 10元无门槛券
手把手带您无忧上云