关于七层模型和四层模型可以参考这个:http://www.cnblogs.com/xcywt/p/5027277.html

因为四层模型用的比较多,这里只拿四层模型来分析。

1、四层模型中的最下层是链路层,传输的是以太网数据帧。主要有三种格式的以太网数据帧。这里暂时不做详细分析

2、IP数据报格式

1)版本:IP协议版本号,IPv4版本这个值为4。IPv6这个值为6

2)头长度:表示头部的长度,单位是4字节。比如这个数为5,表示IP头部长度为20个字节。所以我们也可以知道IP长度最大为4x15 = 60个字节。

3)服务类型(TOS):包含3位优先权(现已忽略)、4位的服务类型子字段、1位保留位(必须位0)。

4)总长度:16位。以字节位单位,包含头部和数据部分总长度。最大可为65535个字节

5)封包标识:用来标识一个IP包,每发送一个此值会加1。

6)标志与片偏移:

标志:3位的标志第一位不使用。第二位DF(Do not Fragment)为1表示不分片。若超过最大传输单元则会被丢弃,并发送一个ICMP差错报文。第三为MF(More Fragment)为1表示后面还有包。最后一片的MF为0.

片偏移:IP分片后每一个分组都有自己的首部。但是片偏移不同.,通过片偏移接收端可以重新组装IP包。

7)存活时间(TTL):Time to live。 表示数据报最多可经过的路由器的数量。数据报每经过一个路由器TTL会减一,直到为0就会被丢弃,并发送ICMP报文通知源主机。这样可以防止数据包一直在网络中传输下去。

8)协议:表示IP层承载的是哪个高级协议。在封装与分用过程中,协议栈知道该交由哪个层的协议处理。下面是对应值:

1-ICMP,2-IIGMP,6-TCP,7-UDP

9)校验和:保证数据头部的完整性,但是不校验数据部分。校验方法是网际校验和

因为上层的协议都有自己的校验和,这里不需要重复校验
还有就是每经过一个路由器头部都会发生变化,但是数据部分不变。
只校验头部比较省时间。

10)源IP地址:发送数据的主机IP地址
11)目的IP地址:接受数据的IP地址
12)选项与填充(选项为4字节整数倍,不足则用0填充):
内容有:
a:安全和处理限制
b:路径记录:记录所经历路由器的IP地址和时间
c:宽松源站路由:指数据报文必须经历的IP地址,可以经过没有指定的IP地址
d:严格的源站路由:指定数据报文必须经过的IP地址,不能经过没有指定的IP地址

3、封装与分用

假设主机A发送数据给主机B,一般流程是这样:A应用层数据-》A的传输层-》A的网络层-》A的链路层 -》 网络上找到B,并发送给B的链路层 -》 B的网络层 -》 B的传输层 -》 B的应用层。就是下面这幅图:

封装(Encapsulation):从上到下。将数据打上一定的头部。

应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,直到最后到物理层数据转换成比特流,送入网络。在这个过程中,每一层都会对要发送的数据加一些首部信息。

分用(解封(Demultiplexing)):从下到上,将数据头部进行拆开

从下网上时再逐一将对应层的头部去掉,一层一层剥离。直到应用层。

分用就是刚好反过来。

还有一些更好的图可以参考:

https://www.cnblogs.com/starof/p/6367020.html

https://www.cnblogs.com/qishui/p/5437301.html

IP协议和网络传输中的封装与分用。的更多相关文章

  1. 计算机网络通信TCP/IP协议浅析 网络发展简介(二)

    本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket   分层的 ...

  2. [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    [转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...

  3. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  4. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)

    MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...

  5. Android网络传输中必用的两个加密算法:MD5 和 RSA

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  6. Android网络编程系列 一 TCP/IP协议族之传输层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...

  7. TCP/IP协议:最大传输单元MTU 和 最大分节大小MSS

    MTU = MSS + TCP Header + IP Header. mtu是网络传输最大报文包. mss是网络传输数据最大值. MTU:maximum transmission unit,最大传输 ...

  8. 读书笔记——网络编程与开发技术(3)基于TCP/IP协议的网络编程相关知识

    TCP/IP协议:数据链路层,网络层,传输层,应用层. IP地址分为5类:A类.B类.C类.D类.E类. (A类.B类.C类是基本类,D类多用于多播传送,E类为保留类.) "*"表 ...

  9. 网络传输中的各种加密算法+SSL+CA证书详解

    1. 数据传输分类 在互联网上数据传输有两种:明文传输和加密传输.明文传输的协议有:ftp.http.smtp.telnet.但是为了数据的完整性和安全性,所以后来引用了加密等相关手段来保证数据的安全 ...

随机推荐

  1. C++获取基类指针所指子类对象的类名

    我们在程序中定义了一个基类,该基类有n个子类,为了方便,我们经常定义一个基类的指针数组,数组中的每一项指向都指向一个子类,那么在程序中我们如何判断这些基类指针是指向哪个子类呢? 关键字 typeid, ...

  2. Icon font font face

    font-face自定义字体,iconfont就是把各种图片做成字体.iconfont优势: 字体文件小,一般20-50kb: 容易编辑和维护,尺寸和颜色可以用css来控制: 透明完全兼容IE6:   ...

  3. python视频教程全集

    由于Python语言的简洁.易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经用它来教授程序设计课程.如果你想找python视频教程全集,来这就对了!这是链接: py ...

  4. .Net中各种不同的对象创建方式的速度差异

    在.Net中,微软给我们提供了很多不同的创建对象实例的方法,它们的速度又各有不同,以下一一列举. 使用new关键字 这在.Net中是最常见,也是速度最快的方式:                     ...

  5. asp.net web api 文件上传

    1正确的做法 public class AvaterController : BaseApiController { [HttpPost] public async Task<IHttpActi ...

  6. 【Win 10 应用开发】UI Composition 札记(六):动画

    动画在 XAML 中也有,而且基本上与 WPF 中的用法一样.不过,在 UWP 中,动画还有一种表现方式—— 通过 UI Composition 来创建. 基于 UI Composition 的动画, ...

  7. Oracle单行函数基础运用

    单行函数 整个SQL的精髓:select语句+单行函数(背) 字符串函数 常用的处理字符串的函数有如下: No. 函数名 含义 1 UPPER(c1)  upper 将字符串全部转为大写 2 LOWE ...

  8. C#中四步轻松使用log4net记录本地日志

    在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从 ...

  9. h5 canvas 图片上传操作

    最近写的小 demo,使用的是h5的 canvas来对图片进行放大,移动,剪裁等等这是最原始的代码,比较接近我的思路,后续会再对格式和结构进行优化 html: <pre name="c ...

  10. jq获取浏览器的高度

    // console.log("2-"+$(window).height()); //浏览器当前窗口可视区域高度 // console.log("3-"+$(d ...