IP数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首都中的源地址和目的地址都是 IP 协议地址。

报文注释

IP报文内容

Frame 1197: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0
Ethernet II, Src: localhost (e4:d5:3d:a2:64:95), Dst: localhost (c8:3a:35:58:12:c8)
Internet Protocol Version 4, Src: localhost (192.168.0.104), Dst: localhost (192.168.0.1)
    0100 .... = Version: 4 #占4bite,指IP协议的版本

    .... 0101 = Header Length: 20 bytes (5) #首部长度就是 20 字节

    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) #占8bite,目前被QoS所使用

        0000 00.. = Differentiated Services Codepoint: Default (0)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)

    Total Length: 60 #首都数据之和的长度

    Identification: 0x5fc7 (24519) #标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报

    Flags: 0x00 #MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个

        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
#不能分片

        ..0. .... = More fragments: Not set
    Fragment offset: 0
#数据字段的起点,该片从何处开始

    Time to live: 64 #数据报在网络中的寿命

    Protocol: ICMP (1) #数据包携带的数据是使用何种协议

    Header checksum: 0x9940 [validation disabled]#检验数据报的首部,但不包括数据部分

    [Header checksum status: Unverified]
    Source: localhost (192.168.0.104)
    Destination: localhost (192.168.0.1)
    [Source GeoIP: Unknown]
    [Destination GeoIP: Unknown]

IP数据报首部的可变部分:支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从 1-40个字节不等,取决于所选择的项目。
Internet Control Message Protocol

为什么要分片?
1960年之前,数据通信是基于电路交换技术,根本没有分片
后来出现了分组交换,才有了分片,早期分片为128字节,后来分组交换网络中最大传输单位(MTU)定义了最大可以传输1500字节的数据,刨去20字节的IP包头长度,一个IP包最多可携带1480字节的数据,如果传输的数据块超过1480字节时,网络层就不得不把它分片,封装成多个网络包
接收方又是靠什么重组分片的?
IP数据包头,有专门用来数据重组的相应字段flags,比如offset、ID、MF等,可以按照数据包的分片顺序,重新组装起来

这些分片的数据单元到达对端的链路和时间都是不同的,对端根据IP首部中的标示符(Identification)、标志(Flag)、段偏置值字段重组数据包

Identification(确定IP同一个数据包)
Fragment offset(来确定来一个分片是第一个、第二个)
Flags More Fragments(确定无分片)

IP数据包的总长度过大超过链路的最大MTU时,数据包就会被分成多片,而在如今的IPv4的网络中,数据传输时不可靠的,是尽力而为的



IP数据包分片的几个概念:
最大传输单元(MTU):是指由IP包头和数据部分组成的IP数据包长度(1480),MTU值存在于每一个网络接口,不在具体数据包中

最大报文段大小(MMS):是指TCP报文段内数据承载的最大长度(1460),即上层协议交付给TCP的每个数据单元的最大长度

TCP是如何避免被发送方分片的?
TCP可以避免被发送方分片,因为TCP会在三次握手的时候,协商最大的MSS,然后主动把数据分成小段再交给网络层,所以网络层不需要分片
UDP就没有MSS的概念,把所有数据交给网络层

TCP/ipv4版本存在的安全隐患有
1、缺乏数据源验证机制
3、缺乏对数据包的完整性的验证机制
4、缺乏机密性保障机制