TCP/IP协议栈第三层是网络层,网络层的目的是实现两个系统之间的数据透明传送,具体功能包括寻址和路由选择、连接和建立、保持和终止等。

TCP/IP协议给internet上的每台主机和路由分配一个地址,数据在internet中的传输主要就是依据一个个的IP地址来寻迹,最终把数据传送到要传送的目的主机上。

IP协议在TCP/IP协议栈的位置

无需连接:

跨域多个异构物理网,IP协议独立的对待要传输的数据报,在传输前不建立连接,传输数据报需要经过不同的路径。

不可靠性:

可靠性问题交由高层协议解决,数据在传输过程中可能出现丢失,延迟和无序情况。

最大努力传输:

IP尽最大的努力来交付数据报,不轻易放弃数据报。

互联网把它最基本的传输单元称为数据报,与物理网络帧类似,数据报分为首部和数据区,如下图:

IP不规定数据区的格式,可用来传输任意数据。


IP首部:

版本:占4位,指IP协议的版本,目前是IPv4或IPv6。无论主机还是路由器,在收到一个IP数据报时,首先要检查版本字段,以便选择相应的IP协议模块来进行处理。

首部长度:占4位,可表示最大数值是15个单位(一个单位4个字节(32位)),取值5-15,因此IP首部长度范围是20-60字节。

服务类型:占8位。该分组所期望的服务质量。(通用)

bir0             bit1           bit2              bit3             bit4          bit5               bit6          bit7

precedence:低3位,指示对分组进行处理(排队或丢弃)的优先权,值从0(普通优先级)到7(网络控制)。

D、T、R:该分组所希望的路由转发服务类型,不能同时设置。

D:minimize delay

T:maximize reliability

R:maximize throughput

最高两位为保留位。

在RFC1349文件中多出一个C:minimize cost

在RFC2474文件中:

DSCP:differentiated services code point,区分服务编码点

CU:currently unused

服务类型:

bit0    bit1       bit2                bit3           bit4          bit5    bit6         bit7

