网络原理TCP_IP

文章目录

    • 应用层
      • 自定义协议
    • 传输层
      • udp协议
      • TCP协议
        • 1.确认应答
        • 2.超时重传
        • 3.连接管理
          • 建立连接, 三次握手
          • 断开连接, 四次挥手
          • tcp的状态
        • 4.滑动窗口
        • 5.流量控制
        • 6.拥塞控制
        • 7.延时应答
        • 8.携带应答
        • 9.面向字节流
        • 10.异常情况
    • 网络层
      • IP协议
        • 地址管理
        • 路由选择
    • 数据链路层
      • 以太网

应用层

自定义协议

客户端和服务器之间往往要进行交互的是“结构化数据”,网络传输的数据其实是字符串/二进制bit流。约定协议的过程中,就是把结构化数据转成字符串/二进制bit流的过程。

  • 把结构化数据,转成字符串/二进制比特流这个操作,称为序列化
  • 把字符串/二进制比特流还原成结构化数据这个操作,称为反序列化

序列化/反序列化具体要组织成什么样的格式,这里包含哪些信息,约定这两件事的过程就是 自定义协议的过程。

自定义协议,要约定好两方面内容

  1. 服务器和客户端之间要交互哪些信息
  2. 数据的具体格式

客户端按照约定发送请求,服务器按照约定来解析请求。
服务器按照约定构造响应,客户端按照约定来解析请求。

传输层

udp协议

UDP的特点是无连接,不可靠传输,面向数据报,全双工的。

研究一个协议主要是研究它的报文格式。下面是大学课本中常见的报文格式。
在这里插入图片描述

下面是比较准确的报文格式
在这里插入图片描述

  • udp报头中一共有四个字段,每个字段2个字节。由于一个报头中使用2个字节表示端口号,端口号的取值范围就是0~65535,即64kb。同理一个数据报长度也是64kb,不能在长了。然而在当今互联网时代,64kb是非常小的。一旦数据报长度超过64kb,后面的数据可能会出现截断。如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。
  • 校验和起到的效果,就是去尝试检查当前传输的数据是否存在问题?是否出现了bit翻转?如果发现出现问题,就可以把这个错误的数据报丢掉,避免将错就错。
    校验和可以采用下面几个方法
  1. CRC算法,即循环冗余算法。UDP 数据报发送方,在发送之前,先计算一遍 CRC,把算好的 CRC 值放到 UDP 数据报中,(设这个 CRC 值为value1)。接下来这个数据包通过网络传输到达接收端,接收端收到这个数据之后,也会按照同样的算法,再算一遍 CRC的值,得到的结果是value2. 比较自己计算的 value2 和收到的 value1 是否一致 如果是一致的,就说明的数据是 ok的.如果不一致,传输过程中发生了比特翻转了. 上述 CRC 算法中,如果只有一个 bit 位发生翻转,此时100%能够发现问题。如果有两个/多个bit位发生翻转,有可能恰好校验和和之前一样!!这样的情况概率比较低,可以忽略不计。
  2. md5算法/sha1算法。这两个算法类似,都具有下面几个特点。
    1.定长。无论原始数据多长, 算出来的 md5 的最终值都是固定长度
    常见的 md5 有 16 位版本(2字节),32位版本(4字节),64位版本 (8字节)。
    2.分散。计算 md5 的过程中, 原始数据,只要变化一点点,算出来的 md5 值就会差异很大.网络传输中,如果出现 bit 翻转, 意味着只是极少的 bit 翻转了即使就只是翻转 1 bit, 最终得到的 md5 都会差异非常大。
    3.不可逆。给你一个源字符串,计算 md5 值很简单。但给一个计算好的md5值计算源字符串是很难的。也常用于加密。

TCP协议

