1、分层

网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如 T C P / I P,是一组不同层次上的多个协议的组合。 T C P / I P通常被认为是一个四层协议系统,其示意图如下:

(图1)TCP/IP协议族的四个层次

每一层负责不同的功能:

1) 链路层:

有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

2)网络层:

有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在T C P /I P协议族中,网络层协议包括I P协议(网际协议),I C M P协议(I n t e rn e t互联网控制报文协议) ,以及I G M P协议(I n t e r n e t组管理协议)。

3)运输层:

主要为两台主机上的应用程序提供端到端的通信。在 T C P / I P协议族中,有两个互不相同的传输协议:T C P(传输控制协议)和U D P(用户数据报协议)。T C P为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。

而另一方面,U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。 任何必需的可靠性必须由应用层来提供。

注:这两种运输层协议分别在不同的应用程序中有不同的用途。

4 ) 应用层:

负责处理特定的应用程序细节。几乎各种不同的 T C P / I P实现都会提供下面这些通用的应用程序:

• Telnet、FTP和e-mail等

• FTP 文件传输协议。

• SMTP 简单邮件传送协议。

• SNMP 简单网络管理协议。

• ...

2、TCP/IP的分层

 在T C P / I P协议族中,有很多种协议。

(图2)TCP/IP协议族中不同层次的协议

3、数据的封装

当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息) ,该过程如图3所示。T C P传给I P的数据单元称作 T C P报文段或简称为T C P段(T C P s e g m e n t) 。I P传给网络接口层的数据单元称作I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )。

以太网数据帧的物理特性是其长度必须在 4 6~1 5 0 0字节之间。分组既可以是一个I P数据报,也可以是I P数据报的一个片(f r a g m e n t) 。

(图3) 数据进入协议栈时的封装过程

U D P数据与T C P数据基本一致。唯一的不同是 U D P传给I P的信息单元称作 U D P数据报(UDP datagram) ,而且U D P的首部长为8字节。

由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为8 b i t的数值,称作协议域。1表示为I C M P协议,2表示为I G M P协议,6表示为T C P协议,1 7表示为U D P协议。

类似地,许多应用程序都可以使用 T C P或U D P来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。 T C P和U D P都用一个1 6 b i t的端口号来表示不同的应用程序。T C P和U D P把源端口号和目的端口号分别存入报文首部中。

网络接口分别要发送和接收I P、A R P和R A R P数据,因此也必须在以太网的帧首部中加入应用程序某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧类型域。

4、以太网数据帧的分用

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(D e m u l t i p l e x i n g),图4显示了该过程是如何发生的。

(图4) 以太网数据帧的分用过程

为协议I C M P和I G M P定位一直是一件很棘手的事情。在(图2)中,把它们与I P放在同一层上,那是因为事实上它们是I P的附属协议。但是在这里,我们又把它们放在I P层的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。

对于A R P和R A R P,在这里把它们放在以太网设备驱动程序的上方,这是因为它们和I P数据报一样,都有各自的以太网数据帧类型。但是有时又把A R P作为以太网设备驱动程序的一部分,放在I P层的下面,其原因在逻辑上是合理的。

对于解包T C P时,是通过目的端口号、源 I P地址和源端口号进行解包。

注:为方便大家,若需下载完整文档,请点击

http://files.cnblogs.com/tdyizhen1314/TCP-IP%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B9%8B%E6%A6%82%E8%BF%B0.zip

作者:tdyizhen1314

最新文章

  1. Tomcat 7.0的配置
  2. iOS 利用webView加载html代码,在代理中获取html页面的链接时出现的问题
  3. android中点击空白处隐藏软键盘
  4. fifo write
  5. Hadoop:Windows 7 32 Bit 编译与运行
  6. block iOS 块
  7. Java实现批量修改文件名称
  8. Base64编码的实现(三种方式)
  9. android开发之---文字居中---android中去掉标题栏
  10. Unity3D 之防止刚体碰撞导致旋转
  11. 关于ASP.NET中的负载均衡
  12. sql语句用'in'执行多条语句时候,执行错误的解决方法
  13. 利用TPC-H为MYSQL生成数据
  14. (一)ROS系统入门 Getting Started with ROS 以Kinetic为主更新 附课件PPT
  15. android:layout_alignleft layout_toleftof区别,详解RelativeLayout布局属性
  16. Unity 着色器基础知识
  17. 【C++】C++中的基本内置类型
  18. (一)flutter第一天
  19. kubernetes发布tomcat服务,通过deployment,service布署
  20. sqli-labs:11-16,post注入

热门文章

  1. jQuery农历黄历日期表
  2. 20145240 GDB调试汇编堆栈过程分析
  3. menubar下面的选项不可以输入中文
  4. iOS 或者Android调用vue.js 里面的方法
  5. pexpect实现远程操作
  6. Caffe python利用classify.py实现对单通道(灰度图)的数据进行分类
  7. LeetCode——Find the Difference
  8. 关于C/C++中main函数参数的学习
  9. CentOS 5 上使用yum同时安装32位和64位包的解决方法
  10. JavaWeb -- Struts2,对比, 简单表单提交,校验,防重复提交, 文件上传