IP协议栈学习

最近在项目中接触了以太网项目,用的是DP83867芯片,之前看过W5300的文档,相对来说DP83867需要自己写物理层协议,能达到千兆速率。
IP协议没看,暂时没有用上。

主要的结构关系

MAC层-IP-UDP协议之间关系

以太网帧

以太网(IEEE 802.3)帧格式:
1、前导码:7字节0x55,一串1、0间隔,用于信号同步
2、帧起始定界符:1字节0xD5(10101011),表示一帧开始
3、DA(目的MAC):6字节 ARP时为全FF
4、SA(源MAC):6字节
5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)
0x0800 IP数据包
0x0806 ARP数据包
6、数据:46~1500字节
7、帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部分内容而得到的校验和。
IP数据包大小大于1500字节,TCP无限制,UDP65535字节。

IP数据报文

在这里插入图片描述IP数据报首部的固定部分

  1. 版本
    版本字段占4bit,指IP协议的版本。通信双方使用的IP协议的版本必须一致。版本有IPV4 和IPV6
  2. 首部长度
    首部长度字段占4bit,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后一个填充字段加以填充。这样,数据部分永远在4字节的整数倍时开始,这样在实现起来会比较方便。首部长度限制为60字节的缺点是有时(如采用源站选路时)不够用。但这样做的用意是要用户尽量减少额外的开销。
  3. 服务类型
    服务类型字段共8bit长,用来获得更好的服务,其意义见图6的上面部分所示。
    服务类型字段的前三个比特表示优先级,它可使数据报具有8个优先级中的一个。
    第4个比特是D比特,表示要求有更低的时延。
    第5个比特是T比特,表示要求有更高的吞吐量。
    第6个比特是R比特,表示要求有更高的可靠性,即在数据报传的过程中,被结点交换机丢弃的概率要更小些。
    第7个比特是C比特,是新增加的,表示要求选择价格更低廉的路由。最后一个比特目前尚未使用。
  4. 总长度
    总长度指首部和数据之和的长度,单位为字节。总长度字段为16bit,因此数据报的最大长度为65535字节。这在当前是够用的。
    当很长的数据报要分段进行传送时,“总长度”不是指未分段前的数据报长度,而是指分段后每个段的首部长度与数据长度的总和。
  5. 标识
    标识字段的意义和OSI的IPDU中的数据单元标识符的意义一样,是为了使分段后的各数据报段最后能准确地重装成为原来的数据报。请注意:这里的“标识”并没有顺序号的意思,因为IP是无连接服务,数据报不存在按序接收的问题。
  6. 标志
    标志字段占3bit。目前只有前两个比特有意义。
    标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面还有分段的数据报。MF=0表示这已是若干数据报段中的最后一个。
    标志字段中间的一位记为DF(Don’t Fragment)。只有当DF=0时才允许分段。
  7. 段偏移
    段偏移字段的意义和OSI的IPDU中规定的相似,只是表示的单位不同。这里是以8个字节为偏移单位。可见IP数据报的段偏移字段(13bit长)和OSI的IPDU的段偏移字段(16bit长)是相当的。
  8. 寿命
    寿命字段记为TTL(Time To Live),其单位为秒。寿命的建议值是32秒。但也可设定为3-4秒,或甚至255秒。
  9. 协议
    协议字段占8bit,它指出此数据携带的运输层数据是使用何种协议,以便目的主机的IP层知道应将此数据报上交给哪个进程。常用的一些协议和响应的协议字段值(写在协议后面的括弧中)是:UDP(17),TCP(6),ICMP(1),GGP(3),EGP(8),IGP(9),OSPF(89),以及ISO的TP4(29)。
  10. 首部检验和
    此字段只检验数据报的首部,不包括数据部分。不见眼数据部分是因为数据报每经过一个结点,结点处理机就要重新计算一下首部检验和(一些字段,如寿命、标志、段偏移等都可能发生变化)。如将数据部分一起检验,计算的工作量就太大了。
    首部校验和(16bit)字段只校验数据报的首部,不包括数据部分。这里不采用CRC检验码而采用简单的计算方法
    实现对IP分组首部的差错检测
    计算校验和时,该字段置全0
    采用反码算数运算求和,和的反码作为首部校验和字段
    逐跳计算、逐跳校验
  11. 地址
    源站IP地址字段和目的站IP地址字段都各占4字节。

ARP协议

当它封装在以太网帧中的格式,42字节:
在这里插入图片描述
28字节ARP数据包,首部8字节
在ARP表建立前,主机并不知道目标MAC地址,所以在一开始的时候只能通过广播的方式将ARP请求包发送出去,处于同一局域网的主机都能接收到广播的数据包。所以一开始目标MAC地址是FF-FF-FF-FF-FF-FF,而以太网首部的帧类型是有多种,
对于ARP数据包来说,其值为0x0806,
对于IP数据报来说,其值为0x0800。
在ARP首部一开始的2个字节存储的是硬件类型,表示要知道目标网卡的硬件类型,
其中,值为1表示以太网地址;
接下来还有2字节的协议类型,其中,0x0800表示IP协议,其他还可能是ICMP/IGMP协议等;
接下来有1个字节表示硬件地址长度,指出该报文中硬件地址的长度,对于以太网硬件类型,它的值为6;
还有1字节的协议地址长度,如果是ARP协议、IP协议等,该值为4;
ARP首部最后的op字段用于记录ARP操作的类型,分别是:

ARP请求,其值为1。
ARP应答,其值为2。
RARP请求,其值为3。
RARP应答,其值为4。

UDP协议

在这里插入图片描述
在这里插入图片描述源端口:端口号0-65535,1-1024保留端口号,为标准的服务端口
目的端口:无须多解释
UDP长度:header+data 总长度 65507
UDP校验和:伪头部,头部,data 三部分校验和。伪头部,文末稍作解释。
数据:上层应用层的数据。
校验和计算:
检验和算法是把若干个16 bit字相加。。解决方法是必要时在最后增加填充字节
0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。
U D P数据报的长度在检验和计算过程中出现两次。

如果检验和的计算结果为0,则存入的值为全1(6 5 5 3 5),这在二进制反码计算中是等效
的。如果传送的检验和为0,说明发送端没有计算检验和。

PING

ping和 tracert 都利用 ICMP 协议来实现网络功能
从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。
在这里插入图片描述以上是我在编写程序时,经常翻看的部分,需要做到理解于心才能写好程序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值