TCP的特点是有连接的,可靠传输,面向字节流和全双工。下面先看看tcp的报文格式。
在这里插入图片描述

  • 四位首部长度:即报头的长度。tcp报头的前20字节都是固定不变的,而后面的选项长度是可变的。可以有也可以没有。4个比特位表示的范围是0~15,这里设置的单位是4字节,而不是字节。这里的4位表示的就是15*4为60字节。报头的长度是60字节,选项的长度是20字节。
  • 保留(6位):在udp中数据报的长度是2个字节,无法在进行扩展,tcp在设置报头的时候保留6位,在扩展的时候可以使用保留位避免扩展不兼容的问题。
  • 六位标志位,tcp最核心的部分。在这里插入图片描述
1.确认应答
  • tcp中核心的功能是可靠传输,而在网络通信中,不可能100%把数据发送出去,只能尽量将数据发送出去,发送方能够知道对方是否收到数据,就认为是可靠了。
  • 为了确保可靠性,最核心的机制就是“确认应答”,发送方发送一条消息,接收方收到消息回复一条应答消息。但在网络通信中经常会出现发送方或者接收方连续发送多条消息,出现“后发先至”的情况。
  • 出现“后发先至”的原因。在网络通信中,网络通信环境错综复杂,两台设备通过多个路由器交换机连接,一个数据报从发送方到接收方走的路径可能是不一样的,可能出现后发的先到达的情况。
  • 为了解决“后发先至”的情况,引入了序号和确认序号,对于数据进行编号,应答报文就可以告诉发送方,我这次应答的是那个数据。tcp是面向字节流的,是以字节位单位进行传输的,tcp的序号和确认序号都是以字节位单位进行编号的。
    序号:针对tcp的每一个字节进行编号在这里插入图片描述 > 确认序号:应答报文中的确认序号是发送过去的最后一个序号加1 > 在这里插入图片描述
    在确认应答中,通过应答报文反馈给发送方。**应答报文也叫做ack报文 **,平时报头中ack值为0,如果当前报文是应答报文,此时报头中ack的值为1

tcp可靠性的核心机制是有确认应答,而不是“进行了三次握手”