D(delay)延迟,T(throughput)吞吐量,R(reliable)可靠性,M(monetary cost花费,开销,U(unused)未使用。

优先级有种:

111-Network Control(网络控制)

110-Internetwork Control(网间控制)

101-CRITIC/ECP(关键)

100-Flash override(疾速)

011-Flash(闪速)

010-Immediate(快速)

001-Priority(优先)

000-Routine(普通)

优先级6和7一般保留给网络控制数据使用,如路由。

优先级5推荐给语音数据使用。

优先级4由视频会议和视频流使用。

优先级3给语音控制数据使用。

优先级1和2给数据业务使用。

优先级0为默认标记值。

在标记数据时,既可以使用数值,也可以使用名称(英文名称)。

第3到6比特的含义如下:

0000--normal service;

1000--minimize delay;

0100--maximize throughput;

0010--maximize reliability;

0001--minimize monetary cost。

服务类型功能:指定本数据报的处理方式,TOS不是必须实现的。

区分服务编码点(DSCP):

bit0 --- bit5                                                           bit6-bit7

利用已使用的6比特和未使用的2比特,通过编码值来区分优先级。

DSCP 使用6个bit,DSCP的值得范围为0~63。

DSCP 是“IP 优先”和“服务类型”字段的组合。为了利用只支持“IP 优先”的旧路由器,会使用 DSCP 值,因为 DSCP 值与“IP 优先”字段兼容。

用通俗一点的语言解释,其实DSCP就是为了保证通信的QoS,在数据包IP头部的8个标识字节进行编码,来划分服务类别,区分服务的优先级。

每一个DSCP编码值都被映射到一个已定义的PHB(Per-Hop-Behavior)标识码。

通过键入DSCP值,电话、Windows客户和服务器等终端设备也可对流量进行标识。如果有兴趣,可以用Wireshark软件抓包看看数据。

总长度(total lenght):占16位,指首部和数据的总长度,单位以字节为单位,数据报最大长度为65535字节。


标识字段(identification):占16位,让目的主机确定一个新到达的分断属于哪一个数据报,源站每发送一个分组,标识值+1。

标志字段(flags):

第一位不使用,第二位为DF(Don't Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位为MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。

分段偏移(Fragmentation offset):占13位,表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。以8字节为单位。

MTU,最大传输单元,当一个数据报较大,无法用一帧数据传输时(以太网一帧数据通常为64-1518字节),IP模块要把它分成较小的片,并为各个分片构造一个单独的IP数据报。

当同一个数据报的各个分片到达目的主机后,IP模块要将其重组,然后才能向上层交付。

生存时间(TTL):占8位,描述在一个数据包在计算机和网络设备间传送的时候, 在它可以被丢弃之前, 可以经历的设备的数目的一个极限值。TTL是由数据包的发送者设置的,在前往目的地的过程中,每经过一台主机或设备, 这个值就要减少一点.(通常为1)。如果在数据包到达目的地前,TTL值被减到了0,那么这个包将作为一个ICMP错误的数据包被丢弃。

TTL可以防止无法到达目的地的数据包在网络中无限制地传递, 形成"不死包"。主要用来限制数据报在网络中的存活时间。

在路由器收到数据报时,TTL值为t1,处理时延为t2(通常为1),计算t=t1-t2,如果t<0,丢弃数据报,否则将t置为新的TTL值,并转发数据报。


协议(protocol):占8位,指出此数据报携带的数据使用何种协议,以便目的主机的IP层知道将数据部分上交给哪个处理过程。

1:ICMP  2:IGMP      6:TCP     17:UDP    88:IGRP    89:OSPF

首部校验和:占16位,只校验数据报首部,数据部分不校验。

源地址:源主机的IP地址。

目的地址:目的主机的IP地址。

可选项(Options):这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容:
    松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。
    严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。
    路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
    时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。

关于可选项部分详解,请关注http://bbs.alifpga.com/

数据部分:IP报文数据。IP数据包报的数据部分通常情况下是传输层数据报(TCP或UDP)。

首部校验和的计算:IP首部校验和算法同之前讲过的ICMP校验和算法是一样的。这里不再赘述。


版权所有权归卿萃科技,转载请注明出处

作者:卿萃科技ALIFPGA

原文地址:卿萃科技FPGA极客空间 微信公众号


扫描二维码关注卿萃科技FPGA极客空间


Internet上的网络层的更多相关文章

  1. 浅析Internet上使用的安全协议

    Internet上使用的安全协议 网络安全是分层实现的,从应用层安全到数据链路层安全. 一.运输层安全协议:安全套接字SSL 1.1.简介 SSL 是安全套接层 (Secure Socket Laye ...

  2. vc:如何从Internet上有效而稳定地下载文件

    http://www.vckbase.com/index.php/wv/172 如何从Internet上有效而稳定地下载文件 ,这是很多网络应用程序要考虑的重要问题,本文提供的代码段针对这个问题进行了 ...

  3. 在公网(internet)上建立website时不能用http访问

    我们在internet的IDC提供的虚拟机上建了新的web site, 域名也从阿里巴巴那里得到二级域名,也经过映射到了虚机的IP, 在本机都可以用域名以Http方式访问,但在internet上的其它 ...

  4. Internet上的WWW服务与HTTP协议(非常非常不错的文档,推荐订阅)

    Internet上的WWW服务与HTTP协议 兼容性----H1TP/1.1与HTTP/1.0后向兼容;运行1.1版本的web服务器可以与运行1.0版本的浏览器“对话”,运行1.1版本的浏览器也可以与 ...

  5. 如今在 Internet 上流传的“真正”的程序员据说是这样的

    如今在 Internet 上流传的“真正”的程序员据说是这样的: (1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让 领导提心吊胆. (2) 真正的程序员不写使用说明书, ...

  6. 第4章 TCP/IP通信案例:访问Internet上的Web服务器

    第4章 TCP/IP通信案例:访问Internet上的Web服务器 4.2 部署代理服务器 书中为了演示访问Internet上的Web服务器的全过程,使用了squid代理服务器程序模拟了一个代理服务器 ...

  7. 使用SAP云平台的destination消费Internet上的OData service

    通过SAP云平台上的destination我们可以消费Internet上的OData service或者其他通过HTTP方式暴露出来的服务. 创建一个新的destination: 维护如下属性: 点击 ...

  8. 反向代理:是指以代理server来接收Internet上的请求,然后将请求转发到内部网络的server上,并将结果返回给Internet上连接的client,此时的代理server对外就表现为反向代理server。

       Nginx安装好之后.開始使用它来简单实现反向代理与负载均衡的功能.在这之前.首先得脑补一下什么是反向代理和负载均衡.   反向代理:是指以代理server来接收Internet上的请求,然后将 ...

  9. 我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性。

    早上使用.Net WebClient类采集亚马逊数据,返回http 400 Bad Request错误,内容里面有“我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 ...

随机推荐

  1. hibernate配置文件的详解

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE hibernate-configurati ...

  2. Java中的日期和时间

    Java中的日期和时间 Java在java.util包中提供了Date类,这个类封装了当前的日期和时间. Date类支持两种构造函数.第一个构造函数初始化对象的当前日期和时间. Date() 下面的构 ...

  3. JavaWeb -- Struts2 构建视图:标签和结果, UI组件标签

    1. 示例 action 注入数据 和 处理action /** * OgnlAction */ public class UiAction extends ActionSupport { priva ...

  4. JavaWeb -- Struts 自定义拦截器, 登录权限拦截

    1. 自定义拦截器, 登录权限拦截 login.jsp 登录JSP <%@ page language="java" contentType="text/html; ...

  5. 在OpenStack里怎样配置Neutron,让虚拟机访问外网

    http://blog.csdn.net/zhangli_perdue/article/details/50264681 OpenStack里虚机(或者叫instance)只有在分配floating ...

  6. datetimepicker

    <!DOCTYPE html> <html> <head> <title></title> <link href="./bo ...

  7. smarty语法

    HTML中直接显示数据 <{$data}> foreach循环 <{foreach from=$data item=item key=key}> <li data-ind ...

  8. 如何在修改bug时切换分支保留修改又不提交

    使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 co ...

  9. 支付宝VIE的罪与罚

    http://tech.ifeng.com/special/tusimple/alibaba/#_www_dt2   雅虎的杨致远.软银的孙正义,都曾是马云阿里巴巴创业路上的贵人,也都曾是相互信任的朋 ...

  10. css中实现显示和隐藏(转)

    CSS中的display和visibility      在平时的开发过程中,总是会遇到一些文字在特定的场景下显示或者隐藏来达到我们想要的效果,css中display和visibility语法,他们都 ...