乌啦呀哈呀哈乌啦!

欢迎光临,这里是喵pass的个人博客,希望有能帮到你的地方

0%

数据的封装与发送

各层数据的组成形式

  • 数据单元(data unit)
    指许多信息单元。常用的数据单元有服务数据单元(SDU)、协议数据单元(PDU)。SDU是在同一机器上的两层之间传送信息。PDU是发送机器上每层的信息发送到接收机器上的相应层(同等层间交流用的)。

  • 分组/分片
    ip层的上层是传输层(tcp的头部为20Byte,udp头部字节是8Byte),ip层自己的头部需要占20字节,ip层的MTU = 1500 - 20 = 1480Byte, 超过1480Byte的数据,都需要被ip层分片,在达到目的前会自己重组

    • tcp是可靠传输协议,通过超时与重传机制,来保证收到的数据是完整的。因为tcp是可靠传输协议,如果要传输的数据大于 1480 - 20(tcp头部) =1460Byte时,在ip层被分片,而ip层分片会导致,如果其中的某一个分片丢失,因为tcp层不知道哪个ip数据片丢失,所以就需要重传整个数据段,这样就造成了很大空间和时间资源的浪费,为了解决这个问题,就有了tcp分组和MSS(最长报文大小)概念,利用tcp三次握手建立链接的过程,交互各自的MTU,然后用小的那个MTU-20-20 , 得到MSS,这样就避免在ip层被分片。
    • 由于udp是不可靠传输的,所以ip分片主要是为了upd服务的,所以就有了网上的 1500 - 20(ip头部) - 8(udp头部) > 1472Byte 的说法,把1472作为ip分片的标准
  • 报文(message) —— 应用层
    报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。

  • 报文段(segment) —— 传输层
    组成报文的每个分组,将传输层分组称为报文段(面向连接(TCP)的数据传输)。报文段是起始点和目的地都是传输层的信息单元。

  • 数据报(datagram) —— 传输层
    面向无连接(Connectionless Communication)的数据传输,其工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。通常是指起始点和目的地都使用无连接网络服务的网络层的信息单元。(指IP数据报)

  • 数据包(packet) —— 网络层
    是网络层传输的数据单元,也成为“包”。包中带有足够寻址信息(IP地址),可独立地从源主机传输到目的主机。它的起始和目的地是网络层。

  • 帧(frame) —— 数据链路层
    帧是数据链路层的传输单元。它将上层传入的数据添加一个头部和尾部,组成了帧。它的起始点和目的点都是数据链路层。

  • 以太网帧

在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。
在以太网帧中,Destination Address(目的地址)放在最前面。接收方收到一个以太网帧后,最先处理Destination Address字段。如果发现该帧不是发给自己的,后面的字段以及数据就不需要处理了。

什么是帧间距(IFG)

网络设备和组件在接收一个帧之后,需要一段短暂的时间来恢复并为接收下一帧.做准备互联网帧间隙共20字节,包括:

  • 以太网最小帧间隙 12Byte
  • 数据链路层帧 前导码 7Byte,用于时钟同步 This is a sequence of alternate 0s and 1s that denotes the beginning of the frame and enables bit synchronization between the sender and receiver.
  • 帧开始标识 1Byte (标识帧的开始)
  • 比特流(bitstream) —— 物理层

各层间数据传递

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据包 (datagram),在链路层叫做帧(frame)。
  • 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装 (Encapsulation)。
  • ⾸部信息中包含了⼀些类似于⾸部有多⻓,载荷(payload)有多⻓,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的 “上层协议字段” 将数据交给对应的上层协议处理。


数据的封装过程(从上至下)

传输层:报文被分为多个报文段,每个报文段上加上TCP首部(主要包含端口、源端口),变为TCP报文段;(注:TCP叫TCP报文段,UDP叫UDP数据报,也有人叫UDP段)
网络层:将TCP报文段加上IP数据包首部(主要包含目的IP,源IP),变成数据包;
数据链路层:将数据包加上目标MAC与源MAC、FCS(Frame Check Sequence)、变成MAC帧。
物理层:将帧变为比特流,传递给PC3物理层。


数据传输计量单位

Maximum Transmission Unit:最大传输单元,链路层的帧中的数据部分的最大字节数,以太网中的一般为1500字节。

Maximum Segment Size:TCP的报文段中的数据部分的最大字节数,MTU减去IPv4的Header和TCP的Header。IPv4的Header和TCP的Header一般都是20字节,则 1500-20-20 = 1460字节。

Maximum Segment Lifetime:报文最大生存时间。报文在网络上存在的最长时间,超过这个时间报文将被丢弃。当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。存在这个规则导致一个后果就是在这个2MSL的时间内,该地址上的链接(客户端地址、端口和服务器端的地址、端口)不能被使用。比如我们在建立一个链接后关闭链接然后迅速重启链接,那么就会出现端口不可用的情况。

Round Trip Time:往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据结束,到发送端收到来自接收端的确认数据总共经历的时延。RTT=传播时延(往返哒)+ 排队时延(路由器和交换机的)+ 数据处理时延(应用程序的)。

Time To Live:IP头部有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值,但不是具体的时间,而是存储了一个IP数据报可以经过的最大路由数,每经过一个路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。


Credits

数据包:https://blog.csdn.net/a3192048/article/details/84671340