第四十七讲——IP首部 本文共有19155个字,关键词: IP首部中有很多的信息,如IP的版本,是IPV4还是IPV6。IP首部的内容如下(每32bit为一行): IPversion(4bit) Hdr les(4bit) type of service(8bit) totallengh(16bit) (IP版本) (首部长度[可变]) (服务类型[优先级]) (整个报文长度) Identfication(16bit) fragment ID(16bit) 标记符 片ID(片标记) 当我们发送报文时,在经过某些设备时,可能不支持较大的数据包,于是将报文拆分,那么问题就来了,当收件人接到拆分的报文怎么处理?我们可以进行猜测,收件人需要对拆分的报文进行重新组装,那么接收的设备又会遇到怎么组装的问题,即要知道拆分的顺序以及哪些片可以组合。 所以当一个报文被切割后它们的标记必须得一样(对于同一个报文来讲)。 fragment offset片偏移,当收到的报文中标记符一致时,说明这些报文要组合成一个,然后按照标记的偏移量来衔接拆分的报文。 (尾)03 02 01(头) 01片的偏移量为0,因为01是头部,02片的偏移量为01的长度,03偏移量的长度为01加上02的长度。 偏移量用来标识自己在整个片上的偏移位置。 fragment前有三位 R、DF、MF MF:更多的片,意思为需整合其他的片,more fragment。 DF:Don’t fragment,不允许切割,为一个完整的报文。 R :暂时先不讲解。 TTL(time-to-live) protocol(协议8bit) header checksum 生存时间(8bit) 用于标记上层协议(tcp、udp等)(首部校验和16bit) TTL定义了报文的投递次数,避免在类似环状路由的情况下一直存在,每经过一个路由该TTL减1,当TTL为0时就不再投递。 每一种协议都有一个标识符用于说明这是什么报文的上层。 我们的首部生成以后,会将校验码提出来(计算出来),放到校验和的位置,因为报文在传输的过程中有可能会出错(干扰,或者设备本身的内部错误导致。)校验和采用了单项加密的机制,即只要数据一样,结果一定一样,如果结果不一样,数据是一定不一样的。 source IP address 源IP(32位) destination IP address 目标IP(32位) options(可选)最大长度为40字节 data(数据)包含传输层首部、应用层首部。 OSI模型其实只是一个参考模型,我们常用的是TCP/IP模型。 TCP/IP模型(现实中正在使用的模型),有五层。(五层模型) 应用层——对应OSI中的(应用层、表现层、会话层) 传输层 网络层(互联网层) 链路层 物理层 IP首部,在IP header中,每32bit当做一个组织(单元)来进行使用和理解,这就意味着每个是4个字节(32bit)一行。 我们通常说包长度的时候指的是有多少行,(一共有多少个单元[行],而不是有多少个字节)。即header length(首部长度)标记的不是字节数二是行数,最大能够标记2^4-1行,这也是为什么可选项最大只能为40字节的原因,最大能够标记15行(60个字节),前面的各种数据占用20个字节(5行),在互联网上,不同设备他们彼此之间所支持的报文大小可能是不一样的,这取决于MTU,MTU:最大传输单元,所以在不同的设备上,其MTU是有差异的。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-01-16 评论 1617 次浏览