IP协议层 在传输层的下边,链路层的上边。

IP层封装后称为数据报(传输层叫数据段,链路层叫数据帧。值得注意的是,不是所有的以太网数据帧都是IP数据报,至少以太网还要使用ARP协议。不是所有的IP数据报都是UDP或TCP数据,因为比如ICMP、IGMP也用IP传送数据)。

IP协议在网络中当然非常重要了,所有的TCP、UDP、ICMP、IGMP数据都以IP数据报格式传输。
IP协议提供一种不可靠、无连接的服务。网络中的可靠性是交给上层的传输层负责,比如TCP协议。IP实际也提供了尽可能的服务,尽力发送了哈哈。无连接意思是,不维护一个后续数据报的状态(比如TCP交换数据前的三次握手,靠一对IP和端口维护连接),IP每个数据报都是独立的。比如说两个数据报从源端发送到目的端,先发的A,后发的B,但是他俩谁先到目的端都不一定,走的路由线路也可能不一样。

IP首部。每个协议的首部还是很重要和关键的,理解首部各个字段的意思很有必要...

IP数据报的格式如下:

一般数据报的头部占有20个字节,如果有选项数据(比如IP记录路由选项,记录时间戳都是放在这个字段里)就要再加上选项数据的字节长度。除了头部就是数据区了(显然如果从传输层过来的,那么这个数据区就会包含传输层的头部和他的数据)。

按照首部的网络字节序介绍下:

4bit 版本:  版本号,v4还有很多,路由也已经支持了v6。

4bit 首部长度:  首部长度指的是首部占32bit字的数目,包括首部选项。4bit最大(全为1)能表示15。那么15*32bit,表示最大首部长度为60个字节。
8bit 服务类型(TOS):  一些应用程序的类型,比如telnet、ftp、tftp smtp icmp等等。不同的程序有不同的TOS参数:比如最小时延、最大吞吐量 、最高可靠性、最小费用等。类如telnet这种程序,就要求交互性高一些(最小时延),ftp需要吞吐量大一些。(注:一般实现都不设置TOS这个字段,这些类型需要其他东西判断,比如根据端口号来区分是什么服务...)
16bit 总长度(字节数):  和首部长度以32bit为单位不同,这个是以8bit一个字节为单位。总长度是包括ip头部和数据部分。显然16bit的最大长度是65535。但是一般不会这么大,ip层数据报到了链路层,链路层会给数据报分片,不然太大了...分片时,这个总长度就是各个分片的总长度了。总长度是必须要设置的,因为链路层的数据帧(帧的数据部分就是这个ip数据报)有最小长度要求,如果不够需要补长,补长的话就需要在帧尾了,帧尾就污染到数据报了,所以如果有这个必要的ip数据报总长度,就能区分哪些是补长,哪些是数据报的数据哈哈。
16bit 标识:   唯一标识主机发送的每一个数据报。被分片以后,分片的每个分组中的标识是一样的。
3bit 标志: 3bit分为保留位,不分片位,更多片位。不分片位是1的时候不分片,0为分片。更多片位在分片中除了最后一个分组为0,其它分片都置为1,表示告诉接收端啥时候把这些分片完成组装的标志。
13bit 片位移:  用于数据报被分片时,记录这个大的数据报被分片了,距离该大数据报第0字节偏移了多少字节。类似于sql中的offset哈哈
8bit 生存时间TTL:  这个字段很有意思,比如ICMP协议中ping、tracerout命令都利用了这个TTL。一般来说,就是网络传输中,跨一个路由,TTL就减1。给他一个生存时间,避免一个包在路由中循环往复一直这么传播。到1或者0这个包就废废了,然后这个路由发回去一个ICMP包告诉源端主机情况。
8bit 协议:   表示上层协议是那种类型,是TCP、UDP、ICMP、IGMP等,识别那个协议向IP传送数据。
16bit 首部检验和:  首部(ip只计算首部的)检验和。发送数据报的时候,1).先把这个16bit全置为0;2).把头部中每个16bit进行相加; 3). 得到的结果取其反码。这个反码就放在16bit的检验和中。接收端接收时,执行上述的2,3步骤,如果值为16bit的1,表示传输正确。这也看出来IP协议也是尽可能的传输了哈哈。
32bit 源端ip地址:   发送端的ip地址。
32bit 目的端ip地址:   接收端的ip地址。
首部选项:  可以存储记录下通过的路由ip、通过的时间戳等信息。显然记录的长度有限。当今这么庞大的互联网,用的也比较局限。

========IP首部============

五类互联网地址和IP范围:  可以看到A类网址容纳主机数量最多,A类网址也比较少基本都分配完了。

IP路由选址:

如果是以太网的一个网段里,那么没必要跨路由器,根据mac地址找到目的端完成传送。
如果跨路由传输,那么就有一个路由传输的算法了,通常如下:
1). 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。
2). 搜索路由表,寻找能与目的网络号相匹配(要用到子网掩码)的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。
3). 搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目 指定的下一站路由器.
三个都没有,那么路由就给它抛弃了,并返回源端一个错误。
以太网中跨路由传输时,值得注意的是。数据帧的首部中目的地址,目的MAC地址,在每个链路里可能是变的,它一般总是指向下一个链路的MAC地址,比如网关路由的MAC地址;而ip首部中的目的地址,目的ip一般是不会变的。经过的路由通常都是根据这个目的ip进行路由的。

子网寻址:
  一般来说,一个ip地址由网络号和主机号组成。但是一个网络号如A类、B类地址下边可以容纳太多的主机(B类也有16bit主机了),一般又不会这么多,就给主机号再分配了,分成子网号和主机号。
