注:本文只针对IPv4
IP简介
Internet 上的每台主机(Host)都有一个唯一的IP地址。IP协议就是使用这个地址在主机之间传递信息,这是Internet 能够运行的基础。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。例如159.226.1.1。IP地址有两部分组成,一部分为网络地址,另一部分为主机地址。IP地址分为A、B、C、D、E5类。常用的是B和C两类。ip地址就像是我们的家庭住址一样,如果你要写信给一个人,你就要知道他(她)的地址,这样邮递员才能把信送到,计算机发送信息是就好比是邮递员,它必须知道唯一的“家庭地址”才能不至于把信送错人家。只不过我们的地址使用文字来表示的,计算机的地址用十进制数字表示。
众所周知,在电话通讯中,电话用户是靠电话号码来识别的。同样,在网络中为了区别不同的计算机,也需要给计算机指定一个号码,这个号码就是“IP地址”。
以上在百科找到的
IP地址分类:
A类:1~126
127为本地环路
B类:128~191
C类:192~223
D类:224~239
E类:240~255(其中255.255.255.255为广播地址)
其中
A类的10开头的为私有地址
B类172.16.0.0~172.31.0.0为私有地址
C类 192.168.0.0~192.168.255.0为私有地址
什么是私有地址呢?就是为了防止与广域网的IP冲突,所以就划分一部分IP给局域网使用
子网划分:
为什么要有子网呢?
如果一个网络里面只有10台机器,如果分配一个254个IP给这个局域网是不是有点浪费了,所以就可以将一个大的网络分成若干个小的子网
如:192.168.1.2 255.255.255.0
大家应该都比较常见到这样的地址,我们把子网掩码转换成二进制的数字
255.255.255.0
11111111.11111111.11111111.0000000
我们按照排列后面的8个0转换成1,一共就有256种组合,除去最小的网络号和最大的广播地址,所以这个网络就可以容纳254台主机
这个地址也可以这样写法192.168.1.2/24 因为子网掩码里有24个1,
所以只要算出掩码里前面有几个1和后面有几个0就可以了.
好了,我们现在来看这样一个地址
192.168.1.2/30
这样一个地址里面有几个主机
同样A类地址和B类地址都是一样的算法
电脑和电脑之间是如何通信的呢?众所周知电脑是0和1的世界,所以呢电脑之间的通信中的每一个0和1都有他们特别的意义.现在我们就开始来分析一个数据包的结构.电脑之间的通信是以数据包的形式进行的,所以我们只要分析出每一个包里面的数据就可以知道电脑之间是如何通信的.
什么是数据包
“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称”数据包”。有人说,局域网中传输的不是”帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,”包”是包含在”帧”里的。
我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。
“包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。比如在Windows 2000 Server中,把鼠标移动到任务栏右下角的网卡图标上(网卡需要接好双绞线、连入网络),就可以看到”发送:××包,收到:××包”的提示,如图1所示。通过数据包捕获软件,也可以将数据包捕获并加以分析。
数据包的结构
数据包的结构非常复杂,不是三言两语能够说清的,在这里我们主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由”目的IP地址”、”源IP地址”、”净载数据”等部分构成,下面所示。
版本号(4位)
头长度(4位)
服务类型TOS(8位)
总长度(16位)
标示(16位)
标志(3位)
头偏移(13位)
生存时间TTL(8位)
上层协议标示(8位)
头部校验和(16位)
源IP地址(32位)
目的IP地址(32位)
选项
数据
以上就是一个数据包的结构,我们现在就来分析为什么要这么分和每一个段的分别的作用:
Version(版本):ip的版本号(0×800代表IPv4,0×86DD代表IPv6)。前四位。
IHL(Internet Header Length,Internet包头长度):以4字节为单位,4bit。取值为5-15,所以包头长度为20-60字节。
Codepoint(编码点):也称TOS,Type of Service(服务类型),共8bit。前三个bit表示优先级,共8个优先级,从000(普通)到111(控制)。D为时延(0为一般,1为低时延)。T为吞吐量(0为一般,1为高吞吐量)。R为可靠性(0为一般,1为高)。C为路由设置的费用(0为一般,1为廉价)。最后一个bit不用,设置为0。
Total Length(总长):16bit,因此最大IP数据报长65535字节。
Fragment ID(碎片ID):同一数据包的分片具有相同的碎片ID。16bit。(如果你发送了一个1M的文件给对方,电脑肯定不会一次把一个1M的数据包发过去,所以这里就要有一个ID号,把它切成若干份分别编号,到对方的电脑上就可以数据重组。)
Flags(标志位):3bit。第一位不用,为0,第二位为DF(不分片),第三位MF(更多碎片)。
标志位的作用就是,如果现在一个包是200K的大小,如果遇到一个线路上传输速度小于200K的话怎么办?所以路由器就会对这个包进行分片,这里就是标志有没有分片。
Fragment Offset(碎片偏移量):表明了碎片在分片前的位置,方便组合。13bit。
这个是配合上面的标志所用的,也就是分片的编号。
TTL(Time TO Live,存活时间):8bit。
这个的作用就是如果一个数据在网络设备上如果一直在一个环路上发来发去,久而久就会越来越多,造成链路的堵塞,所以只要一个数据经过一个三层设备(三层交换机或路由器)时就会减去一(这里最大255)
Protocol(协议):8bit。
ICMP(1),IGMP(2),GCP(3),TCP(6),EGP(8),IGP(9),UDP(17),OSPF(89),TP4(29)。
Checksum(校验和):16bit。
源地址和目的地址:各32bit。
选项字段:
传输的数据,即负载。
以下是我从电脑捕获的一个数据包

