ip address命令如下
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:16:3e:06:27:6c brd ff:ff:ff:ff:ff:ff
inet 172.17.6.131/20 brd 172.17.15.255 scope global eth0
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:08:dc:5b:2c brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
IP地址分类
下面这个表格列出了A,B,C三类的IP地址范围
无类型域间选路(CIDR)
C类的私有网络主机太少了,A类的又太多了,于是出现了CIDR技术,算是一个折中
考虑到IPv4地址不够用了,于是将32位的IP地址一分为二,前面是网络号,后面是主机号
比如 10.100.122.2/24,这就表示前面24位是网络号,后面8位是主机号
10.100.122.2/24
子网掩码就是255.255.255.0,24个1和8个0组成
IP地址和子网掩码做AND运算就可以得到网络号,10.100.122.0
这个网络中的广播号就是主机号全为1的情况,也就是10.100.122.255
网络号钟第一个主机或者第二个主机一般是网关,比如 10.100.122.1
特殊的CIDR
16.158.165.91/22
因为22不是8的整数倍,所以要先变成二进制,前面16位是固定了,那么就是
16.158.<101001> <01>.91
这里的16.158.<101001> 就是网络号
<01>.91是主机号
这个网络号对应的子网掩码是 255.255.252.0
它的网络号是16.158.164.0
广播地址就是16.158.<101001><11>.255,也就是16.158.167.255
第一个地址是16.158.<101001><00>.1,页就是16.158.164.1
<BROADCAST,MULTICAST,UP,LOWER_UP> 这个是网络设备状态标识
UP标识网卡处于启动的状态
- BROADCAST表示这个网卡有广播地址
- MULTICAST表示网卡可以发送多播包
- LOWER_UP表示L1是启动,即插着网线
- MTU1500表示最大传输单元,以太网的默认值
- qdisc pfifo_fast queueing discipline 排队规则的意思
- 最简单的qdisc是 pfifo,是先进先出的方式
- pfifo_fast是分成三个权重的队列,也即三个波段band
- band_0优先级最高,band_2最低,如果band_0里面有数据,系统就不会处理band_1的数据报
- 数据报是按照服务类型Type of Service TOS,也就是IP头里面的一个字段
MAC地址是身份,但是无定位功能
IP是地址,有定位功能
CIDR可以用来判断是不是同一个网络里面的机器
IP数据报的格式如下:
注意,上图表示的数据,最高位在左边,记为0位;最低位在右边,记为31位。在网络中传输数据时,先传输0~7位,其次是8~15位,然后传输16~23位,最后传输24~31位。由于TCP/IP协议头部中所有的二进制数在网络中传输时都要求以这种顺序进行,因此把它称为网络字节顺序。在实际编程中,以其他形式存储的二进制数必须在传输数据前使用网络编程API相应的函数把头部转换成网络字节顺序。
IP数据报各字段功能如下:
1)版本号:占用4位二进制数,表示该IP数据报使用的IP协议版本。目前Internet中使用的主要是TCP/IP协议族中版本号为4的IP协议。
2)头长度:占用4位二进制位,此域指出整个报头的长度(包括选项),该长度是以32位二进制数为一个计数单位的,接收端通过此域可以计算出报头在何处结束及从何处开始读数据。普通IP数据报(没有任何选项)该字段的值是5(即20个字节的长度)。
3)服务类型(TOS、type of service):占用8位二进制位,用于规定本数据报的处理方式。服务类型字段的8位分成了5个子域:
(1)—优先权(0-7)数越大,表示该数据报优先权越高。网络中路由器可以使用优先权进行拥塞控制,如当网络发生拥塞时可以根据数据报的优先权来决定数据报的取舍。
(2)—短延迟位D(Delay):该位置1时,数据报请求以短延迟信道传输,0表示正常延时。
(3)—高吞吐量位T(Throughput):该位置1时,数据报请求以高吞吐量信道传输,0表示普通。
(4)—高可靠位R(Reliability):该位置1时,数据报请求以高可靠性信道传输,0表示普通。
(5)—保留位。
目前在Internet中使用的TCP/IP协议大多数情况下网络并未对TOS进行处理,但在实际编程时,有专门的函数来设置该字段的各域。一些重要的网际应用协议中都设置了建议使用的TOS值:
从上表可以看出,对于与用户直接交互的应用,一般使用短延时;对于有大量数据需要进行传输的应用,一般选用高吞吐量;对于数据报要传输控制信息的应用,一般选用高可靠性。在数据报的生存期内不支持TOS的,TOS字段就设置为0x00。
4)总长度:占用16位二进制位,总长度字段是指整个IP数据报的长度(报头区+数据区),以字节为单位。利用头部长度字段和总长度字段就可以计算出IP数据报中数据内容的起始位置和长度。由于该字段长度为16位二进制数,因此理论上IP数据报最长可达65536个字节(事实上受物理网络的限制,要比这个数值小很多)。
5)生存时间(TTL,time to live):占用8位二进制位,它指定了数据报可以在网络中传输的最长时间。实际应用中把生存时间字段设置成了数据报可以经过的最大路由器数。TTL的初始值由源主机设置(通常为32、64、128或256),一旦经过一个处理它的路由器,它的值就减1。当该字段为0时,数据报就丢弃,并发送ICMP报文通知源主机,因此可以防止进入一个循环回路时,数据报无休止地传输下去。
6)上层协议标识:占用8位二进制位,IP协议可以承载各种上层协议,目标端根据协议标识就可以把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了。
常用网际协议编号:
7)校验和:占用16位二进制数,用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算。
原理:发送端首先将检验和字段置0,然后对头部中每16位二进制数进行反码求和的运算,并将结果存在校验和字段中。 由于接收方在计算过程中包含了发送方放在头部的校验和,因此,如果头部在传输过程中没有发生任何差错,那么接收方计算的结果应该是全1。
8)源地址:占用32位二进制数,表示发送端IP地址。
9)目的地址:占用32位二进制数,表述目的端IP地址。
参考