笔记:网络IP数据包头部详解

笔记:网络IP数据包头部详解




 
       传了无数次,每次图片都没了,真是郁闷,这编辑器,需要改下啊,各位CSDN的大神们!!!
       由于最近看了一些相关的资料想起来这篇文章,所以补充一些信息。

       以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.所以,事实上,这个1500字节就是网络层IP数据报的长度限制.因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节.这个1472字节就是我们可以使用的字节数。TCP首部为20字节,所以最大长度为1460字节。


网络IP数据包(20个字节包头+数据部分):4个字节为一个元组。
第一个元组:版本(4bit)+首部长度(有效长度)(4bit)+服务类型(8bit)+总长度(16bit)
                  注释:
                   1)版本:IPV4还是IPV6
      +           2)首部长度:即有效长度,数据长度是可变的,所以计算的是数据的有效长度即有效载荷。
                   3)服务类型:用来区分哪些服务器的,比如UDP,传输数据不可靠,但是速度快,而tcp传输数据可靠。
                   4)总长度:计算整个报文长度。
第二个元组:标识(Identification 或者Fragment ID,分片ID,16bit)+标志(含R、DF、MF)(3bit)+ 片偏移(Fragment Offset,13bit)
                  注释:
                  1)标识:ip报文最终要分成帧的形式,整个报文数据必须且分成多个片(MTU最大只能传输1500type),多个数据再组合成片,主要用来标识有哪些分片。
        +        2)MF:more fragment 更多的分片
                  3)DF:don‘t fragment  不要分片
                  4)片偏移:用来标识数据在整个报文当中所处的位置和次序的。
第三个元组:存活时间(time-to-live =>TTL,8bit) + 协议 (8bit) + 首部校验和(header checksum ,16bit)
                  注释:
                 1)存活时间:消除网络中的“鬼打墙”,初始值一般是64,每经过一个路由设备或者网关都要减1,如果减到0了,说明数据包不能送达目的地了,即”鬼打墙“了。
         +       2)协议:标识使用哪种协议(比如tcp或udp)。
                 3)首部校验和:整个首部的校验码,检验是否出错。
第四个元组:源地址(32bit)
       +
第五个元组:目的地址(32bit)
       +
 option(可选字段)
      +
  数据部分

2.网络数据包传输过程(以下的伪代码是摘抄于该博主的http://blog.csdn.net/waitforfree/article/details/50771777)

IP数据报需从主机A上传送到主机B上,主机A首先查找路由表;
if(目的主机是与自己在同一个网段内)
{
    主机A查询自己的ARP表;
    if(有该目的IP地址对应的MAC地址的记录)
    {
           将该MAC地址作为目的MAC地址,封装数据帧,传送给主机B;
    }
    else
    {
          发送一个ARP请求广播给网段内的所有主机,来查询该目的IP地址的MAC地址;
          收到ARP请求报文的各个主机如果发现该IP地址是自己的IP地址,则返回一个ARP应答报文告诉主机A自己的MAC地址;
          如果发现不是自己的IP地址,则丢弃该报文。
          主机A收到这个应答报文后,就按照返回的MAC地址,将IP数据包封装成帧,然后发送到主机B上;
         (补充:一般为了减少网络中的报文量,通信双方会维护一个各自的ARP表,把一次通信中获得IP MAC地址对保存在缓冲的ARP表中,但是ARP有一个老化机制,删除一段时间内不用的IP MAC地址对。)
    }
}
else if(发现了能与目的网络号相匹配的表目)
{
         则把报文发给改表目指定的下一站的路由器或直接连接的网络接口;
         报文发送到下一站时,数据帧的目的MAC地址是下一个站路由器或者网络接口的MAC地址,而IP头部的目的IP地址是主机B的IP地址;
         这里要指出的是:ARP请求报文以下一站路由器或网络接口的IP地址为目的IP地址,寻找真的目的MAC地址。换句话,ARP请求报文只负责IP据报传输过程中每一跳中的目的MAC地址查询。
}
else
{
         寻找标为“默认”的表目,把报文发送给该表目指定的下一站路由器;
         报文发送到下一站时,数据帧的目的MAC地址是下一个站路由器的MAC地址,而IP头部的目的IP地址是主机B的IP地址。
}
         数据帧在每两个网络设备间传递时,是转换成bit流在传输媒体上传输。链路层提供了如停止等待协议等机制,控制了bit流在传输媒体上的无措传输。

posted @ 2016-11-06 17:02  奔涌吧,后浪  阅读(86)  评论(0编辑  收藏  举报