TCP/IP协议之IP层

TCP/IP协议的结构参见下图。有应用层,运输层,网络层,链路层。linux

可是若是更细化的话,其实还有几层没在这上面体现出来。网络

1 表示层:数据格式化,代码转换,加密。 没有协议加密

2 会话层:解除或者创建与其余结点的联系。没有协议视频

3 物理层:以二进制形式在物理链路上传输数据。协议有ISO2100,IEEE802blog

在上图中加上这三层协议。就构成了OSI七层协议网络模型。从上到下分别是应用层,表示层,会话层,传输层,网络层。数据链路层,物理层。ip

为何一个数据传输要分红这么多层呢。统一为一个模块不行么。其实不论是多层仍是单层,都是能够实现数据传输的。可是在OSI7层模型中,每一层都有本身独特的任务。若是若是只有一层的话。在后期维护的时候,就会出现混乱。没有一个明确的责任主体路由

这就比如是一个工厂。工厂有生产线,采购部,质量部,运输部,财务部,市场部。对一个产品从无到有的过程当中,会经历以上部门的处理。若是有任意一个节点出了问题,只须要处理问题节点便可,其余节点照常运行。OSI7层模型也是同样的道理。各个层能够看作是生产流水线上各个部门。各司其职,各自负各自的责任。这也体现了分工协做的思想。部署

那么7层模型中各自的做用是什么呢:get

应用层:文件传输,电子邮件,文件服务,聊天软件,视频播放等各类软件应用。经常使用的协议有FTP,TFTP,SNMP,SMTP,DNS,Telent. 做用在于产生数据报文cmd

传输层:协议有TCP,UDP,是对数据报文在链路上传输进行控制的. 做用在于告诉数据报文如何去目的地

网络层:协议有IP,ICMP,RIP,OSPF,BGP等。是对数据报文进行地址寻址的协议。做用在于告诉数据报文去哪

数据链路层:协议有ARP,RARP,PPP等,做用在于告诉数据报文如何在路上行走。

咱们来看下报文的结构,从应用层到链路层,每一层对本身的数据进行一个打包,交给下一层进行处理。最终造成一个以太网帧。

到了目的地后,对端也是从链路层解析到应用层,而后解析出来的数据交给各层进行处理,以下图。

这种封装,解封装的过程就比如是发送一个公司给另一个公司发送包裹。源公司的各个部门将本身的数据封装好,最终造成一个总的包裹,目的公司收到包裹后,按照包裹的封装各层解析,而后交给各个对应的部门

 

那么下面咱们就首先来介绍下IP层协议。

将IP层协议首先介绍IP地址的概念。IP地址在网络上的做用就比如咱们在快递物品时填写的地址。每一个设备要想在网络上进行应用交互或者是和其余设备通讯,都须要一个IP地址。那么咱们的IP地址在哪能查呢。

Windows系统下在cmd界面输入ipconfig。获得下面的结果。其中IPV4地址就是本机的IP地址。

Linux系统下输入ifconfig

在查询出来的信息中,有几个概念须要介绍下。1 子网掩码。2 默认网关。

IPV4地址为32bit,分为两个部分,网络号和主机号。为何要这样区分呢。前面讲到IP协议的做用就在于寻址,这个寻址就是寻找不一样网络的地址。网络地址就是由IP地址的网络号肯定的,不一样的网络号表明不一样的网络地址。若是属于同一网络,那么主机号就是区分同一网络下的设备。就比如有一栋楼,这栋楼的业主要寄包裹。那么地址以下:

XX市XX区XX街道XX小区XXY-Y号。前面红色标注的地址每一个业主都同样。不同的是具体门牌号。红色标注的地址就比如IP网络中的网络地址,Y-Y号就比如主机地址。

IP地址的格式以下,分为A-E类地址。A-E类地址经过最左边的比特来肯定。A类为0,B类为10,C类为110,D类为1110,E类为11110.。 后面的部分就区分为网络号和主机号

前面介绍了IP地址的做用,那么网络掩码是干吗的呢。网络掩码就是用来区分IP地址的网络号以及主机号分别是多少。计算的方法就是IP地址和网络掩码进行与运算,获得的就是网络地址。

好比192.169.1.1的二进制位11000000 10101001 00000001 00000001

掩码255.255.255.0的二进制位 11111111 11111111 11111111 00000000

获得的网络地址就是192.169.1.0。那么主机号就是最后的1个字节(8个bit)。那么在这个网络下主机IP地址的范围就是192.169.1.1->192.169.1.254。其中192.169.1.0是网络号,主机地址不会采用。192.169.1.255是该网络的广播地址。所以主机号的bit为全0 或者全1都不会采用. 所以可分配的主机个数为2的n次方(n为主机号的bit个数)-2. 参考上面的这个例子,主机号长度为8. 那么可分配的主机个数为2^8-2=256-2=254。

前面A-E类IP地址的网络号和主机号都是固定的,对于具体的网络部署来讲并非很方便,咱们能够本身定义网络号和主机号。也就是自定义网络号和主机号的长度。这叫作变长子网掩码。好比刚才的192.169.1.1的网络号是192.169.1.0. 咱们也能够写成192.169.1.1/24. 这个24代表的是网络长度。这样写的话就比较直观了。那么边长子网掩码就是改写这个长度,好比192.169.1.1/20 那么网络号就只占20位。结果以下.因为网络号只占了20位,所以主机IP地址长度从8扩展为12. 那么可分配的主机号就为2^12-2=4094。

所以若是想一个网络容纳更多主机,那么能够缩短网络号长度。若是想规划更多的子网,那么能够增长网络号长度

下面再看下网关的含义:顾名思义,网关就是网络关口的意思。通俗点说就是告诉网络下一个地址是在哪。好比前面查出来的网关为192.168.0.1,IP地址为192.168.0.5。 也就是说首先将数据包发给192.168.0.1. 这个192.168.0.1在真实的环境中就是个人无线路由器。链接到到这个无线路由器下的设备都将数据包发送给路由器。而后经过路由器向外转发。

那么网关是不是必需要配置的呢,其实也不是,只要是L3设备能够经过配置路由和下一跳,这里下一跳就是起到网关的做用。数据发到网关设备后,网关设备会根据本身的路由表找到转发路径将数据转发到目的地址。咱们能够用tracert(linux下用traceroute)的命令来看下,好比输入tracert www.sina.com.cn 就会获得下面的通过的地址。第一个地址就是192.168.1.1网关地址。下面显示总共通过了8次转发。

Windows:

Linux:

下面咱们来看下IP协议的组成,IPV4中普通的IP首部长20个字节。其中有32位的源IP地址和32位的目的IP地址。

TTL:生存时间。表明了数据包能够通过的最多路由器数。好比TTL为10,意思是若是通过10次路由器转发,仍然未找到目的地址,则报文丢弃

8位协议指示的是传输层承载的协议

16位总长度:指IP数据包的最大长度。16bit那么最长可达65535字节。可是经过链路的MTU不会有这么大。所以若是数据包长度超过了MTU,数据包会被分片。若是发生了分片,则须要用到16位标识以及13位片偏移来找到分片的报文。

咱们用wiresharK来抓取一个具体的数据包看下IP报文:其中Time to live:128也就是TTL 128.

Protocol: UDP,说明这个是一个UDP报文。 Source和Destination分别是源和目的IP地址

相关文章
相关标签/搜索