笔记:网络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流在传输媒体上的无措传输。

笔记:网络IP数据包头部详解的更多相关文章

  1. TCP/IP数据包结构详解

    一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解网络数据包的结构,以及协议分析.如:网络监控,故障排查等…… IP包是不安全的,但是 ...

  2. IP数据包格式详解(转)

    摘自:http://blog.163.com/hlz_2599/blog/static/1423784742011112195857956/</> TCP/IP协议定义了一个在因特网上传输 ...

  3. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  4. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  5. 入木三分学网络第一篇--VRRP协议详解第一篇(转)

    因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...

  6. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  7. [转]网络性能评估工具Iperf详解(可测丢包率)

    原文链接:安全运维之:网络性能评估工具Iperf详解:http://os.51cto.com/art/201410/454889.htm 参考博文:http://linoxide.com/monito ...

  8. IP地址、子网掩码详解

    如何通过子网掩码划分网段 资料一: 一.缺省A.B.C类地址,子网掩码:  二.子网掩码的作用:  code:  IP地址 192.20.15.5 11000000 00010100 00001111 ...

  9. 网工最实用最常用的网络命令之一——Ping 命令详解(一)

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障. ...

  10. Python网络请求urllib和urllib3详解

    Python网络请求urllib和urllib3详解 urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urlli ...

随机推荐

  1. printf( )和scanf( )

    printf()的转换说明 转换说明 输出 %a,%A 浮点数,十六进制数和p记数法 %c 单个字符 %d.%i 有符号的十进制整数 %e,%E 浮点数,e记数法 %f 浮点数,十进制计数法 %g/% ...

  2. 2021.06.21 onmouseover和onmouseleave事件对比

    在重新巩固js基础的过程中,分别使用onmouseover和onmouseleave事件却导致了不同的效果,但是在之前的记忆中,这两者确实是一样的哈,因此探究一下产生不同效果的原因. 在使用onmou ...

  3. jquery中,某些写法后来更新导致版本不支持的替代方法

    等号后面的书写替换前面老的书写方法 $.browser.mozilla = /firefox/.test(navigator.userAgent.toLowerCase());$.browser.we ...

  4. Windows系统下找到占用当前端口的进程

    在进行服务调试时如果遇到端口冲突而不自知,可能会出现莫名其妙的错误.因此在不确定的情况下最好先查看要用的端口是否被占用. 下面介绍查看端口占用情况方法. 比如现在是要找到端口为8088的占用,在cmd ...

  5. Linux 基础命令2

    一.输出重定向命令 : > />> 1.ls > 1.txt 把命令返回的结果输出到文件中,会覆盖之前的数据,默认情况命令返回的结果显示在屏幕中: 2.Ls >1.txt ...

  6. Git添加SSH密钥步骤

    1.先去本机上面看看用户主目录里面有没有.ssh这个文件夹 如果有的话,再看看该目录下有没有id_rsa和id_rsa_pub这两个文件: 若还是有,就直接跳过这一步到下一步:若是没有,我们需要创建S ...

  7. Android笔记--在活动之间传递消息

    显式Intent和隐式Intent Intent--各个组件信息沟通的桥梁 组成部分: 显式Intent:--精确匹配 具体实现: 1.在Intent的构造函数中指定 2.调用意图对象的setClas ...

  8. 使用containerd搭建MinIO集群服务

    概述 因为在云服务器上默认只有一块磁盘,如果直接在系统盘上安装MinIO,会被拒绝,所以这里采用containerd的方式绕过这一限制 操作环境 操作系统 CentOS 7.9 MinIO版本 REL ...

  9. 翟佳:StreamNative 组织构建之路丨声网开发者创业讲堂 • 第 5 期

    前言 翟佳,StreamNative 联合创始⼈,Apache Pulsar PMC 成员与 Committer.之前任职于 EMC,担任统⼀存储部⻔技术负责⼈. 在声网开发者创业讲堂 • 第 5 期 ...

  10. 基于对象的实时空间音频渲染丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网音频算法工程师 李嵩. 随着元宇宙概念的引入,空间音频这项技术慢慢映入大家的眼帘.关于空间音频的基础原理,我们做过一期科普视频 -- 「空间音 ...