网络基础协议之IP
IP 协议的简单描述
- IP是网络层协议
- IP是不可靠传输协议
- IP由两部分内容组成,分别由首部和数据组成
- IP数据报最大支持65534字节的传输(因为我看书上写的是,数据包由总长度决定,总长度是2的16次方-1的总和大小)
- IP数据报最大支持6万多个字节的传输,但是每次传输的最长大小由以太网协议II及互联网传输的大小决定,以太网II最大支持传输单元1500字节,互联网传输的默认大小是576字节,所以IP协议是支持分片处理的。
IP数据报首部格式
版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个版本的ip,相同版本的ip才能进行通信。一般此处的值为4,表示ipv4
首部长度:指的是首部占32 bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。
Tos服务类型:服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。
下图列出了对不同应用建议的TOS值
总长度:该字段表示整个ip报文的长度,包含首部和数据,单位是1字节。能表示的最大字节为2^16-1=65535字节。不过由于链路层的MTU限制。超过1480字节后就会被分片(以太帧MTU为1500的情况下,除去20字节的包头)
标识:标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。
标志:该字段是与ip分片有关的。其中有三位,但只有两位是有效的,分别为MF,DF。MF标识后面是否还有分片,为1时表示后面还有分片,为0时表示这是若干数据包分片之后中的最后一个。DF标识是否能分片,只有为0表示可以分片。
分片偏移:该字段是与ip分片后,相应的ip片在总的ip片的位置。该字段的单位是8字节。比如,一个长度为4000字节的ip报文,到达路由器。这是超过了链路层的MTU,需要进行分片,4000字节中,20字节为包头,3980字节为数据,需要分成3个ip片(链路层MTU为1500),那么第一个分片的片偏移就是0,表示该分片在3980的第0位开始,第1479位结束。第二个ip片的片偏移为185(1480/8),表示该分片开始的位置在原来ip的第1480位,结束在2959。第三片的片偏移为370(2960/8),表示开始的时候是2960位,结束的时候在3979位。
TTL:该片表示生存周期,该值占8位。ip分片每经过一个路由器该值减一,它的出现是为了防止路由环路,浪费带宽的问题。比如,该ip在R1路由器发送到R2路由器。R2路由器又发给R1路由器。防止这种循环。window系统默认为128。但是之前的老版本反馈以经过路由器的条数/秒数进行描述。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
协议:该值标识上层的协议。占8位。其中1标识ICMP、2标识IGMP、6标识TCP、17标识UDP、89标识OSPF。
校验和:首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
源地址:发出数据报的主机IP地址
目的地址:接收数据报的主机IP地址
选项:保留作额外的IP 选项。它包含着源站选录和时间戳的一些选项。
数据:使用IP传递的实际数据。
问题记录
1、同网段数据包传输,TTL是否发生变化?
答:TTL 是用来标识一个数据包中间经过的路由节点变化的时间参数(注意是时间),同网段不需要跨网段通信,所以是不会发生改变的。
2、发送一个ICMP包3000字节的请求大小,为什么实际传输的过程中大小超过3000字节?
答:因为ICMP 属于IP网络的附属上层协议,传输的过程中最大默认仅支持1500字节的传输大小,所以需要拆包处理。但是拆出来的包实际还是需要包含底层需要自带的以太网协议及IP协议,纯粹的数据包是没办法直接传输的,所以大小必然超过3000字节。
3、实际ICMP包3000字节大小的传输,实际需要拆分成几次传输,每次大小应该是多少,为什么?
答:等了解完ICMP 协议再回来补充
4、发现一个小技巧,所有的网络上层包协议是由下层中声明的。
比如:IP网络层协议的判断,实际是由以太网协议II注明标识的,而TCP协议却是在IP协议层中进行指定
5、IP数据报首选格式中 "首部长度"的大小及描述
1、首选长度大小是4bit 2、首选长度的范围是0000 至 1111 3、首选长度表示的最小单位是32bit,即4字节。 4、首选长度表示的是整个IP数据报首部中固定格式大小;即:固定大小20字节 + 选项 + 数据。 5、举例:首选长度4bit表示的数字是1111,换算成十进制表示15,则表示首选固定长度大小是60字节(15*4,这里的4表示的就是最小单位32bit,而并非首选长度本身的大小) 6、IP报文长度不是4字节的整数倍时,数据传输时就需要对剩余的部分进行填充。注意:这里说的是IP报文长度,不是首选长度 7、常用的IP报文固定大小是不包含选项和数据的,大小20字节。所以首选长度表示0101,换算成10进制就是5的含义,这也是为什么抓包中表示的是数字5。 这个点真的是卡了我好久,我这种有强迫症的人,一个不确定的因素真的是能卡好久。
参考内容
- https://www.cnblogs.com/jiangzhaowei/p/9273854.html
- https://blog.csdn.net/qq_38314112/article/details/80737775
- https://www.cnblogs.com/zhangbing12304/p/11016921.html