拿分配B类地址举例,有16bit的主机号,一般就是8bit的子网号,8bit的主机号。这样一个B类网络号,下边可以有254个子网,每个子网下又可以有254个主机(全0全1)。
子网掩码:
  掩码是一个比特掩码。当然和ip一样也是32位,为1的是网络号+子网号,0的对应主机号。如果知道地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知),也就知道网络号和子网号之间的分 界线。而根据子网掩码就可知道子网号与主机号之间的分界线。
值得注意的是,如果子网号和主机号并非都是8bit的话,比如子网号占了10bit,那么主机号就是6bit了,这种变长子网。这样用点分十进制表示网络号+子网号的时候,最后一个点后边当然就不是0了~

-

TCP/IP协议---IP协议的更多相关文章

  1. http与https与socket tcp/IP与UDP 协议等

    网络由下往上分为:   物理层--                       数据链路层-- 网络层--                       IP协议 传输层--               ...

  2. TCP/IP 和HTTP 协议基础知识

    来源:http://www.myhack58.com/Article/60/63/2014/50072.htm 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过 ...

  3. TCP/IP和HTTP协议代理

    TCP/IP协议族 TCP/IP(传输控制协议/网际协议)是用于计算机通信的一个协议族. TCP/IP协议族包括诸如Internet协议(IP).地址解析协议(ARP).互联网控制信息协议(ICMP) ...

  4. TCP/IP 笔记 - 地址解析协议

    地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射.ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6.地址解析是发现两个地址之间的映射关系的过程 ...

  5. 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 网络层协议 MAC帧、IP数据报、TCP报文 关系 IP地址与硬件地址 链路层与网络层

    小结: 1. 网络层两种服务 虚电路服务 virtual circuit  电信网 网络层负责可靠交付 数据报服务  网络层不负责可靠交付 提供灵活的.无连接的.尽最大努力交付的数据报服务 不提供服务 ...

  6. http协议tcp协议ip协议三次握手四次挥手,为什么三次握手,为什么四次挥手,sockete套接字理解

    1.1 TCP是什么? TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的.可靠的.基于字节流的运输层通信协议.通过TCP协议传输,得到的是一个顺序的无差错的数 ...

  7. 【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议

    本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式. TCP 最重要的特性:reliable. 17.1 引言 本章介绍的是 TCP为应用层提供的服务. 17.2 TCP ...

  8. tcp/ip (网络通讯协议)

    介绍 TCP: 传输控制协议, IP: 网际协议, TCP/IP: 供已连接互联网的计算机之间进行通信的通信协议 在tcp/ip内部 , 包含一系列处理数据通信的协议: tcp.udp.icmp.dh ...

  9. 浏览器解析,HTTP/HTTPS、TCP/IP、WebSocket协议

    浏览器相关 浏览器对同一个域名有连接数限制,大部分是 6. 浏览器指的是 Chrome.Firefox,而浏览器内核则是 Blink.Gecko,浏览器内核只负责渲染,GUI 及网络连接等跨平台工作则 ...

  10. TCP/IP及http协议 SOAP REST

    TCP/IP及http协议: TCP/IP协议主要解决数据如何在网络中传输, 而HTTP是应用层协议,主要解决如何包装数据 SOAP:简单对象访问协议(Simple Object Access Pro ...

随机推荐

  1. 【工具相关】ionic-通过nmp安装最新版本的 cordova 和 ionic

    一,命令行下输入: sudo npm install -g cordova ionic 用来安装最新版本的cordova和ionic. 如下图所示: 二,等待一下,如下图所示. 三,用命令 npm u ...

  2. “由于无法验证发行者,所以WINDOWS已经阻止此软件”的解决方法

    Vista 和 Windows7 系统都很注重系统的安全性,在提高安全性的同时,也给我们某些应用带来不便,例如需要安装插件或证书,可能会弹出“由于无法验证发行者,所以WINDOWS已经阻止此软件”的相 ...

  3. 腾讯X5WebView集成及在移动端中使用

    工作中经常涉及H5网页的加载工作,最多使用的就是安卓系统控件WebView,但是当网页内容比较多的时候,需要等待很久才能加载完,加载完后用户才能看到网页中的内容,这样用户需要等很久,体验很差. 那能不 ...

  4. Expo大作战(三十三)--expo sdk api之MapView(地图),MailComposer(磁力传感计),Lottie(动画)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  5. python2 与 python3 如何实现共存

    1.现在我本机系统已内置python2.6 2.下载进行源码安装 复制链接下载到 /root/mypackage,解压 接着 mkdir /usr/local/python3 然后在解压后的文件夹内执 ...

  6. SQLserver 还原数据库报“指定转换无效”的错的解决方案

    最近在附加一个数据库的时候遇到一个问题:“指定转换无效”,经过分析,出现这个问题的原因可能是:1.版本不对.2.文件加密.3.文件损坏 解决方法: 一.版本不对: 1.   首先确定源数据库版本,下面 ...

  7. sleep和Sleep区别

    windows Sleep 单位是毫秒 linux sleep 单位是秒

  8. 【PAT】B1082 射击比赛(20 分)

    水提水题,直接贴代码啦 #include<cstdio> #include<algorithm> using namespace std; struct ppp{ int id ...

  9. Alpha冲刺! Day6 - 砍柴

    Alpha冲刺! Day6 - 砍柴 今日已完成 晨瑶:讨论确定/解决了:网络判断使用广播方式.密集光点排布问题.丢失.db/记录html/多媒体文件的处理方式. 昭锡:Android工具包接口文档编 ...

  10. [ISE 14.7]Fail to Link the designer导致无法仿真问题

    一.当前配置 操作系统:WIN 8.1 64位 软件:Xilinx ISE 14.7 二.解决方法 首先,似乎64位的binary都有些问题,所以先把ISE Design Suite 14.7这个快捷 ...