zoukankan      html  css  js  c++  java
  • TCP/IP协议

    TCP/IP协议 

    原文地址: http://www.360doc.com/content/06/1212/21/15870_291722.shtml# 

    TCP/IP协议简介 

    因特网上使用的通信协议——TCP/IP协议与OSI相比,简化了高层的协议,简化了会话层和表示层,将其融合到了应用层,使得通信的层次减少,提高了通信的效率。

    下图示意了TCP/IP 与 ISO OSI 参考模型之间的对应关系。


     

    因特网协议集

     

    因特网的协议集称为TCP/IP协议集,协议集的取名表示了TCP和IP协议在整个协议集中的重要性。因特网协议集是对ISO/OSI的简化,其主要功能集中在OSI的第3-4层,通过增加软件模块来保证和已有系统的最大兼容性。

      

    TCP/IP协议集的分层实施

     

     

    基于因特网的信息流示意图

     

    IP协议是TCP/IP协议使用的传输机制,它是一种不可靠的无连接数据报协议--尽最大努力服务。尽最大努力的意思是IP不提供差错检测或跟踪。IP假定了底层是不可靠的,因此尽最大努力传输到目的地,但没有保证。 

    当可靠性很重要时,IP必须与一个可靠的协议(如TCP)配合起来使用。 

        IP协议用来封装TCP和UDP消息段(UDP 是User Datagram Protocol的简称, 中文名是:用户数据报协议)。IP为网络硬件提供了一个逻辑地址。这一逻辑地址是一个32位的地址,即IP地址,可以用来将由路由器连接在一起的各个物理网络区分开。IP协议所提供的逻辑IP地址还表示了数据发往的目的网络及在那一网络上的主机地址。这样它就可以用于将数据单元(称为“数据报”)引向正确的目的地。 

        IP协议是一个无连接的协议,它无需为发送数据报建立虚电路。

     

    IP协议提供的服务

     

    IP协议是因特网中的基础协议,由IP协议控制传输的协议单元称为IP数据报。IP协议屏蔽下层各种物理网络的差异,向上层(主要是TCP层或UDP层)提供统一的IP数据报。

       IP协议提供不可靠的、 无连接的、尽力的数据报投递服务。   

    (1)不可靠的投递服务

        IP协议无法保证数据报投递的结果。在传输过程中,IP数据报可能会丢失、重复传输、延迟、乱序,IP服务本身不关心这些结果,也不将结果通知收发双方。

     (2)无连接的投递服务

        每一个IP数据报是独立处理和传输的,由一台主机发出的数据报,在网络中可能会经过不同的路径,到达接收方的顺序可能会乱,甚至其中一部分数据还会在传输过程中丢失。 

    (3)尽力的投递服务

    IP协议软件决不简单地丢弃数据报,只要有一线希望,就尽力向前投递。 IP协议软件执行数据报的分段,以适应具体的网络传输,数据报的合段则由最终结点的IP模块完成。

     

    IPV4协议

      目前因特网上广泛使用的IP协议为IPv4,IPv4协议的设计目标是提供无连接的数据报尽力投递服务。

    在一个物理网络上传送的单元是一个包含首部和数据的帧,首部给出了诸如(物理)原网点和目的网点的地址。互联网则把它的基本传输单元叫做一个Internet数据报(datagram),有时称为IP数据报或仅称为数据报。像一个典型的物理网络帧一样,数据报被分为首部和数据区。而且,数据报首部也包含了原地址和目的地址以及一个表示数据报内容的类型字段。数据报与物理网络帧的区别在于:数据报首部包含的是IP地址,而帧的首部包含的是物理地址。下图显示了一个数据报的一般格式。

    数据报首部

    数据报的数据区

     

    IP数据报的一般格式。IP规定数据报首部格式,包括源和目的IP地址。

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

    下图显示了在一个数据报中各字段的安排。

     

    IP数据报的封装

     

      一个网络帧携带一个数据报的这种运输方式叫作封装(Encapsulation)。对底层网络来说,数据报与其他任何要发送的报文是一样的。硬件并不识别数据报的格式,也不了解目的网点的IP地址。因此,当一台机器把一个IP数据报发送到另一台机器时,整个数据报在网络帧的数据部分中运输。

      IP协议屏蔽下层各种物理网络的差异,向上层(主要是TCP层或UDP层)提供统一的IP数据报。相反,上层的数据经IP协议形成IP数据报。IP数据报的投递利用了物理网络的传输能力,网络接口模块负责将IP数据报封装到具体网络的帧(LAN)或者分组(X25网络)中的信息字段。如下图所示,将IP数据报封装到以太网的MAC数据帧。

     

     IP数据报封装在一个帧中,物理网络把包括首部的整个数据报都看作数据传输

     

    IP数据报的寿命

      寿命TTL(Time To Live,又称生存时间)指明了该数据报在互联网中允许存在的时间,以秒为单位。只要一台机器向网上输入一个数据报,就为它设置一个最大生存时间。当数据报通过的主机和路由器对该数据报进行处理时,要递减其寿命字段的值。若此值为0,就将该数据报从网络上删除。只要一个TTL为0,路由器就丢弃该数据报,并向源网点发送一个出错信息。为数据报设置定时器的思想,保证了即使路由表不可靠而选择了一个循环路由,数据报都不会在网络中无休止的流动下去。

     

    IP路由

      IP数据报的传输可能需要跨越多个子网,子网之间的数据报传输由路由器实现。IP路由算法描述如下:

      IP模块根据IP数据报中的收方IP地址确定是否为本网投递;

      1)本网投递:(收发方的IP地址具有相同的IP网络标识Netid

        a)利用ARP协议,取得对应IP地址的物理地址;

        b)将IP数据报进行分段和封装;

    c)将封装后的数据帧(或分组)发往目的地;结束IP路由算法。 

      2)跨网投递:(收发方的IP地址具有不同的IP网络标识Netid

        a)利用ARP协议,获得路由器的对应端口的物理地址;

        b)将IP数据报进行分段和封装;

        c)将数据帧(或分组)发往路由器;

        d)路由器软件取出IP数据报,重复IP路由算法,将IP数据报向前传递。 

      3)提高IP路由处理效率的方法:

    为了提高处理的效率,执行ARP的主机动态维护IP地址/物理地址的映射表,传输IP数据报之前,查找该映射表。如果表中无对应项,发送ARP报文,取得物理地址,并将IP地址/物理地址的映射关系记入该映射表;如果表中有对应项,直接取得物理地址。由于通信双方传输的信息往往包括多个IP数据报,这种动态缓存的方法可以大大提高ARP的执行效率,并减少为获得物理地址而需的网络流量。

    ARP: Address resolution protocol 中文:地址解析协议

     

     

    TCP协议

    TCP/IP协议簇指明了两个运输层协议:UDP和TCP。TCP在应用层和IP层之间,是应用程序和网络操作的中介物。运输层协议具有几种责任,一种责任就是创建进程到进程(程序到程序)的通信,TCP是用端口号来完成这种通信。另一种责任就是在运输层提供流量控制和差错控制机制,TCP是用滑动窗口协议完成流量控制,它使用确认分组、超时和重传来完成差错控制。

    运输层还应负责为应用程序提供连接机制,这些应用程序应当能够向运输层发送数据流。在发送端运输层的责任应当是和接收端之间建立连接,将数据流分割成为可运输的单元,将他们编号,然后逐个发送他们。运输层在接收端的责任是等待属于同一个进程的所有不同单元的到达,检查并传递那些没有差错的单元,并将他们作为一个流交付给接收进程。当整个流发送完毕后,运输层应当关闭这个连接,TCP完成所有上述的任务。 

    TCP叫做面向连接的、可靠的运输协议,它给IP服务添加了面向连结和可靠性的特点。

     

    TCP协议的特性

    TCP协议在IP协议软件提供的服务的基础上,支持面向连接的、可靠的、面向流的投递服务。

     

    注:滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。 

     

    TCP端口、连接与端点

        TCP允许一台机器上的多个应用程序同时进行通信,它能对接收到的数据针对多个应用程序进行去复用操作。TCP是用了端口号来标识一台机器上的多个目的进程。每个端口都被赋予一个小的整数以便识别。

        TCP端口与一个16位的整数值相对应,该整数值也被称为TCP端口号。需要服务的应用进程与某个端口号进行联接(Binding),这样TCP模块就可以通过该TCP端口与应用进程通信。 

      由于IP地址只对应到因特网中的某台主机,而TCP端口号可对应到主机上的某个应用进程。TCP使用连接而不是协议端口作为基本的抽象概念,连接使用一对端点来标识。 

      TCP把端点定义为一对整数,即(host,port),其中host是主机的地址,port则是该主机上的TCP端口号。例如,端点(202.114.206.234,80)表示的是IP地址为202.114.206.234的主机上的80号TCP端口。由于TCP使用两个端点来识别连接,所以一个机器上的某个TCP端口号可以被多个连接所共享。

     

     

     

    TCP/UDP应用程序端口号分配

      端口号的取值可由用户定义或者系统分配。TCP端口号采用了动态和静态相结合的分配方法,对于一些常用的应用服务(尤其是TCP/IP协议集提供的应用服务),使用固定的端口号;例如:电子邮件(SMTP)的端口号为25,文件传输(FTP)的端口号为21,WEB服务的端口号为80,远程登录服务(TELNET)的端口号是23等。

      对于其它的应用服务,尤其是用户自行开发的应用服务,端口号采用动态分配方法,由用户指定操作系统分配。 

      TCP/IP约定:0—1023为保留端口号,标准应用服务使用;1024以上是自由端口号,用户应用服务使用。

     

      

    TCP协议的窗口机制

      TCP的特点之一是提供体积可变的滑动窗口机制,支持端到端的流量控制。TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。处理过程如下:

    (1)TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;

    (2)发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;

    (3)发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。

      TCP的窗口机制和确认保证了数据传输的可靠性和流量控制。

    TCP的滑动窗口的要点如下:

        1)源站不一定要发送出整个窗口大小的数据;

        2)窗口大小可由目的站将其增大或减小;

        3)目的站可在任何时候发送确认。 

    滑动窗口图示:

     

     上图表示滑动窗口大小为10,在收到目的站的任何确认之前,源站可以发送一直到10个字节。但是,源站若收到对前3个字节的确认,它就将窗口向右滑动3个字节。

     

    TCP数据的封装

        要将来自应用程序的报文发送到另一端,TCP协议要将报文进行封装和拆装。如下图示:

     

     

    UDP协议

        UDP,即用户数据报协议(User Datagram Protocol)。作为运输层协议,UDP使用端口号来完成进程到进程之间的通信,UDP在运输层提供非常有限的流控制机制,在收到分组时没有流控制也没有确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收到的分组有一个差错,它就悄悄的丢弃这个分组。UDP不负责为进程提供连接机制,它只从进程接收数据单元,并将他们不可靠的交付给接收端。数据单元必须足够小,能够装进到一个UDP分组中。

        所以,UDP提供的是无连接的、不可靠的运输服务。 

    UDP的适用范围:

        1)UDP适用于需要简单的请求-响应通信,而较少考虑流控制和差错控制的进程;

        2)UDP适用于具有内部流控制和差错控制机制的进程。例如,简单文件传送协议(TFTP)的进程就包括流控制和差错控制,它能够很容易的使用UDP;

        3)对多播和广播来说,UDP是个合适的运输协议。多播和广播能力已经嵌入在UDP软件中,但没有嵌入到TCP软件中;

        4)UDP可用于进程管理,如SMTP;

        5)UDP可用于某些路由选择更新协议,如路由选择信息协议RIP。 

        使用UDP协议的好处:在少量数据的传输时,使用UDP协议传输信息流,可以减少TCP连接的过程,提高工作效率。

        UDP协议的不足:当使用UDP协议传输信息流时,用户应用程序必须负责解决数据报排序,差错确认等问题。

    在多媒体应用中,常用TCP支持数据传输,UDP支持音频/视频传输。

     

    UDP熟知端口及插口地址 

    1UDP熟知端口号 

    协议端口号指定的两种方式:

        方式一:使用集中式管理机构。这个机构负责指派协议端口并发布这些指派。所有的软件在设计时都要遵从这些指派的规定。这种方式又称为统一指派(UNIVERSAL ASSIGNMENT),这些被管理机构指定的端口指派也叫知名端口(WELL-KNOWN PORT)的指派。

        方式二:使用动态绑定(DYNAMIC BINDING)。当一个应用程序需要使用端口时,网络软件就指定一个端口。为了知道另一台机器上的当前端口号,就必须送出一个请求报文,然后目的主机进行回答,把正确的端口号送回来。

      TCP/IP采用一种混合方式对端口地址进行管理,对某些常用服务的端口进行指派,但为本地站点和应用程序留下了很大的端口取值范围。

     2、插口地址 

      UDP需要两个标识符,IP地址和端口号。一个IP地址与一个端口号合起来就叫做插口地址(SOCKER ADDRESS)。客户插口地址唯一地定义了客户进程,而服务器插口地址唯一地定义了服务器进程(见下图)。

     

    要使用UPD的服务,需要一对插口地址:客户端插口地址和服务器端插口地址。

     

    UDP数据的封装与拆装

        要从进程将报文发送到另一个进程,UDP协议就要将报文进行封装和拆装,如下图:

     

       封装:当进程有报文要通过UDP发送时,它就将此报文连同一对插口地址以及数据的长度传递给UDP。UDP收到数据后就加上UDP首部。然后UDP就将这用户数据报连同插口地址一起传递给IP。IP加上自己的首部,在协议字段使用值17,指出这数据是从UDP协议来的。这个IP数据报再传递给数据链路层。数据链路层收到IP数据报后,加上自己的首部(可能还有尾部),再传递给物理层。物理层将这些比特编码为电信号或光信号将其发送到远程的机器上。 

      拆装:当这个报文到达目的地时,物理层对信号解码,将其变为比特,传递给数据链路层。数据链路层使用其首部(和尾部)检查数据。若无差错,则剥去首部和尾部,并将数据报传递给IP,IP软件进行它的检查。若无差错,就剥去首部,将用户数据报连同发送端和接收端的IP地址一起传递给UDP,UDP使用检验和对整个用户数据报进行检查。若无差错,则剥去首部,将应用数据连同发送端的插口地址一起传递给接收进程。在需要回答收到的报文时,就应将发送端的插口地址传递给进程。

     

    TCP/IP协议存在的问题

        近年来,随着INTERNET的不断发展和网络多媒体技术的广泛应用,如电视会议系统、网络电话、视频点播系统以及虚拟现实技术等,采用TCP/IP协议的Internet/Intranet网络系统存在如下主要问题:

        1)通信线路拥挤:主要由Internet的高速发展所引起的,网络用户急剧增加;另外,网上业务的多元化,如多媒体应用和电子商务等,对网络带宽提出了更高的要求。 

        2)数据到达时间的抖动:在多媒体应用中,所传数据一到达接收端,就立刻进行“再生”处理。当检测到数据丢失和错误时,要求重新发送,引起发送端和接收端的时间间隔不同步。如果数据到达接收端的时间抖动得非常严重,将对电视和视频点播等适时多媒体应用产生不利的影响。 

        为了解决上述问题,在TCP/IP上开发了支持多媒体通信的RTP/RSVP协议:RTP(Real Time Transport Protocol,实时传输协议 )是支持适时多媒体通信而设计的传输协议。RTP由两种协议组成:数据传输协议(FTP)和实时控制协议(RTCP)。FTP负责多媒体收据的传输,RTCP管理控制信息。

     

  • 相关阅读:
    jQuery插件之jquery editable plugin点击编辑文字插件
    firefox与ie的javascript兼容性编程汇编【转载】
    css前端制作 经验总结
    非常棒的jqChart图表插件
    WPF Image Source设置文件路径后 在编辑状态下显示图片,运行时不显示
    WPF RadioButton 绑定枚举
    WPF MVVM实现数据增删改查逻辑全流程详细解析demo
    bigNumber.js的简单使用
    PHP程序的“Missing argument 3”的错误提示解决方法
    PHP判断0和空的方法
  • 原文地址:https://www.cnblogs.com/gsk99/p/4920699.html
Copyright © 2011-2022 走看看