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. sql server:alter database name

    --step 1 : 修改数据库名称 USE master GO ALTER DATABASE GeovinDuCms SET SINGLE_USER WITH ROLLBACK IMMEDIATE ...

  2. 我的Java之旅 第六课 JAVA WEB 请求与响应

    一.有关URL编码    1.在URL的规范中定义了一些保留字符,如::  /  ?  & =  @  % 等,在URI中有它的作用.如果要在URI中包含这些字符,必须转码,即%字符后跟十六进 ...

  3. Android事件总线(二)EventBus3.0源码解析

    1.构造函数 当我们要调用EventBus的功能时,比如注册或者发送事件,总会调用EventBus.getDefault()来获取EventBus实例: public static EventBus ...

  4. springcloud 入门 10 (eureka高可用)

    eureka高可用: 说白了,就是加一个实例作为原实例的备份,然后一起对外提供服务.这样可以保证在一台机器宕机的时候,整个系统不会死掉.保证其继续对外服务. eureka的集群化: 服务注册中心Eur ...

  5. linux E325: 注意 发现交换文件 "*.swp" 解决方法

    今天在linux里修改脚本文件时,不小心非正常关闭了脚本文件,再次编辑时,每次都提示 如下错误: E325: 注意发现交换文件 ".bqh.sh.swp" 所有者: root 日期 ...

  6. Windows 10忘记登录密码不用怕,系统U盘/光盘轻松重置

    我们有时会遇到忘记Windows10登录密码,或者电脑被其他账户登录后不知道密码无法开机的情况.遇到这些问题后,我们可能会借助一些第三方工具来移除现有密码.然而这些工具本身的安全性还有待检验,肯定不如 ...

  7. Django框架的简介

    Django框架的背景 Django是一款基于Python开发的全栈式一体化Web 应用框架.2003 年问世之初,它只是 美国一家报社的内部工具,2005 年 7 月使用 BSD 许可证完成了开源. ...

  8. DLL加载顺序

    最近碰到了一个问题,要引入一个第三方的SDK,但是SDK中使用的一些dll和我原本程序里面有些dll是同名的,而且本程序的dll和sdk的dll名称都不能修改. 解决这个问题,首先想到的就是多进程,这 ...

  9. 【微信JSSDK】PHP版微信录音文件下载

    微信的录音文件上传到微信服务器上,只能保存三天. 因此需要做一个转存到自己服务器,或者七牛云的操作. 转存到自己服务器 调用微信JSSDK API 录音, 录音结束,上传到微信服务器,获取录音文件的 ...

  10. Android Activity.startActivity流程简介

    http://blog.csdn.net/myarrow/article/details/14224273 1. 基本概念 1.1 Instrumentation是什么? 顾名思义,仪器仪表,用于在应 ...