2.超时重传
  • 在网络通信中,若传输顺利,通过应答报文就可以告诉发送方,当前数据是否收到,但在网络上可能出现 “丢包” 的情况,如果数据丢了,没有到达接收方,也不会有Ack报文。
  • tcp的可靠性就是在对抗丢包,发送方在发送数据之后会等待一定的时间,若等了好久(超时),ack还没有等到,此时发送方认为出现丢包,当认为丢包后,就会把刚才的数据重新发送一次(重传
  • 出现 “ 丢包” 的原因:在网络中,可能存在某个时刻,某个路由器/交换机的负载量过高,短时间内有大量数据要经过这个设备进行转发,当高负载超过这个设备的极限的时候就会出现丢包。
  • 上面的过程中,认为没有收到ack就是丢包了,但可能是应答中的数据报丢了,也会重新发送。在这里插入图片描述 Tcp socket在内核中存在接收缓冲区(一块内存空间)发送方发来的数据会先放到缓冲区中,然后应用程序调用read/sanner.next才能读到数据。当数据到达缓冲区中在这里插入图片描述
    接收方就会先判定当前缓冲区是否已有这个数据(或者是否曾经存在过),如果有或曾经存在直接把这个重复发来的数据丢弃,就能确保应用程序在调用read/scanner.next出现重复数据。接收缓冲区不仅能够进行去重,还能进行排序。

接收方如何判断这个数据是不是重复数据

  1. 数据还在缓冲区中,还没有被read走。 此时就拿着新收到的序号和缓冲区中的序号对一下,看有没有一样的,若有,就是重复的数据,把新收的的数据丢掉。
  2. 数据在缓冲区中已经被read走,此时新来的数据无法再缓冲区中查到。应用程序在读取数据的时候是按照序号的先后顺序读取的,先读1-1000,1001-2000, 2001-3000一定是先读序号小的在读序号大的,比如上一次读到的是3000,新收到的数据是1001,则这个1001一定是已经被读过的树,此时可以判定这个新的数据包是“重复的包”,可以直接丢弃。

超时会重传,也不是无限重传

  1. 重传次数也是有上限的,重传到一定程度还没有ack,就尝试重置连接,如果重置也失效,就放弃连接。
  2. 重传的超时时间的阈值,会随着重传次数的增加而增大。
3.连接管理
建立连接, 三次握手

tcp是有连接的,在建立连接的过程中,应用程序只是调用socket api,而真正建立连接的过程是由操作系统的内核来完成的。操作系统完成建立连接的操作叫做 “三次握手” 。建立连接的目的是让通信双方保存对方的相关信息。下面是三次握手的具体过程。
在这里插入图片描述

  1. 第一次握手是向服务器发送一个syn同步报文段,所谓的syn是一个特殊的tcp数据报。此时的作用是告诉服务器我要和你建立连接。
  • 没有载荷,不会携带应用层数据,但有ip报头,以太网数据帧头,以及tcp报头。tcp报头中就保存了客户端自己的端口,IP报头中就包含了客户端自己的IP。
  • 六个标志位中的第五位,为1.
  1. 服务器在收到syn后,会返回ack(确认应答),接下来还会在返回syn,此时的作用是告诉客户端我收到请求并同意建立连接。
  2. 最后客户端向服务器返回一个确认应答。

所谓的建立连接就是通信双方各自给对方发送一个syn,各自给对方回应一个ack。

  • 在上图的建立连接过程中,是有四次交互,但服务器给客户端发送到的两条数据可以合并. syn是第五个标志位为1, ack是第二个标志位为1,这样完全可以用一个tcp数据包就可以发送,既能应答上个请求,也能发起syn,网络传输设计到封装回和分用,两个合并既提高了效率,有降低了成本,最终形成三次握手.
    在这里插入图片描述

为什么要加进行三次握手

  1. 可以先针对通信路径进行投石问路,初步确认通信链路是否正常(可靠性的前提条件)
  2. 可以验证通信双方,发送数据的能力和接受数据能力是否正常(为啥要进行三次握手?两次行不行(服务器无法确认自己的发送能力和客户端的接受能力)?四次行不行(多余了))
  3. 三次握手的过程中也会协商一些必要的参数
    tcp中有很多参数需要协商,都是在数据包 “选项” 中体现的. 其中,TCP的 “序号” 和 “确认序号” 还是听重要的,tcp的序号 和 确认序号的初始值都不是从0 或 1开始的,而是从一个较大值开始往后计算的.即使是同一个客户端和服务器每次连接的初始值都是不一样的.
断开连接, 四次挥手

在建立连接的过程中,是通信双方保存对端的信息,断开连接的目的是将对端的信息从数据结构中删除/释放掉. 下面是四次挥手的具体过程.
在这里插入图片描述
四次挥手和三次握手的方式大致相同,只是发送的数据不同,但四次挥手不能像三次握手一样将中间的两步合并,三次握手中间两不触发机制完全相同,和应用程序代码无关,可以合并,但四次挥手服务器调用ack是内核来完成的,而服务器发送fin是服务器代码调用close()方法才能发送fin,在这个时间段,间隔时间可能很长,也有可能很短,不一定能将两步合并为一步.

总结三次握手和四次挥手的相同之处和不同之处

  1. 相同之处: 都是通信双方给对方发送一个syn/fin, 给对方回应一个ack.
  2. 不同之处: 三次握手可以合并,四次挥手不一定能合并.
    三次握手,必须是客户端主动,四次挥手,客户端/服务器都可以主动发起.
tcp的状态

tcp服务器和客户端之间通过一定的数据结构来保存对端的信息, 在这个数据结构中有一个属性叫 “状态”, 操作系统内核根据当前状态的不同,
决定了当前应该干什么.下面是具体的tcp状态图.
在这里插入图片描述

上面的图只需要简单了解就可以,下面看看几个重要的状态.

三次握手中重要的状态在这里插入图片描述

  • LISTEN状态: 表示服务器这边已经创建好seversocket了,并且已经绑定好端口号. 此时表示可以开始建立连接了.
  • ESTABLISHED状态: 表示客户端和服务器建立连接完成,即三次握手完成.

四次挥手中的重要状态
在这里插入图片描述

  • CLOSE_WAIT状态:谁主动断开连接就进入CLOSE_WAIT状态,表示接下来代码中药调用close状态来发起fin. (收到对方发起的fin之后进入这个状态)
  • TIME_WAIT转态:表示 本端发起fin之后,对端也发起fin之后,进入TIME_WAIT状态,这个状态的作用是给最后一个ack重传留有一定的时间.
    TIME_WAIT的等待也不是无休止的等待,最多等待2MSL(MSL是一个系统内核的配置项,表示客户端到服务器消耗的最长时间,常见设置有2min),超过这个时间都不重传,意思是不会在重传了.双方都进入CLOSED状态.
4.滑动窗口

在确认应答,超时重传和连接管理的三个机制中, 虽然保证了可靠传输, 但等待ack的过程消耗的时间是挺多的, 滑动窗口就在保证可靠传输的前提下, 让消耗的时间成本也降低了.

在这里插入图片描述
上述图中把多次请求等待ack的时间, 使用同一份时间来等了, 减少了总的等待时间. 当有一个请求的ack返回以后, 窗口的大小不变, 但位置向右移动, 就出现了滑动的效果, 就叫做滑动窗口.
但上述操作也会出现丢包的情况, 具体处理情况如下.

  1. ack丢了
    在这里插入图片描述
    像ack丢了的情况,就无需进行处理,对于可靠性没有任何影响,也不需要进行重传.后面的ack会覆盖前面ack中的信息,如果是2001先到/或者1001丢了,说明1-1000,1001-2000都是已经到达了的,滑动窗口会直接往后移动两个格子.
  2. 数据丢了
    在这里插入图片描述
    数据都是按顺序排序发送的,当接收方发现某个数据丢失后,会反复向发送方索要这个数据的ack, 当发送方在多次受到某个ack的确认报文后,则认为是这个数据丢了,于是重传这个数据. 反复索要的目的就是再给这个数据留有等待时间,多次索要还没等到,应该是丢了,就相当于进行了 "超时时间"判定. (没有丢包的数据已经拍好序列放在接受缓冲区中)
    在上述过程中,这里的重传做到了 “针对性” 的重传,那个数据丢了就重传那个,已经收到的数据,不必重复发送,整体的效率没有额外的损失,把这种方式叫做"快速重传"
    当短时间传输的数据较多是,会使用快速重传,短时间数据较少还是会按照超时重传进行发送.
5.流量控制

通过滑动窗口可以提高传输的效率, 窗口大小越大, 更多的数据复用同一块时间等待,效率就越高. 但窗口的大小也并不是越大越好,当发送数据过快,接收方处理能力低,接受缓冲区满了,就出现丢包情况,这种情况,即使重传,也还是会丢包.通过流量控制,让发送方发送数据速度和接收方处理数据的速度保持一致,避免出现丢包的情况.
在ack报头中中有一个 16位窗口大小,通过这个字段来给发送方反馈发送速度.接收方会按照自己接受缓冲区剩余空间的大小,作为ack中窗口大小的数值,发送方根据这个数值调整自己窗口的大小.
在这里插入图片描述
当窗口大小为0时, 说明接收缓冲区已经满了, 此时发送方就暂定发送数据.发送方会周期性的发送 " 窗口探测包", 这个包不携带载荷,只是为了触发ack, 当查询结果非0就继续发送数据.

6.拥塞控制

流量控制是站在接收方来控制发送方发送速率,拥塞控制是控制数据传输路径上发生拥堵的问题. 针对这种情况,核心思路是把中间路径经过的所有设备视为一个整体,然后通过" 实验 "的方法找到一个合适的传输速率.
如何进行实验的?

  1. 慢启动: 刚开始传输数据的时候,速率较小,采用较小的拥塞窗口,此时不知道网络路径的具体情况,一上来就太大,可能导致网络路径更加拥挤
  2. 若慢启动没有出现丢包,就增大拥塞窗口的大小,按指数增长来增大拥塞窗口.
  3. 当指数增长到达一定 “阈值” 的时候,指数增长变为现行增长.
  4. 当现行增长出现丢包的情况,就把拥塞窗口的阈值设置成较小的值,回到最初的慢启动,并且此时会重新设置指数增长的 " 阈值".

上述过程可以用图展示
在这里插入图片描述
现在更新之后有新的版本,一个是当发生丢包后重新回到新订的阈值不在进行慢启动,直接进入指数增长的模式,这样更加提高了传输的速率.

7.延时应答

延时应答也是基于滑动窗口在提高一些效率,结合滑动窗口和流量控制,能够延时应答ack的方式,把反馈的窗口大小弄大一些.接收方在接受数据放到接受缓冲区之后,不会立刻返回ack,而是等一段时间, 让应用程序将这个数据使用掉, 这样, 接受缓冲区的空间就变大, 返回的窗口大小就是一个更大的值了.
在滑动窗口中,ack丢了, 不会影响可靠信, 正常情况每个数据都有ack,
这样可以每隔几个数据在返回一个ack(每隔几个数据也能起到延时应答的效果),另外也能减少ack传输的数量,起到节省空间的效果.

8.携带应答

携带应答是尽可能把能合并的数据包进行合并,从而起到提高效率的效果. 在这里插入图片描述
在延时应答的机制下, ack会延迟发送, 就可能在返回响应的时候和响应的数据包一起返回, 本身ack也不携带载荷, 只是在报头中ack标志位设置为1, 并且设置确认序号以及窗口大小. 这几个属性,在reponse报文中也用不到, 不会发生冲突.
在携带应答的加持下, 后续每次传输请求响应,都有可能把传输的业务数据和上次的ack合二为一.

9.面向字节流

粘包问题 , 此处的包是"TCP载荷中的应用层数据包" 在这里插入图片描述

TCP是面向字节流的,站在应用层的角度,每次收到的数据是一串连续的字节数据,不知道从哪一部分到那一部分是一个完整的应用层数据包,多个数据包混淆不清,像这种情况就是" 粘包问题".

如何解决粘包问题?
核心方法就是 “明确包之间的边界”.

  1. 通过特殊符号, 作为分隔符, 见到分隔符就视为一个包结束了.
  2. 指定出包的长度,比如在包开始的位置, 加上一个特殊的空间来表示整个数据的长度.
    在这里插入图片描述

UDP存在粘包问题吗?
UDP传输的基本单位是udp数据包, 在udp这一层就已经分开了,只需约定好, 每个udp数据包值承载一个人应用层数据包, 不需要额外的手段来区分,就不存在粘包问题.

10.异常情况

考虑的情况是考虑比丢包更严重的情况, 如网络直接出现故障等情况,该如何处理?

  1. 接收方或发送方有一方出现 进程崩溃.
    进程无论是正常结束还是异常崩溃,系统都会自动触发回收资源文件, 关闭文件这样的效果,就会触发四次挥手. tcp的连接是有生命周期的,可以比进程更长一些,虽然进程退出,但tcp连接还在,任然可以通过四次挥手断开连接
  2. 接收方或发送方出现关机(正常关机)
    关机操作会终止系统所有的进程,和上面一样会触发四次挥手的操作,若挥手速度够快,就能删除本端和对端的信息, 但可能存在四次挥手还没有结束系统就已经关闭了,此时fin已经发送,无法收到ack,此时会进入超时重传的流程中,若还是没有收到ack, 就会单方面释放连接信息.
  3. 其中一方断电(更突然的关机)
  • 断电的是接收方: 发送方突然出现没有ack了,就会进入超时重传,重传之后还是不行, 就会进入 "复位连接 ".(相当于清除原来tcp中的临时数据,重新开始). 此时会用到tcp中的复位报文段(RST),
    当rst也收不到ack,就当方面释放连接.
  • 断电的是发送方: 当接收方一段时间没有收到对方的信息,就会触发心跳包,来判断发送方是挂了,还是当前没有发送数据,如果发现对端没有心跳了,本端也会尝试复位连接并且当方面释放连接.
    心跳包是不携带应用层数据的特殊数据包,是周期性的,没有心跳视为对端挂了.
  1. 网线断开.
    网线断开,数据就无法发送出去,此时发送方收不到ack就会超时重传并且触发复位连接,从而单方面释放连接,接收方收不到数据,就会触发心跳包判断对方是不是挂了,若没有心跳就会当方面释放连接.

网络层

IP协议

在网络层用到最多的是IP协议,首先看看IP数据包的格式.
在这里插入图片描述

  • 4位版本 :说的是ip协议的版本,当前常用的有4 和 6 两个版本
  • 4位首部长度 : IP报头,长度是可变的,单位也是4字节.
  • 8位服务类型 : 当前只有四位有效,这四位之间相互冲突,当其中一位位1时, 剩下三位都为0. 这四个模式分别为,最小延时, 最大吞吐量, 最高可靠性, 最小成本.
  • 16位总长度(字节数) : 描述了一个ip数据报的长度(报头+载荷). IP协议自身有长度的限制,但IP也提供了拆包和组包的功能.
    此时传输层传过来的载荷即使超过64kb也没有关系,在IP这一层会自动拆分成多个IP数据报, 每个IP来携带载荷的一部分.
  • 16位标示 : 标志上面拆包的数据包载荷哪些可以一起组装在一起.
  • 3位标志 : 只有两位有效. 其中一位表示这次的IP数据报是否拆包了. 还有一位是结束标记.
  • 8位生存时间 : 单位是"次数". 一个IP数据报每次经过一个路由器转发,TTL就减少一次,若这个数值减到0说明这个数据包就要被丢了.
  • 8位协议 : 表示传输层使用那个协议
  • 16位首部校验和 : 只针对IP的首部进行检验,载荷中的TCP/UDP都自带了校验和. 和UDP中的校验方法一样.
  • 32位源IP地址和目的地址 : 表示发件人地址和收件人地址.
地址管理

IP协议如何进行地址管理?
IP地址本质上是一个32位整数,通过 点分十进制方式来表示,通过3个点分成四个部分,每个部分一个字节,每个部分的取值是 0 - 255.
32位整数也有一定的限制,如果IP地址不够用了,如何进行管理呢?

  1. 动态分配IP地址.
  2. NAT机制. 先把IP地址分为两类
  3. IPv6.
    IPv6增加了IP地址的个数. IPv4是4个字节表示IP地址 ,IPv6是16个字节表示IP地址

NAT机制

  • 私网IP / 局域网IP IP地址以10.* , 172.16 - 172.21.* , 192.168.*开头的.都是私网IP.
  • 公网IP / 广域网IP
    要求公网上的设备,对应的公网IP都是唯一的.
    但是私网上/局域网上的设备,使用私网IP,只要保证局域网上的IP不重复即可,不同局域网之间的IP可以重复.

由于上述设定,就有一定的限制

  1. 公网设备访问公网设备,可以直接访问
  2. 局域网设备访问局域网设备(同一个局域网) , 可以直接访问
  3. 局域网设备访问局域网设备(不在同一个局域网),不可访问.
  4. 公网设备访问局域网设备,不可以主动访问,
  5. 局域网设备访问公网设备,就需要对局域网设备IP进行地址转换.

如何进行地址转换 ?
路由器上面有两个IP地址

  1. LAN口IP, 往往是一个局域网IP.
  2. WAN口 , 可能是局域网IP,也可能是公网IP
    路由器的核心就是把这个局域网连接起来.
    在这里插入图片描述
    电脑发送数据经过路由器,要想进一步转发,就会把IP报头中的源IP进行准换成路由器上的IP,不是每个路由器都会替换,局域网上的路由器会进行替换,一旦这个局域网换成公网IP,就不会继续替换了.
    进行上述替换,本质上是让一个公网IP能够对应多个设备,从而起到节省IP地址的效果.

服务器在返回响应的时候,如何找到客户端呢?
在进行转发的时候 , NAT机制会把通信的相关信息用表给记录下来.通过路由器查表就能找到之前的局域网IP.

  1. 如果局域网设备, 访问的是不用的服务器,路由器就可以通过服务器IP地址来进行区分.
  2. 如果同一个局域网多个设备,访问同一个服务器,路由器会通过服务器的目的端口来进行区分.
  3. 如果端口号也冲突的话,路由器会对源端口进行映射,通过映射后服务器返回时的目的端口尽心区分.
路由选择

路由选择是在复杂的网络环境上找到一条通往终点的路. IP数据报的传输过程和 " 问路 " 一样.

  • 当IP数据包,到达路由器时,路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器
  • 依次反复,一直到达目标IP地址;

数据链路层

以太网

下面是以太网数据帧的格式
在这里插入图片描述

  • 数据链路层引入了一层新的地址体系, “mac地址”/物理地址.
  • 目的地址和源地址都是 6 个字节. 通常用16进制来表示
  • IP地址和mac地址的区别?
    IP地址负责全局的转发 , 从起点到终点这整个转发过程, 由IP地址负责完成.
    mac地址负责局部的转发 , 相邻两个设备之间的准发 , 由mac地址来完成.
  • ARP请求/应答和RARP请求/应答.
    这两个是很好垮了网络层和数据链路层的协议
    ARP : 让路由器和交换机建立一个内部结构. IP —>mac
    RARP : 也是路由器和见换机建立一个内部结构. mac —>IP.
  • 以太网数据帧的载荷部分最长是1500字节,最大值1500称为以太网最大传输单元(MTU) .最短是46字节. 46字节是因为ARP是46字节. IP数据报的组包和拆包是因为MTU导致的.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以创新筑牢安全盾牌,广师大隐盾科技照亮软件知识产权保护之路

“很感谢隐盾科技团队的各位成员对我司计算机软件代码保护的鼎力相助……”广州市硬科技百强企业在给予隐盾科技团队的感谢信中写道。据了解,该公司在使用了隐盾科技团队研发的隐盾代码虚拟化系统后,企业开发盗版率从45%降至0%、保护该企业年侵权成本超过…

redis5种数据类型应用场景

Redis提供了以下五种基本数据类型及其应用场景: 1 , String(字符串): 适用场景:用于存储统计网站访问数量、当前在线人数等信息。此外,它也适用于存#### 储JPG图片或者序列化的对象。 2 , Hash&#xff08…

预约自习室

预约自习室 1、技术介绍 自习室预约系统的后端开发语言采用Node,后端开发框架采用Express,数据库采用的Node的最佳搭档MySQL。采用Vue作为前端开发框架,Element-UI作为开发的组件库,微信小程序。期间采用axios实现网页数据获取&a…

精细调度:Apache DolphinScheduler脚本深度解析

在现代数据处理和工作流管理中,Apache DolphinScheduler以其灵活性和强大的调度能力受到开发者的广泛欢迎。 本文将逐步解析DolphinScheduler的关键脚本,希望能提供一个详尽的操作指南,帮助大家掌握安装、配置和操作的每一步。 建立在./bin/e…

精品中国货出海wordpress外贸独立站建站模板

旗袍唐装wordpress外贸网站模板 旗袍、唐装、华服wordpress外贸网站模板,适合做衣服生意的外贸公司官网使用。 https://www.jianzhanpress.com/?p3695 劳动防护wordpress外贸独立站模板 劳动防护wordpress外贸独立站模板,劳动保护、劳动防护用品外贸…

数字创新的风口:创业者如何在Web3时代抢占先机

随着区块链技术的不断发展,Web3正成为数字创新的新风口,为创业者们带来了前所未有的机遇和挑战。本文将从另一个角度探讨Web3对创业者的影响,并提出创业者在Web3时代抢占先机的策略和方法。 1. Web3重新定义了商业模式 Web3不仅仅是一种技术…

无人机生态环境监测、图像处理与GIS数据分析

构建“天空地”一体化监测体系是新形势下生态、环境、水文、农业、林业、气象等资源环境领域的重大需求,无人机生态环境监测在一体化监测体系中扮演着极其重要的角色。通过无人机航空遥感技术可以实现对地表空间要素的立体观测,获取丰富多样的地理空间数…

app逆向-ratel框架-AES,DES,MD5,SHA1加密算法java hook程序

一、前言 AES(高级加密标准)、DES(数据加密标准)、MD5(消息摘要算法5)和SHA-1(安全哈希算法1)都是常见的加密算法,用于数据加密和哈希计算。 二、加密算法实现 1、创建…

Linux第71步_将linux中的多个文件编译成一个驱动模块

学习目的:采用旧字符设备测试linux系统点灯,进一步熟悉其设计原理。采用多文件参与编译,深度学习编写Makefile,有利于实现驱动模块化设计。 1、创建MyOldLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home…

14、电源管理入门之Watchdog看门狗

目录 1. 软硬件watchdog的区别 2. 软件看门狗 2.1 kernel watchdog 2.1.1 soft lockup 2.1.1 hard lockup 2.2 用户态watchdog 2.2.1 softdog 2.2.1 hardware watchdog 3. 硬件看门狗 3.1 硬件寄存器介绍 3.2 喂狗操作 3.3 watchdog硬件驱动编写 参考: 看门狗,又…

量化人这样用Jupyter(2) - JupySQL, D-tale

当我们使用 Jupyter 时,很显然我们的主要目的是探索数据。这篇文章将介绍如何利用 JupySQL 来进行数据查询–甚至代替你正在使用的 Navicat, dbeaver 或者 pgAdmin。此外,我们还将介绍如何更敏捷地探索数据,相信这些工具,可以帮你省下 90%的 coding 时间。 原文发表在这里…

excel统计分析——正交设计

参考资料:生物统计学 单因素试验通常采用完全随机设计活动随机区组设计;两因素试验通常采用析因设计;多因素试验不考虑因素间的互作时,可以采用拉丁方设计或正交拉丁方设计;需要考虑因素间的互作时,析因设计…

【Docker】掌握 Docker 镜像操作:从基础到进阶

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 结语 我的其他博客 前言 在现代软件开发和部署中,容器化技术已经成为不可或缺的一部分。而 Docker 作为最流行的容器化…

JVM工作原理与实战(四十二):JVM常见面试题目

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM常见面试题目 1.请阐述JVM的概念及其核心功能,并简要介绍其组成部分和常用的实现。 2.请阐述Java字节码文件的组成部分。 3.请描述JVM的运行时数据区及其组成部分…

RedTiger‘s Hackit

本文相关的ctf平台链接:RedTigers Hackit (overthewire.org) level 1 这里有个1可以点,先尝试点一下 因为这题是sql注入,cat应该就是注入点了 先判断注入类型 ?cat1 and 11 ?cat1 and 12 数字型注入 再判断列数 1 order by 4 -- 接下来…

Vue深度教程

一、Vue简介 1.简介 2.快速上手 二、基础 1.创建一个Vue应用 2.模板语法 3.响应式基础 4.计算属性 5.Class与 Style绑定 6.条件渲染 7.列表渲染 8.事件处理 9.表单输入绑定 10.生命周期钩子 11.侦听器 12.模板引用 13.组件基础 三、深入组件 1.组件注册 2.Props 3.组件事件 …

css补充(上)

有关字体 1.所有有关字体的样式都会被继承 div {font-size: 30px;}<span>777</span> <div>123<p>456</p> </div>span中777是默认大小16px div设置了30px p作为div的后代继承了字体样式也是30px 2.字体颜色 div{color: red;border: 1px …

【VTKExamples::PolyData】第四十九期 Silhouette

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Silhouette,并解析接口vtkPolyDataSilhouette,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Silhouett…

RocketMQ架构详解

文章目录 概述RocketMQ架构Broker 高可用集群刷盘策略 概述 RocketMQ一个纯java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目&#xff0c;具有高…

QT计算两个日期之间的月份数

数据库中单表数据存储量过大时&#xff0c;会造成数据库的查询统计速度变慢&#xff0c;因此需将单表数据拆分存储到按年月命名的多张数据表中。解决思路是获取单表中的最小时间和最大时间&#xff0c;然后计算两个时间中的月份数量&#xff0c;最后根据开始年月循环算出所有需…