TCP/IP协议之IP层
TCP/IP协议的结构参见下图。有应用层,运输层,网络层,链路层。
但是如果更细化的话,其实还有几层没在这上面体现出来。
1 表示层:数据格式化,代码转换,加密。 没有协议
2 会话层:解除或者建立与其他结点的联系。没有协议
3 物理层:以二进制形式在物理链路上传输数据。协议有ISO2100,IEEE802
在上图中加上这三层协议。就构成了OSI七层协议网络模型。从上到下分别是应用层,表示层,会话层,传输层,网络层。数据链路层,物理层。
为什么一个数据传输要分成这么多层呢。统一为一个模块不行么。其实不管是多层还是单层,都是可以实现数据传输的。但是在OSI7层模型中,每一层都有自己独特的任务。如果如果只有一层的话。在后期维护的时候,就会出现混乱。没有一个明确的责任主体
这就好比是一个工厂。工厂有生产线,采购部,质量部,运输部,财务部,市场部。对一个产品从无到有的过程中,会经历以上部门的处理。如果有任意一个节点出了问题,只需要处理问题节点即可,其他节点照常运行。OSI7层模型也是一样的道理。各个层可以看做是生产流水线上各个部门。各司其职,各自负各自的责任。这也体现了分工协作的思想。
那么7层模型中各自的作用是什么呢:
应用层:文件传输,电子邮件,文件服务,聊天软件,视频播放等各种软件应用。常用的协议有FTP,TFTP,SNMP,SMTP,DNS,Telent. 作用在于产生数据报文
传输层:协议有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小区XX栋Y-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地址
TCP/IP协议之IP层的更多相关文章
- IP协议号 IP首部中有8位协议号,用于指明IP的上层协议.
IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网 ...
- TCP/IP 协议:链路层概述
我们以一个常见的查看IP指令为出发点(ifconfig -a): 1.链路层是什么 链路层是指硬件层协议.也即网络所使用的硬件,比如:以太网(后文主要讨论对象),令牌环网,FDDI已经RS-232 ...
- TCP/IP协议族各层的作用
从协议分层模型方面来讲,TCP/IP由四个层次组成:数据链路层.网络层.传输层.应用层一.数据链路层 数据链路层是负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层 ...
- TCP/IP 协议:IP 协议
首先来看一下IP协议在实际中的位置: 我们只关系流程,不关系当前具体的服务类型 1.IP协议概述 作用: 从上图或从应用层->运输层->网络层->链路层来看,IP协议属于网络层,也就 ...
- tcp/iP协议族——IP工作原理及实例具体解释(下)
IP协议具体解释 上一篇文章文章主要介绍了IP服务的特点,IPv4头部结构IP分片.并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程.本文主要介绍IP路由,IP ...
- 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议
摘要: 本文简单介绍了网络层理论知识,详细讲解了IP数据报各个字段,并从Wireshark俘获分组中选取IP数据报进行分析,也阐述了分组和分片的区别. 一.IPv4数据报 网络层是 ...
- TCP/IP协议族——IP工作原理及实例具体解释(上)
IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...
- ip协议,IP,子网掩码,ping命令是什么
ip协议: 定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示 IP地址:是给每个连接在Internet上的主机分配的一个32bit ...
- TCP/IP 协议 OSI七层协议
------------------你来自何处并不重要,重要的是你要去往何方,人生最重要的不是所站的位置,而是所去的方向.人只要不失去方向,就永远不会失去自己! day 27 # # -------- ...
随机推荐
- web 直播&即时聊天------阿里云、融云(三)
经过前面的知识,基本已经把聊天室的功能搞定了,剩下的就是直播的问题了... 一如既往,阿里云的web demo也是少的可怜,只有一个web播放器(Prismplayer),所以这里主要就此播放器踩的坑 ...
- 标准IO和重定向
1.标准输入/输出/错误 当shell启动,它继承三个文件:stdin.stdout.stderr,标准输入通常来自键盘,标准输出和标准错误通常是屏幕.标准输入/输出/错误的文件描述符为0.1.2 2 ...
- 写代码中遇到的问题(php接收不到传过来的json数据,php使用utf8的用法)
今天写代码用python处理完数据,传给php服务器后,发现接收不到数据,因为是跨域,所以加了消息头:header('Access-Control-Allow-Origin:*');但是并没有什么卵用 ...
- python 标准库 -- requests
一. 安装 $ pip install requests requests 并不是python 标准库, 但为了汇总方便, 将其放置于此. 二. 用法 requests.get() : GET 请求 ...
- ADO.NET中的五大对象
Connection connection 对象主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取到数据的.这个物件是ADO.NET的最底层,我们可以自己产生这个对象, ...
- 大话Python正则表达式
python的正则表达式模块re import re match_object=re.compile(r"") result=re.match(match_object," ...
- stringsteam使用之整型转字符串
最近需要用到整型转字符串的操作,学习了stringstream一些皮毛. 首先需要包含头文件. #include<sstream> 然后用流操作的方式将值传递给stringstream对象 ...
- 【Android Developers Training】 21. 创建一个可变动的UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- USACO hamming
考试周终于过去了一半,可以继续写USACO了. 先来看一下题目吧. Hamming CodesRob Kolstad Given N, B, and D: Find a set of N codewo ...
- 9.Smarty的循环
1.session循环 目的:循环输出一个二维数组 构造一个二维数组 $towSide = array( array("name"=>"caimuqing" ...