精华内容
下载资源
问答
  • OSI网络七层协议 TCP/IP五层协议

    千次阅读 2012-10-20 01:07:24
    TCP/IP的通讯协议 TCP/IP协议组之所以流行,部分...确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议协议组。

    TCP/IP的通讯协议

    TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。

    TCP/IP协议的开发研制人员将Internet分为五个层次,以便于理解,它也称为互联网分层模型或互联网分层参考模型,如下表:

    应用层(第五层)
    传输层(第四层)
    互联网层(第三层)
    网络接口层(第二层)
    物理层(第一层)

    物理层:对应于网络的基本硬件,这也是Internet物理构成,即我们可以看得见的硬设备,如PC机、互连网服务器、网络设备等,必须对这些硬设备的电气特性作一个规范,使这些设备都能够互相连接并兼容使用。

    网络接口层:它定义了将资料组成正确帧的规程和在网络中传输帧的规程,帧是指一串资料,它是资料在网络中传输的单位。

    互联网层:本层定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标的"信息包"转发机制。


    传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。

    应用层:它定义了应用程序使用互联网的规程。


    第一层 物理层
          第一层对应于基本网络硬件,如同ISO七层参考模型一样。
    第二层:网络接口层
          第二层协议规定了怎样把数据组织成帧及计算机怎样在网络中传输帧,类似于ISO七层参考模型的第二层。
    第三层:互联网层
          第三层协议规定了互联网中传输的包格式及从一台计算机通过一个或多个路由器到最终目标的包转发机制。
    第四层:传输层
          第四层协议,象ISO七层参考模型的第四层一样,规定了怎样确保可靠性传输。
    第五层:应用层
          第五层协议对应于ISO七层参考模型的第六层和第七层,第五层协议规定了应用程序怎样使用互联网。


    OSI是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。下面我简单的介绍一下这7层及其功能。
    OSI的7层从上到下分别是
    7 应用层
    6 表示层
    5 会话层
    4 传输层
    3 网络层
    2 数据链路层
    1 物理层


    其中高层,既7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流。下面我给大家介绍一下这7层的功能:
    (1)应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事 字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示 例:telnet,HTTP,FTP,WWW,NFS,SMTP等。
    (2)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASII格式传输。如果选择二进制,那么发送方和接收 方不改变文件的内容。如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算 机的字符集。示例:加密,ASII等。
    (3)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。
    (4)传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。
    (5)网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
    (6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的歌种介质有关。示例:ATM,FDDI等。
    (7)物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。

    OSI分层的优点:
    (1)人们可以很容易的讨论和学习协议的规范细节。
    (2)层间的标准接口方便了工程模块化。
    (3)创建了一个更好的互连环境。
    (4)降低了复杂度,使程序更容易修改,产品开发的速度更快。
    (5)每层利用紧邻的下层服务,更容易记住个层的功能。
    大多数的计算机网络都采用层次式结构,即将一个计算机网络分为若干层次,处在高层次的系统仅是利用较低层次的系统提供的接口和功能,不需了解低层 实现该功能所采用的算法和协议;较低层次也仅是使用从高层系统传送来的参数,这就是层次间的无关性。因为有了这种无关性,层次间的每个模块可以用一个新的 模块取代,只要新的模块与旧的模块具有相同的功能和接口,即使它们使用的算法和协议都不一样。

        网络中的计算机与终端间要想正确的传送信息和数据,必须在数据传输的顺序、数据的格式及内容等方面有一个约定或规则,这种约定或规则称做协议。网络协议主要有三个组成部分:
    1、语义
    是对协议元素的含义进行解释,不同类型的协议元素所规定的语义是不同的。例如需要发出何种控制信息、完成何种动作及得到的响应等。
    2、语法
    将若干个协议元素和数据组合在一起用来表达一个完整的内容所应遵循的格式,也就是对信息的数据结构做一种规定。例如用户数据与控制信息的结构与格式等。
    3、时序
    对事件实现顺序的详细说明。例如在双方进行通信时,发送点发出一个数据报文,如果目标点正确收到,则回答源点接收正确;若接收到错误的信息,则要求源点重发一次。

           70年代以来,国外一些主要计算机生产厂家先后推出了各自的网络体系结构,但它们都属于专用的。为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。国际标准化组织ISO 于1981年正式推荐了一个网络系统结构----七层参考模型,叫做开放系统互连模型(Open System Interconnection,OSI)。由于这个标准模型的建立,使得各种计算机网络向它靠拢, 大大推动了网络通信的发展。
         OSI 参考模型将整个网络通信的功能划分为七个层次。它们由低到高分别是物理层(PH)、链路层(DL)、网络层(N)、传输层(T)、会议层(S)、 表示层(P)、应用层(A)。每层完成一定的功能,每层都直接为其上层提供服务,并且所有层次都互相支持。第四层到第七层主要负责互操作性,而一层到三层 则用于创造两个网络设备间的物理连接.

    1.物理层
    物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
    1.1媒体和互连设备
    物理层的媒体包括架空明线、平衡电缆、光纤、无线信道等。通信用的互连设备指DTE和DCE间的互连设备。DTE既数据终端设备,又称物理设备, 如计算机、终端等都包括在内。而DCE则是数据通信设备或电路连接设备,如调制解调器等。数据传输通常是经过DTE——DCE,再经过DCE——DTE的 路径。互连设备指将DTE、DCE连接起来的装置,如各种插头、插座。LAN中的各种粗、细同轴电缆、T型接、插头,接收器,发送器,中继器等都属物理层 的媒体和连接器。
    1.2物理层的主要功能
    1.2.1为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成.一次完整的数据传输,包括激活物理连接,传送数据,终止物理连接.所谓激活,就是不管有多少物理媒体参与,都要在通信的两个数据终端设备间连接起来,形成一条通路.
    1.2.2传输数据.物理层要形成适合数据传输需要的实体,为数据传送服务.一是要保证数据能在其上正确通过,二是要提供足够的带宽(带宽是指每 秒钟内能通过的比特(BIT)数),以减少信道上的拥塞.传输数据的方式能满足点到点,一点到多点,串行或并行,半双工或全双工,同步或异步传输的需要.
    1.3物理层的一些重要标准
    物理层的一些标准和协议早在OSI/TC97/C16 分技术委员会成立之前就已制定并在应用了,OSI也制定了一些标准并采用了一些已有的成果.下面将一些重要的标准列出,以便读者查阅.ISO2110:称 为"数据通信----25芯DTE/DCE接口连接器和插针分配".它与EIA(美国电子工
    业协会)的"RS-232-C"基本兼容。ISO2593:称为"数据通信----34芯DTE/DCE----接口连接器和插针分配"。 ISO4092:称为"数据通信----37芯DTE/DEC----接口连接器和插针分配".与EIARS-449兼容。CCITT V.24:称为"数据终端设备(DTE)和数据电路终接设备之间的接口电路定义表".其功能与EIARS-232-C及RS-449兼容于100序列线 上.

    2.数据链路层
    数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及其连接.媒体是长期的,连接是有生存期的.在连接生存期内,收 发两端可以进行不等的一次或多次数据通信.每次通信都要经过建立通信联络和拆除通信联络两过程.这种建立起来的数据收发关系就叫作数据链路.而在物理媒体 上传输的数据难免受到各种不可靠因素的影响而产生差错,为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错.数据链路的建 立,拆除,对数据的检错,纠错是数据链路层的基本任务。
    2.1链路层的主要功能
    链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。链路层应具备如下功能:
    2.1.1链路连接的建立,拆除,分离。
    2.1.2帧定界和帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界。
    2.1.3顺序控制,指对帧的收发顺序的控制。
    2.1.4差错检测和恢复。还有链路标识,流量控制等等.差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测.各种错误的恢复则常靠反馈重发技术来完成。
    2.2数据链路层的主要协议
    数据链路层协议是为发对等实体间保持一致而制定的,也为了顺利完成对网络层的服务。主要协议如下:
    2.2.1ISO1745--1975:"数据通信系统的基本型控制规程".这是一种面向字符的标准,利用10个控制字符完成链路的建立,拆除及 数据交换.对帧的收发情况及差错恢复也是靠这些字符来完成.ISO1155, ISO1177, ISO2626, ISO2629等标准的配合使用可形成多种链路控制和数据传输方式.
    2.2.2ISO3309--1984:称为"HDLC 帧结构".ISO4335--1984:称为"HDLC 规程要素 ".ISO7809--1984:称为"HDLC 规程类型汇编".这3个标准都是为面向比特的数据传输控制而制定的.有人习惯上把这3个标准组合称为高级链路控制规程.
    2.2.3ISO7776:称为"DTE数据链路层规程".与CCITT X.25LAB"平衡型链路访问规程"相兼容.
    2.3链路层产品
    独立的链路产品中最常见的当属网卡,网桥也是链路产品。MODEM的某些功能有人认为属于链路层,对些还有争议.数据链路层将本质上不可靠的传输 媒体变成可靠的传输通路提供给网络层。在IEEE802.3情况下,数据链路层分成了两个子层,一个是逻辑链路控制,另一个是媒体访问控制。下图所示为 IEEE802.3LAN体系结构。
    AUI=连接单元接口 PMA=物理媒体连接
    MAU=媒体连接单元 PLS=物理信令
    MDI=媒体相关接口

    3.网络层
    网络层的产生也是网络发展的结果.在联机系统和线路交换的环境中,网络层的功能没有太大意义.当数据终端增多时.它们之间有中继设备相连.此时会 出现一台终端要求不只是与唯一的一台而是能和多台终端通信的情况,这就是产生了把任意两台数据终端设备的数据链接起来的问题,也就是路由或者叫寻径.另 外,当一条物理信道建立之后,被一对用户使用,往往有许多空闲时间被浪费掉.人们自然会希望让多对用户共用一条链路,为解决这一问题就出现了逻辑信道技术 和虚拟电路技术.
    3.1网络层主要功能
    网络层为建立网络连接和为上层提供服务,应具备以下主要功能:
    3.1.1路由选择和中继.
    3.1.2激活,终止网络连接.
    3.1.3在一条数据链路上复用多条网络连接,多采取分时复用技术 .
    3.1.4差错检测与恢复.
    3.1.5排序,流量控制.
    3.1.6服务选择.
    3.1.7网络管理.
    3.2网络层标准简介
    网络层的一些主要标准如下:
    3.2.1 ISO.DIS8208:称为"DTE用的X.25分组级协议"
    3.2.2 ISO.DIS8348:称为"CO 网络服务定义"(面向连接)
    3.2.3 ISO.DIS8349:称为"CL 网络服务定义"(面向无连接)
    3.2.4 ISO.DIS8473:称为"CL 网络协议"
    3.2.5 ISO.DIS8348:称为"网络层寻址"
    3.2.6 除上述标准外,还有许多标准。这些标准都只是解决网络层的部分功能,所以往往需要在网络层中同时使用几个标准才能完成整个网络层的功能.由于面对的网络不同,网络层将会采用不同的标准组合.
    在具有开放特性的网络中的数据终端设备,都要配置网络层的功能.现在市场上销售的网络硬设备主要有网关和路由器.

    4.传输层
    传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层 的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。 传输层也称为运输层.传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层.因为它是源端到目的端对数据传送进行 控制从低到高的最后一层.
    有一个既存事实,即世界上各种通信子网在性能上存在着很大差异.例如电话交换网,分组交换网,公用数据交换网,局域网等通信子网都可互连,但它 们提供的吞吐量,传输速率,数据延迟通信费用各不相同.对于会话层来说,却要求有一性能恒定的界面.传输层就承担了这一功能.它采用分流/合流,复用/介 复用技术来调节上述通信子网的差异,使会话层感受不到.
    此外传输层还要具备差错恢复,流量控制等功能,以此对会话层屏蔽通信子网在这些方面的细节与差异.传输层面对的数据对象已不是网络地址和主机地 址,而是和会话层的界面端口.上述功能的最终目的是为会话提供可靠的,无误的数据传输.传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接 释放阶段3个阶段才算完成一个完整的服务过程.而在数据传送阶段又分为一般数据传送和加速数据传送两种。传输层服务分成5种类型.基本可以满足对传送质 量,传送速度,传送费用的各种不同需要.传输层的协议标准有以下几种:
    4.1 ISO8072:称为"面向连接的传输服务定义"
    4.2 ISO8072:称为"面向连接的传输协议规范"

    5.会话层
    会话层提供的服务可使应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传 送大的文件极为重要。会话层,表示层,应用层构成开放系统的高3层,面对应用进程提供分布处理,对话管理,信息表示,恢复最后的差错等.
    会话层同样要担负应用进程服务要求,而运输层不能完成的那部分工作,给运输层功能差距以弥补.主要的功能是对话管理,数据流同步和重新同步。要完成这些功能,需要由大量的服务单元功能组合,已经制定的功能单元已有几十种.现将会话层主要功能介绍如下.
    5.1为会话实体间建立连接。为给两个对等会话服务用户建立一个会话连接,应该做如下几项工作:
    5.1.1将会话地址映射为运输地址
    5.1.2选择需要的运输服务质量参数(QOS)
    5.1.3对会话参数进行协商
    5.1.3识别各个会话连接
    5.1.4传送有限的透明用户数据
    5.2数据传输阶段
    这个阶段是在两个会话用户之间实现有组织的,同步的数据传输.用户数据单元为SSDU,而协议数据单元为SPDU.会话用户之间的数据传送过程是将SSDU转变成SPDU进行的.
    5.3连接释放
    连接释放是通过"有序释放","废弃","有限量透明用户数据传送"等功能单元来释放会话连接的.会话层标准为了使会话连接建立阶段能进行功能协 商,也为了便于其它国际标准参考和引用,定义了12种功能单元.各个系统可根据自身情况和需要,以核心功能服务单元为基础,选配其他功能单元组成合理的会 话服务子集.会话层的主要标准有"DIS8236:会话服务定义"和"DIS8237:会话协议规范".

    6.表示层
    表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作。这种类型的服务之所以需要,是因为不同的计算机体系结构使用的数据表示法不 同。例如,IBM主机使用EBCDIC编码,而大部分PC机使用的是ASCII码。在这种情况下,便需要会话层来完成这种转换。
    通过前面的介绍,我们可以看出,会话层以下5层完成了端到端的数据传送,并且是可靠,无差错的传送.但是数据传送只是手段而不是目的,最终是 要实现对数据的使用.由于各种系统对数据的定义并不完全相同,最易明白的例子是键盘,其上的某些键的含义在许多系统中都有差异.这自然给利用其它系统的数 据造成了障碍.表示层和应用层就担负了消除这种障碍的任务.
    对于用户数据来说,可以从两个侧面来分析,一个是数据含义被称为语义,另一个是数据的表示形式,称做语法.像文字,图形,声音,文种,压缩,加 密等都属于语法范畴.表示层设计了3类15种功能单位,其中上下文管理功能单位就是沟通用户间的数据编码规则,以便双方有一致的数据形式,能够互相认 识.ISO表示层为服务,协议,文本通信符制定了DP8822,DP8823,DIS6937/2等一系列标准.

    7.应用层
    应用层向应用程序提供服务,这些服务按其向应用程序提供的特性分成组,并称为服务元素。有些可为多种应用程序共同使用,有些则为较少的一类应用程序使用。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务.其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE.CASE提供最基本的服务,它成为应用层中任何用户和任何服务元素的用户,主要为应用进程通信,分布系统实现提供基本的控制机制.特定服务SASE则要满足一些特定服务,如文卷传送,访问管理,作业传送,银行事务,订单输入等.
    这些将涉及到虚拟终端,作业传送与操作,文卷传送及访问管理,远程数据库访问,图形核心系统,开放系统互连管理等等.应用层的标准有DP8649"公共应用服务元素",DP8650"公共应用服务元素用协议",文件传送,访问和管理服务及协议.

    讨论:OSI七层模型是一个理论模型,实际应用则千变万化,因此更多把它作为分析、评判各种网络技术的依据;对大多数应用来说,只将它的协议族(即协议堆栈)与七层模型作大致的对应,看看实际用到的特定协议是属于七层中某个子层,还是包括了上下多层的功能。
    这样分层的好处有:
    1.使人们容易探讨和理解协议的许多细节。
    2.在各层间标准化接口,允许不同的产品只提供各层功能的一部分,(如路由器在一到三层),或者只提供协议功能的一部分。(如Win95中的Microsoft TCP/IP)
    3. 创建更好集成的环境。
    4. 减少复杂性,允许更容易编程改变或快速评估。
    5. 用各层的headers和trailers排错。
    6.较低的层为较高的层提供服务。
    7. 把复杂的网络划分成为更容易管理的层。

    7.应用层
    TELNET FTP TFTP SMTP SNMP HTTP BOOTP DHCP
    6:表示层
    文本:ASCII,EBCDIC
    图形:TIFF,JPEG,GIF,PICT
    声音:MIDI,MPEG,QUICKTIME
    5:会话层
    NFS SQL RPC X-WINDOWS ASP(APPTALK会话协议)SCP
    4:传输层
    TCP/IP----TCP和UDP NOVELL---IPX SPX
    3:网络层
    IP IPX
    2:数据链路层
    以太网 IEEE802.3 令牌环 IEEE802.5 HDLC PPP
    1:物理层
    10BASE T 10BASE TX V.35 RS-232 100BASE T 100BASE TX 1000BASE T 1000BASE TX 100BASE F 100BASE FX

         你说的应该是因特网协议堆,如果说因特网协议堆按5层来划分,第4层就是传输层(transport layer),它是应用层(第5层)和网络层(第3层)之间的接口。传输层为应用层上的应用提供两类截然不同的服务:第一类服务叫做可靠的面向连接服务 (connection-oriented service),确保正确无误地把消息从源端传送到目的地,使用的协议是TCP协议。第二类服务是不可靠的无连接服务(unreliable, connectionless service),使用的协议是用户数据包协议UDP(User Datagram  Protocol)。一般来说,应用层协议运行在操作系统之上,而传输层协议集成在操作系统之中。因此,当设计网络应用时,设计人员必需要指定其中的一种 网络传输协议,网络多媒体应用通常使用UDP协议。

    一个网络单元层n(layer n)与另一个网络单元层n(layer n)交换的消息是层n(layer n)上的消息,这些消息称为层n协议数据单元(layer-n protocol data unit,n-PDU)。如图15-18所示,主机A的传输层与主机B的传输层交换的消息就是传输层上的消息,这叫做逻辑上的端-端传输,当信息包通过中 间设备(例如路由器、网桥和中继器等设备)时,这些网络设备对使用UDP协议的信息包和使用TCP协议的信息包将一视同仁。在一些网络文献中,通常把使用 UDP的协议数据单元(protocol data unit,PDU)称为数据包(datagram),但网络文献也使用数据包(datagram)这个术语表示网络层的PDU,名词术语不统一就会使人很 混乱。为了简化术语,本书把传输层上的协议数据单元PDU称为消息段(segment),或者就叫做传输层协议数据单元。
    15.4.2 端口号和套接号的概念
    在客户机/服务机(client/server)运行模式中,一端的主机叫做客户机,另一端的主机叫做服务机。一台服务机可以同时运行同一应用程序的几个 进程,例如服务机上的FTP服务软件可以同时给几个客户传送文件,对每个客户至少要调用一个FTP服务软件的进程。同样,一个客户可以同时与几台不同的主 机进行远程对话,对每个不同的主机,客户软件至少要调用一个远程客户软件的进程。因此,对连网计算机上的进程就需要相互联系的端口号来递送IP信息包。
    在因特网上,所有使用TCP或者UDP协议的应用程序都有一个标识协议本身的永久性端口号(port number)。例如,我们在设置Web浏览器或者FTP文件传输程序时会经常遇到的端口号:HTTP的端口号=80,FTP的端口号=21,电子邮件协 议SMTP的端口号=25,Telnet的端口号=23,这些端口号叫做众所周知的端口号(well-known port number)。端口号的分配定义在RFC 1700中,并在1994年成为一个标准,标准号是STD0002。可供TCP使用的端口号共计65,535,一般来说,大于255的端口号由本地的机器 使用,小于255的端口号用于频繁使用的进程,0和255是保留端口号。
    收发两端的传输层TCP之间的通信由两个号码的组合来鉴别,一个是机器的IP地址,另一个是TCP软件使用的端口号,这两个号码组合在一起就叫做套接标识 符(socket)或者叫做套接号,而且收发双方都需要有套接标识符。因为在互联网上机器的IP地址是唯一的,而对单台机器的端口号也是唯一的,因此套接 标识符在互联网上也是唯一的,这就可通过套接标识符使互联网络上的进程之间相互通信。互联网上收发两端的进程之间的通信建立过程.
    15.4.3 用户数据包传输协议(UDP)
    1. UDP协议简介
    因特网为网络应用提供有两种不同的传输协议:用户数据包传输协议(User Datagram Protocol,UDP)和传输控制协议TCP(Transfer Control Protocol)。不同的网络应用使用不同的协议,如图15-20所示。例如,HTTP使用TCP协议,而普通文件传输协议(Trivial File Transfer Protocol,TFTP)则使用UDP。
    UDP协议不提供端-端的确认和重传功能,它不保证信息包一定能到达目的地,因此称为不可靠协议。应用开发人员选择UDP时,应用层协议软件几乎是直接与IP通信。
    应用层协议
    HTTP,FTP,Telnet,SMTP,NNTP,……
    TFTP,RTP,Real Audio,……
    传输层协议
    TCP
    UDP
    网络层
    IP,ICMP,IGMP
    HTTP(Hypertext Transfer Protocol) 超文本传送协议
    FTP(File Transfer Protocol) 文件传输协议
    Telnet 远程联接服务标准协议
    SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议
    RTP(Real-time Transport Protocol) 实时传输协议
    UDP有下述几个特性:
    (1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送 端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列 中读一个消息段。
    (2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
    (3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
    (4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
    虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议 RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。UDP广泛用在多媒体应用中,例 如,Progressive Networks公司开发的RealAudio软件,它是在因特网上把预先录制的或者现场音乐实时传送给客户机的一种软件,该软件使用的 RealAudio audio-on-demand protocol协议就是运行在UDP之上的协议,大多数因特网电话软件产品也都运行在UDP之上。
    2. UDP协议的标题结构
    UDP信息包由UDP标题和数据组成。UDP的标题结构如图15-21所示,它由5个域组成:源端端口(Source Port)、目的地端口(Destination Port)、用户数据包的长度(Length)和检查和(Checksum)。其中,前4个域组成UDP标题(UDP header),每个域由4个字节组成;检查和域占据2个字节,它用来检测传输过程中是否出现了错误;用户数据包的长度包括所有5个域的字节数。检查和的 详细计算可在RFC 1071中找到,现举一例说明使用检查和检测错误的道理。例如,假设从源端A要发送下列3个16位的二进制数:word1,word2和word3到终端 B,检查和计算如下:word1
    0110011001100110
    word2
    0101010101010101
    word3
    0000111100001111
    sum=word1+ word2+ word3
    1100101011001010
    检查和(sum的反码)
    0011010100110101
    从发送端发出的4个(word1,2,3以及检查和)16位二进制数之和为1111111111111111,如果接收端收到的这4个16位二进制数之和也是全“1”,就认为传输过程中没有出差错。
    许多链路层协议都提供错误检查,包括流行的以太网协议,读者也许想知道为什么UDP也要提供检查和。其原因是链路层以下的协议在源端和终端之间的某些通道 可能不提供错误检测。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。
    读者也可能会问,收发两端的两个进程是否有可能通过UDP提供可靠的数据传输?答案是可以的。但必需要把确认和重传措施加到应用程序中,应用程序不能指望UDP来提供可靠的数据传输。
    15.4.4 传输控制协议(TCP)
    1. TCP协议简介
    传输控制协议TCP(Transmission Control Protocol)是TCP/IP协议堆中的一部分。消息在网络内部或者网络之间传递时要打包,TCP负责把来自高层协议的数据装配成标准的数据包,相当 于在数据包上贴包装清单,而IP则相当于在数据包上贴收、发人的姓名和地址,TCP和IP之间要进行相互通信才能完成数据的传输。TCP/IP协议中的 IP主要负责在计算机之间搬运数据包,而TCP主要负责传输数据的正确性。TCP/IP有3个主要的特性:功能丰富,开放性和普遍型。随着新的网络服务的 不断出现,TCP/IP协议也在不断修改和扩充。
    TCP是传输层上的协议,该协议定义在RFC 793,RFC 1122,RFC 1323和RFC 2001文件中。目前,TCP协议比UDP协议用得更广泛,也更复杂。
    TCP是面向连接的协议。面向连接的意思是在一个应用程序开始传送数据到另一个应用程序之前,它们之间必须相互沟通,也就是它们之间需要相互传送一些必要的参数,以确保数据的正确传送。
    TCP是全双工的协议。全双工(full duplex)的意思是,如果在主机A和主机B之间有连接,A可向B传送数据,而B也可向A传送数据。TCP也是点对点的传输协议,但不支持多目标广播。 TCP连接一旦建立,应用程序就不断地把数据送到TCP发送缓存(TCP send buffer),如图15-22 所示TCP就把数据流分成一块一块(chunk),再装上TCP协议标题(TCP header)以形成TCP消息段(TCP segment)。这些消息段封装成IP数据包(IP datagram)之后发送到网络上。当对方接收到消息段之后就把它存放到TCP接收缓存(TCP receive buffer)中,应用程序就不断地从这个缓存中读取数据。
    TCP为应用层和网络层上的IP提供许多服务,其中3个最重要的服务是:(1) 可靠地传输消息:为应用层提供可靠的面向连接服务,确保发送端发出的消息能够被接收端正确无误地接收到。接收端的应用程序确信从TCP接收缓存中读出的数 据是否正确是通过检查传送的序列号(sequence number)、确认(acknowledgement)和出错重传(retransmission)等措施给予保证的。
    (2) 流程控制:连接双方的主机都给TCP连接分配了一定数量的缓存。每当进行一次TCP连接时,接收方主机只允许发送端主机发送的数据不大于缓存空间的大小。如果没有流程控制,发送端主机就可能以比接收端主机快得多的速度发送数据,使得接收端的缓存出现溢出。
    (3) 拥挤控制:TCP保证每次TCP连接不过分加重路由器的负担。当网络上的链路出现拥挤时,经过这个链路的TCP连接将自身调节以减缓拥挤。
    2 TCP协议标题的结构
    如前所述,TCP递给IP的数据块叫做消息段(segment)。这个消息段由TCP协议标题域(TCP header field)和存放应用程序的数据域(header fields)组成,如TCP协议标题有很多域组成,现将几个比较重要的域作一个简单介绍。
    (1) 源端端口号(Source Port Number)域和目的地端口号(Destination port Number)域:前者的16位域用来识别本机TCP;后者的16域用来识别远程机器的TCP。
    (2) 顺序号(sequence number)域和确认号(acknowledgment number)域:这两个域是TCP标题中两个最重要的域。32位的顺序号域用来指示当前数据块在整个消息中的位置,而32位的确认号域用来指示下一个数 据块顺序号,也可间接表示最后接收到的数据块顺序号。顺序号域和确认号域由TCP收发两端主机在执行可靠数据传输时使用。
    在介绍顺序号(sequence number)和确认号(acknowledgement number)之前,首先要介绍TCP最大消息段大小(maximum segment size,MSS)的概念。在建立TCP连接期间,源端主机和终端主机都可能宣告最大消息段大小MSS和一个用于连接的最小消息段大小。如果有一端没有宣 告MSS,就使用预先约定的字节数(如1500,536或者512字节)。当TCP发送长文件时,就把这个文件分割成许多按照特定结构组织的数据块 (chunk),除了最后一个数据块小于MSS外,其余的数据块大小都等于MSS。在交互应用的情况下,消息段通常小于MSS,像Telnet那样的远程 登录应用中,TCP消息段中的数据域通常仅有一个字节。
    在TCP数据流中的每个字节都编有号码。例如,一个106字节长的文件,假设MSS为103字节,第一个字节的顺序号定义为0.

    展开全文
  • OSI七层协议与TCP/IP五层协议

    千次阅读 2017-08-15 22:28:15
    TCP/IP协议 应用层(Application layer) 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层(Presentation layer) 数据格式化,代码转换,数据加密 没有协议 ...

    OSI七层协议

    OSI七层协议
    OSI层 功能 TCP/IP协议
    应用层(Application layer) 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
    表示层(Presentation layer) 数据格式化,代码转换,数据加密 没有协议
    会话层(Session layer) 解除或建立与其他接点的联系 没有协议
    传输层(Transport layer) 提供端对端的接口 TCP,UDP
    网络层(Network layer) 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
    数据链路层(Data link layer) 传输有地址的帧,错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
    物理层(Physical layer) 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802等

    应用层

    与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。

    表示层

    主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。

    会话层

    定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。

    传输层

    这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。

    网络层

    这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。

    数据链路层

    它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。

    物理层

    OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。


    TCP/IP五层协议


    【HTTP协议】

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

    HTTP是一个应用层协议,由请求和响应构成,永远都是客户端发起请求,服务器回送响应,是一个标准的客户端服务器模型。

    HTTP是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容

    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    常用的请求方式

    常用的请求方式是GET和POST.

    GET方式:是以实体的方式得到由请求URL所指定资源的信息,如果请求URL只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
    POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能:

    1:对现有资源的解释;

    2:向电子公告栏、新闻组、邮件列表或类似讨论组发信息

    3:提交数据块;

    4:通过附加操作来扩展数据库 。

    从上面描述可以看出,Get是向服务器索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。

    GET与POST方法有以下区别:

    (1)   在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。

    (2)   GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

    (3)   安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

    (4)   安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说,GET 请求一般不应产生副作用。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。

    Cookie和Session

    Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

    Session可以用Cookie来实现,也可以用URL回写的机制来实现。用Cookie来实现的Session可以认为是对Cookie更高级的应用。

    Cookie和Session有以下明显的不同点

    1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

    2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;

    3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

    4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

    HTTPS

    HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,https所用的端口号是443。

    【TCP层】

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议.TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

    应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元MTU的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。



    展开全文
  • TCP/IP是普遍使用的网络互连标准协议,可在不同环境和不同节点之间进行彼此通信,是连入Internet的所有计算机在网络上进行各种信息交换和传输所必须采用的协议,也是Windows NT、Windows 2000 Server、NetWare及UNIX...

       TCP/IP是普遍使用的网络互连标准协议,可在不同环境和不同节点之间进行彼此通信,是连入Internet的所有计算机在网络上进行各种信息交换和传输所必须采用的协议,也是Windows NT、Windows 2000 Server、NetWare及UNIX互连所采用的协议。TCP/IP实际上是一种层次型协议,它的内部包含许多其他的协议,组成了TCP/IP协议组,其协议层次表如下:

                           表1    TCP/IP协议层次

    应 用 层

    HTTP、Telnet、FTP、SMTP、SNMP

    传 输 层

    TCP、UDP

    网 间 网 层

    IP(ARP、RARP、ICMP)

    网络接口层

    Ethernet、X.25、SLIP、PPP

         TCP/IP协议实际上就是在物理网上的一组完整的网络协议,其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。

     图1 TCP/IP各层次协议

    下面重点介绍传输层中TCP与UDP,及其区别。

    一、用户数据报协议UDP

            用户数据报协议UDP(User Data Protocol)是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单、不可靠信息传送服务;UDP 协议基本上是 IP 协议与上层协议的接口;UDP 协议适用端口分别运行在同一台设备上的多个应用程序;它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,实际ping命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包到达的消息及时反馈回来,那么网络就是通的。

           UDP数据包中源端口和目标端口字段指定了两个16长的端口号,其中源端口字段是可选的,如果指定了该字段的值,就表示相应的数据包应发往的端口号,如果不使用,应将其设为0。长度字段表示整个UDP数据包的8位字数,包含UDP头部和数据部分。因此,该字段的值最小为8。如图示:

          

    图2   UDP数据报格式

          UDP协议位于IP协议之上,即UDP数据包是封装在IP数据包中进行传输的。 

      UDP头部

            UDP数据区                

     

           IP报头

                    IP报文数据区           

     

                帧头

                                     帧数据区                              

    图3  UDP数据包封装关系

            下面解释一个使用UDP协议的应用程序时如何将数据传输到目的主机A的特定应用程序的。首先接受数据的应用程序要申请一个UDP端口号,设为P。发送方的应用程序准备数据后,将其交给UDP协议,让其将数据发送给主机A的端口P。UDP协议将应用程序的数据作为UDP数据包的数据部分封装在一个UDP数据包中,并将数据包的目标端口字段设置为P。UDP协议再将包交给IP协议处理,让其将该数据包发送到主机A。IP协议将UDP数据包作为IP数据包的的数据封装在一个IP数据包中,并将目的地址设置为A,将协议字段设置为17,然后将其交给网络层处理并发送出去,该IP数据包可能会经过数个路由器,并最终到达主机A的IP协议层。主机A的IP协议发现字段为17,就将IP数据包的数据区交给UDP协议处理。UDP协议发现端口号为P,就将UDP数据包的数据区放置在端口P的队列中。A的应用程序从该队列中将数据取出进行处理。

    二、传输控制协议TCP

            传输控制协议TCP(Transmission  Control  Protocol)是基于连接的协议,即是在正式通信前必须要与对方建立起连接。一个TCP连接必须要经过三次“握手”才能建立起来,这三个简单过程包括主要:主机A向主机B发出连接请求数据包;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包;主机A再发出一个数据包确认主机B的要求同步。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

            TCP协议向应用程序提供的服务时面向字节流的,TCP数据的传输时通过IP协议进行的,IP协议的传输单位是IP数据包。因为用户提供的字节流数据可能很大,而一个IP数据包所能容纳的数据是有限的,因此TCP协议必须将字节流数据进行分割并组织成IP数据包进行传输,在目标主机的TCP协议将这些分割的数据再组织成数据流。TCP协议数据包有自己的头部和数据包,一个TCP数据包成为段。源端口和目标端口用于指定发送发和接收方的TCP端口号。和UDP协议不同的是,TCP段中源端口号必须指定。这是因为TCP是面向连接的,一个TCP连接由发送方和接收方的IP地址和TCP端口号组成。因为一个TCP端口号可以为不同的链接所中用,所以两个端口号中缺少一个都无法确定该数据段所属的TCP链接,也就无法确定处理数据的应用程序了。下图就是TCP数据段的具体格式:

     

    图4   TCP报文格式

            TCP连接的建立需要进行三次连接信息的发送/接收。三次握手的目的主要是在于同步连接双方发送数据的初始序列号。首先,连接的主动打开方式(即连接请求方)向被动打开方(即连接接受方)发送一个TCP数据段,该TCP段通常不包含数据区,并将代码位中SYN位置1设在序列号字段设置一个初始序列号。被动打开方接收到这个链接请求段后,向主动打开方发送一个TCP段。将ACK位置1,表示已经收到了主动打开方的连接请求。被动打开还会将SYN位置1并在序列号字段设置自己的初始序列号。主动打开方收到被动打开方的TCP段之后会发送一个ACK给被动打开方,接收方收到该数据段后连接的建立就完成了,就可以开始传输数据了。

    图5  TCP建立连接的三次握手过程

    三、TCP与UDP的比较

            因为UDP协议无连接,所以它的通信效率高;也正因如此,它的可靠性不如TCP协议高。

           TCP提供的是可靠的传输服务,而UDP协议提供的是不可靠的服务。UDP协议没有流量控制机制,如果发送进程发送数据报塞满了接收进程的接收缓冲区,就会丢弃数据报,而出现这种情况,UDP协议不会通知发送进程减缓数据的发送速率。TCP协议则拥有流量控制,具体机制暂略。

     

           TCP提供的是面向字节流的服务。应用程序只需将要传输的数据以字节流的形式提交给TCP协议,在连接的另一段,数据以同样的字节流顺序出现在接收程序中。而UDP协议的传输单位是数据块,一个数据块只能封装在一个UDP数据包中。

           TCP不适用于只有少量数据传输的情况,因为连接的开销较大,这么做得不偿失;此外TCP也不适用于实时应用,因为TCP协议对数据的传输是有先后顺序的,只有前面的传输成功才会开始后面的数据传送,这显然不符合实时应用的要求。

            对于不适合使用TCP协议的应用就只能使用UDP协议,使用UDP协议进行通信时应用程序必须自己处理下列问题:(1)应用程序必须自己提供机制来保证可靠性。应用程序必须有自己的超时重发机制、数据失序的处理、流量控制等。当然对于一些可靠性要求不高的应用可以不用这些机制,但通常都需要区分数据的先后关系。(2)应用程序必须处理大块数据的分割,以让其能封装在一个UDP数据包中。在接收方还必须再将分割的数据进行重组。

           UDP协议中,发送进程在发送每个数据报的时候并不等待多个数据报集中在一起以一个较大数据报发送出去,而是立即发送出去,它是记录型的协议。并且接收进程每次通过read或recv获得的数据报必定是发送进程所发送的那个数据报,不可能是多个数据报,接收进程可以识别到发送进程所发送的每个数据报的记录边界;TCP协议中发送进程在发送每个数据报的时候在内核处理过程中有可能并不立即发送出去,而是会将多个数据报集中在一起以一个较大的数据报来发送,它是字节流的协议。而接收进程每次通过read来读取发送进程发送过来的数据报并不一定是发送进程原先发送数据报,接收进程无法识别每个数据报的记录边界,所以TCP协议就是字节流的、无记录边界的协议。如QQ聊天所用到的协议就应该是有记录边界的,聊天过程中是以“消息”为单位,消息可以看成一个记录,所以QQ聊天协议采取UDP协议而不是TCP协议。

          UDP协议是无序的传输协议。发送进程所发送的每个数据报并不按照原先发送的顺序到达接收进程,有可能早发送的数据报较后到达接收进程,因为数据报在经过中间路径的传送时会因为各个数据报传送的路径不同或者其它原因而造成这些数据报到达的顺序不同,为了使基于UDP协议的应用程序有序,必须在应用程序中设置序号、确认机制来使其有序,TFTP协议是基于UDP的协议;TCP协议是有序协议,有超时、序号、重传、确认机制。如FTP协议是基于TCP用于传送文件的协议,FTP协议中的控制连接传送的内容都是基于消息形式,客户端在控制连接上发出一个请求消息,服务器端返回一个请求结果消息,因为控制连接上是交互式的消息传送,客户端在发送一个请求之后,在服务器端的响应消息未到达之前,客户端是不会发送第二个请求消息的,所以对于交互式的消息传递采用TCP协议使我们不必担心两个请求消息会叠加在一起。

          UDP协议在创建插口之后,可以同多个服务器端建立通信,而TCP协议只能与一个服务器端建立通信,TCP不允许目的地址是广播或多播地址,而UDP允许;UDP协议客户端同服务器端的通信关系可以是一对多的关系,而TCP协议只能是一对一的关系。

    表2:客户端连接过程

    表3:服务器端连接过程

    展开全文
  • HTTP协议TCP 协议

    千次阅读 2010-08-22 15:12:00
    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,浏览器Web服务器之间所遵循的协议就是HTTP,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向...
    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,浏览器与Web服务器之间所遵循的协议就是HTTP,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

    HTTP协议消息包括Client向Server的请求消息和Server向Client的响应消息。协议消息由起始行,头域和可选的消息体组成。HTTP/1.1是Internet现行的标准协议,这里都以HTTP/1.1为基础介绍。

    请求消息的第一行为下面的格式:
    Method Request-URI HTTP-Version/r/n

    Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、Delete、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单。

    Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
    HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。

    响应消息的第一行为下面的格式:
    HTTP-Version Status-Code Reason-Phrase/r/n

    HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
    Status-Code是一个三个数字的结果代码,主要用于机器自动识别。
    Status-Code可能取5个不同的值:
    1xx:信息响应类,表示接收到请求并且继续处理
      100  继续
      101  交换协议
    2xx:处理成功响应类,表示动作被成功接收、理解和接受
      200  OK
      201  已创建
      202  接收
      203  非认证信息
      204  无内容
      205  重置内容
      206  部分内容
    3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
      300  多路选择
      301  永久转移
      302  暂时转移
      303  参见其它
      304  未修改(Not Modified)
      305  使用代理
    4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
      400  错误请求(Bad Request)
      401  未认证
      402  需要付费
      403  禁止(Forbidden)
      404  未找到(Not Found)
      405  方法不允许
      406  不接受
      407  需要代理认证
      408  请求超时
      409  冲突
      410  失败
      411  需要长度
      412  条件失败
      413  请求实体太大
      414  请求URI太长
      415  不支持媒体类型
    5xx:服务端错误,服务器不能正确执行一个正确的请求
      500  服务器内部错误
      501  未实现(Not Implemented)
      502  网关失败
      504  网关超时
      505     HTTP版本不支持


    Reason-Phrase给Status-Code提供一个简单的文本描述。Reason-Phrase主要用于帮助用户理解。


    1. HTTP的头域包括通用头域,请求头域,响应头域和实体头域四个部分。
    • 通用头域是指请求和响应消息都支持的头域。

    包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via等方法。

    • Cache-Control头域

    指定请求和响应遵循的缓存机制。缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。

    • Date头域表示消息发送的时间
    时间的描述格式由rfc822定义。Date描述的时间表示世界标准时,如Date:Mon,31Dec200104:25:57GMT。

    • Pragma头域用来包含实现特定的指令。

    常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。


    2. 请求头域

    请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。


    3. Host头域
    Host头域指定请求资源的Intenet主机和端口号(默认端口可以省略),必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

    4. Referer头域

    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

    5. Range头域

    Range头域可以请求实体的一个或者多个子范围。
    表示头500个字节:bytes=0-499
    表示第二个500字节:bytes=500-999
    表示最后500个字节:bytes=-500
    表示500字节以后的范围:bytes=500-
    第一个和最后一个字节:bytes=0-0,-1
    同时指定几个范围:bytes=500-600,601-999

    但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206 PartialContent)返回而不是以200(OK)。

    6. User-Agent头域
    User-Agent头域的内容包含发出请求的用户信息,一般是客户机的浏览器类型。

    典型的请求消息如下:
    GET http://www.wantsoft.com//r/n
    Host:www.wantsoft.com
    Accept:*/*
    Pragma:no-cache
    Cache-Control:no-cache
    Referer:www.wantsoft.com
    User-Agent:Mozilla/4.04[en](Win95;I;Nav)
    Range:bytes=554554-

    响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。

    典型的响应消息:

    HTTP/1.0200OK
    Date:Mon,31Dec200104:25:57GMT
    Server:Apache/1.3.14(Unix)
    Content-type:text/html
    Last-modified:Tue,17Apr200106:46:28GMT
    Etag:"a030f020ac7c01:1e9f"
    Content-length:39725426
    Content-range:bytes554554-40279979/40279980

    7. Location响应头域
    Location响应头用于重定向接收者到一个新URI地址。

    8. Server响应头域
    Server响应头域包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。

    9. Content-Type实体头域
    用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型为数据设定称为“MIME-TYPE”的内容类型。MIME,即多任务因特网邮件扩充(Multipurpose Internet Mail Extension),一些常见的内容类型如下:
    text/html:HTML文档。
    text/plain:纯文本文件。
    image/jpeg:jpeg图像文件。
    image/GIF:gif图像文件。
    image/TIFF:TIFF格式的图形文件。
    application/rtf:多信息文本格式文档。
    application/zip:PKZIP或WinZIP压缩文件。
    video/mpeg:mpeg视频文件。
    video/quicktime:QuickTime视频文件。

    10. Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
    例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。

    11. Last-modified实体头
    指定服务器上保存内容的最后修订时间。


    TCP协议
    TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议。就前面一段时间面试中问到的TCP/IP问题,这里给出一个简单的小结。
     
    TCP由RFC793、RFC1122、RFC1323、RFC2001、RFC2018以及RFC2581定义。
     
    (1) TCP概述
    a. TCP提供的是面向连接的全双工服务
    TCP所有的数据会匹配到由源地址,目的地址,源端口,目的端口构成的一个TCP连接之上。TCP连接是一种需要建立的资源,可以通过之后会讲到的握手机制来完成。UDP是一种基于尽力而为机制的协议,不存在UDP连接资源的建立,资源的处理往往由应用层协议代劳了。
     
    b. TCP是提供的可靠服务。
    TCP有确认机制来保证数据包的可靠到达,
    TCP有CRC校验机制来保证数据包的无差错性,UDP的CRC是可选的,
    TCP会重新排序乱序的数据包和丢弃重复的数据,
    TCP能够提供流量控制机制,使用滑动窗口算法,
    TCP能提供拥塞控制与恢复机制,存在多种TCP拥塞控制模型,
    TCP能协商发送的数据报文长度。
     
    TCP报头。
        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |          Source Port          |       Destination Port        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Sequence Number                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Acknowledgment Number                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Data |           |U|A|P|R|S|F|                               |
       | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
       |       |           |G|K|H|T|N|N|                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Checksum            |         Urgent Pointer        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                             data                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                TCP Header Format
     
    对于TCP头的标记位,SYN标记只在三次握手(或四次握手)的时候的被置位,ACK标记会在握手之后所有的TCP报文中被置位。当然也有一些特殊情况,比如有些情况下RST报文不会置位ACK。
    这些规则也许在配置复杂的ACL中有用。
     
    (2) TCP协议栈的状态机 (摘自RFC793)
     
     
    a. TCP连接的建立。TCP连接的建立有主动打开,被动打开以及同时打开三种情况。
    三次握手比较清楚,要强调的是ISN,就是初始序列号的选择问题,序列号是32位的,针对不同的OS,初始序列号的选择往往也是有规律的。
     
    TCP传输的最大报文长度也是在三次握手中协商的。具体说是在也仅在SYN报文中协商的。MSS = MTU - ip_header_len - tcp_header_len。MSS这里也是为了防止分片,提高网络带宽利用率。
     
    TCP三次握手中,最后一个报文ACK,不需要再有额外的确认机制,如果这个ACK在网络中丢弃了,TCP协议栈也有其他的机制来处理。
    除了三次握手,还有一种很特殊的应用情况,就是TCP两端同时打开的情况(发送syn),这种情况没有描述在上面的状态机中。
    举例子来说,A通过源端口7777发起到B的目的端口8888的连接的同时,B也通过源端口8888发起对A的目的端口7777的TCP连接。
     
    b. TCP连接的关闭
    TCP连接的关闭也有主动关闭,被动关闭和同时关闭三种情况,这三种情况在上面的TCP状态机中都有描述。
    TCP连接的关闭需要报文四次交互,因为TCP是一个全双工的服务,所以每个方向的连接都关闭后,TCP的连接才是完整的拆除。
    状态机中,主动关闭和同时关闭最后都会进入到一个TIME_WAITE状态。针对TCP主动关闭的最后一个报文应该是ACK,确认对端的FIN报文。这个状态的概念是该TCP连接的资源并没有完全释放,因为还要确保最后一个ACK报文能够无误的到达对端,确认对端的FIN,否则就仍然要重传ACK。
    这个等待的过程(或者资源没有完全释放的过程)需要等待2MSL时间(考虑报文一次往返)。MSL是最大报文生存时间,RFC793中为2分钟,根据不同的TCP实现,一般是30s或者1分钟。
     
    所以在TIME_WAITE状态内,该TCP连接所使用的端口和连接资源,不能被继续使用。但是很多TCP实现并没有这个限制,只要新的TCP连接所使用的ISN大于TIME_WAITE状态TCP连接所使用的最后序号即可。实现中往往使用
    new ISN = latest ISN in time_waite + 128000
     
     
    IP报文的最大生存时间是TTL值,TCP报文的最大生存时间是MSL,二层上没有报文最大生存时间的概念,存在风暴的可能。

    TCP协议三次握手过程分析

    TCP(Transmission Control Protocol) 传输控制协议

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

    位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

    Sequence number(顺序号码) Acknowledge number(确认号码)

    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

    第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

    第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

    完成三次握手,主机A与主机B开始传送数据。


    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
    第一次握手:建立连接时,客户端发送syn包(syn=1,有初始的Seq Number)到服务器,并进入SYN_SEND状态,等待服务器确认; 
    第二次握手:服务器收到syn包,必须确认客户的SYN,给出ACK(Ack Number=发送包的Seq Numebr+1, ACK=1),同时自己也发送一个SYN包(syn=1, 有服务端自己本身的Seq Numebr),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

    实例:

    IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
    IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
    IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1

    第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;

    第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;

    第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。

     

    图解:
    一个三次握手的过程(图1,图2)

    (图1)

    (图2)
     

    第一次握手的标志位(图3)
    我们可以看到标志位里面只有个同步位,也就是在做请求(SYN)
    3 
     (图3)

    第二次握手的标志位(图4)
    我们可以看到标志位里面有个确认位和同步位,也就是在做应答(SYN + ACK)
    4 
    (图4)

    第三次握手的标志位(图5)
    我们可以看到标志位里面只有个确认位,也就是再做再次确认(ACK)
    5 
     
    (图5)

    一个完整的三次握手也就是 请求---应答---再次确认


     
    (3) TCP的滑动窗和定时器

    什么是滑动窗口协议? 首先RWND:接收端通知窗口,CWND: 拥塞窗口
        一图胜千言,看下面的图。简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口。发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。下面图中的4,5,6号数据帧已经被发送出去,但是未收到关联的ACK,7,8,9帧则是等待发送。可以看出发送端的窗口大小(RWND)为6,这是由接受端告知的(事实上必须考虑拥塞窗口cwnd,这里暂且考虑cwnd>rwnd)。此时如果发送端收到4号ACK,则窗口的左边缘向右收缩,窗口的右边缘则向右扩展,此时窗口就向前“滑动了”,即数据帧10也可以被发送。

    点击看大图

     


    a. TCP的报文确认机制。
    TCP使用的是滑动窗口机制来发送数据流,所以TCP协议允许连续发送多个TCP分组而不等待对端的确认。所以发送的分组数据和确认不是一对一的关系。
    TCP中,对数据的确认往往是延迟的,一般情况是两个TCP数据对应一个确认,在时延定时器没有溢出的情况下。如果时延定时器溢出了,那么自然也会发送确认报文。
    但是,针对存在交互大量微小报文的TCP应用,过于频繁的确认会导致网络利用率的低效,所以TCP支持一种Nagle算法。
     
    b. 延时定时器
    当TCP收到报文时候,启动延时定时器,比如200ms。
     
    c. Nagle算法
    TCP连接上只能存在一个未被确认的微小报文(41字节的TCP报文),在该确认到达前,TCP仅仅收集微小报文,当确认到达后,以一个分组的形式发出去。
    当然,某些应用需要关闭Nagle算法。
     
    d.滑动窗口机制
     
    e. 重传定时器
    目的是为了获得对端的确认报文。如果多次重传仍然没有获得确认,则会发送复位报文RST。
     
    这里我们再来看一下TCP的三次握手。
    A(发起端) ---> syn ---> B(服务器)
    A(发起端) <--- syn/ack <--- B(服务器)
    A(发起端) ---> ack    ?   B(服务器)
    如果TCP客户端A的最后一个ACK丢失了,TCP服务器B没有收到,会是一种什么情况?
    这个时候A已经进入到了Establish状态,然而B还只是Syn_Recev状态,所以服务器会重传syn/ack报文,只到连接的最终建立。但是客户端A已经到建立状态了,所以A是有可能发送TCP数据给服务器B的。
    所以TCP的两端,最终状态机是有可能不一致的。
     
    后面会详细讲述重传和拥塞控制机制。
     
    f. 坚持定时器
    由于TCP没有对ACK的确认机制,所以当接收端窗口从0恢复到一定值的时候,如果接收端发给发送端的ACK报文(标识窗口大小)丢失了,发送端就永远不知道接收端的窗口恢复情况了。
    所以发送端会定时发送带一个字节的ACK给接收端,查看接收端的确认报文中的窗口信息。
     
    g. 保活定时器
    由于物理原因,处于IDLE状态的TCP连接一端崩溃的时候,TCP有保活机制来判断对端是否仍然工作。这个设计存在争议,也许应用层应该实现该功能。RFC1122中有描述,保活定时器默认是关闭的。下面截取了一些RFC描述。
    Implementors MAY include "keep-alives" in their TCP implementations, although this practice is not universally accepted.  If keep-alives are included, the application MUST be able to turn them on or off for each TCP connection, and they MUST default to off.
     
     
    (4) TCP拥塞控制算法:慢启动、拥塞避免、快速重传和快速恢复
    针对拥塞控制,主要有四种模型,即TCP TAHOE,TCP RENO,TCP NEWRENO和TCP SACK。TCP TAHOE模型是最早的TCP协议之一,它由Jacobson提出。
     
    Jacobson观察到,TCP报文段(TCP Segment)丢失有两种原因,其一是报文段损坏,其二是网络阻塞,而当时的网络主要是有线网络,不易出现报文段损坏的情况,网络阻塞为报文段丢失的主要原因。针对这种情况,TCP TAHOE对原有协议进行了性能优化,其特点是,在正常情况下,通过重传计时器是否超时和是否收到重复确认信息(dupack)这两种丢包监测机制来判断是否发生丢包,以启动拥塞控制策略;在拥塞控制的情况下,采用慢速启动(Slow Start)算法和“拥塞避免”(Congestion Avoidance)算法来控制传输速率。 1990年出现的TCP Reno版本增加了“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)算法,避免了网络拥塞不严重时采用“慢启动”算法而造成过度减小发送窗口尺寸的现象,这样TCP的拥塞控制就主要由这4个核心算法组成。 
    a. 超时与重传
    RTT的计算与RTO的计算
     
    b. 慢启动和拥塞避免算法

    拥塞控制的对象? 
        拥塞的原因是负载过大,控制的对象自然是发送者的流量,TCP中用于控制流量的是滑动窗口协议。窗口的大小取决于对端通告的接收窗口(rwnd)和拥塞控制窗口(CWND),即真正的发送窗口=min(rwnd, cwnd)

    慢启动? 
        最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间 (Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下: 
       开始           --->     cwnd = 1 
       经过1个RTT后   --->     cwnd = 2*1 = 2 
       经过2个RTT后   --->     cwnd = 2*2= 4 
       经过3个RTT后   --->     cwnd = 4*2 = 8 
    如果带宽为W,那么经过RTT*log2W时间就可以占满带宽

    拥塞避免? 
        从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是 65536(同样以字节计算)。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。

    拥塞避免算法其实是和慢启动配合使用的。cwnd和ssthresh都是动态的值,虽然初始值为1和65535。
    当真正拥塞发生的时候,如果是超时或重复ack引起的拥塞,ssthreash会置为cwnd和接收窗口大小的一半,cwnd会降为1,然后执行慢启动算法,直到cwnd大于ssthresh的时候,执行拥塞避免算法;
    在慢启动算法期间和拥塞避免算法期间,TCP的发送速率都是在增长的,只是一个是指数增长方式,一个是线性增长方式。

    如何检测拥塞? 
        首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”: 
        1.把ssthresh降低为cwnd值的一半 
        2.把cwnd重新设置为1 
        3.重新进入慢启动过程。 
    从整体上来讲,TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。

     
    c . 快速重传和快速恢复算法
    TCP连接中有两种情况会引起重复的ack,一种是乱序报文,一种是丢包。
     
    快速重传:当发送方收到三个重复的ack后,不会进入慢启动状态,而是立刻重传丢失的报文。因为只有接收方收到新的报文段的时候,才会发送重复的ack,这表明TCP连接上仍然有数据流动,所以应该避免使用慢启动降速。
     
    快速恢复:
    第一步,当收到第三个重复的ack的时候,ssthresh设置为当前cwnd的一半,重传丢失的报文。设置cwnd为ssthresh加上3倍的报文段大小(cwnd=cwnd/2 + 3)。
    第二步,每收到一个重复的ack,cwnd增加1并发送一个分组。
    第三步,当下一个确认新数据的ack到达的时候,设置cwnd为上面第一步中ssthresh值,这个ack应该是对重传报文的确认,同时也是对丢包后面的中间报文的确认。
     
    最后,在收到三个重复ack的情况下,速度减半。
     
    快速重传算法首次出现在4.3BSD的Tahoe版本,快速恢复首次出现在4.3BSD的Reno版本,也称之为Reno版的TCP拥塞控制算法。
     
    可以看出Reno的快速重传算法是针对一个包的重传情况的,然而在实际中,一个重传超时可能导致许多的数据包的重传,因此当多个数据包从一个数据窗口中丢失时并且触发快速重传和快速恢复算法时,问题就产生了。因此NewReno出现了,它在Reno快速恢复的基础上稍加了修改,可以恢复一个窗口内多个包丢失的情况。具体来讲就是:Reno在收到一个新的数据的ACK时就退出了快速恢复状态了,而NewReno需要收到该窗口内所有数据包的确认后才会退出快速恢复状态,从而更一步提高吞吐量。
     
    SACK就是改变TCP的确认机制,最初的TCP只确认当前已连续收到的数据,SACK则把乱序等信息会全部告诉对方,从而减少数据发送方重传的盲目性。比如说序号1,2,3,5,7的数据收到了,那么普通的ACK只会确认序列号4,而SACK会把当前的5,7已经收到的信息在SACK选项里面告知对端,从而提高性能,当使用SACK的时候,NewReno算法可以不使用,因为SACK本身携带的信息就可以使得发送方有足够的信息来知道需要重传哪些包,而不需要重传哪些包。
     
    (5) TCP的应用
    前几天和公司做防火墙限速的同事聊天, 我们公司新的防火墙限速实现方案就用到了TCP窗口机制. 作所周知, QoS除了分类,测速,队列还有调度一类的借助硬件的算法以外,在基于缓存或者丢包的限速基础上,最好还要降低TCP端到端的真正发送的速率,否则容易引起TCP的一系列拥塞控制动作。我们软件新的设计,就是通过修改ACK方向的通告窗口大小,来控制发送发的速率,能够在限速的基础上,同时降低发送方的发送速率。

    先来一个讲TCP、UDP和HTTP关系的

    1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
    在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
    在传输层中有TCP协议与UDP协议。
    在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
    因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

     

    2、HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。
    HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。
    另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。

     

    3、结论:虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。

    Socket是什么呢?
           Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。


    HTTP、TCP、UDP、Socket <wbr> <wbr> <wbr>(转)




    参考http://jasonccie.blog.51cto.com/2143955/422966

    http://www.cnblogs.com/rootq/articles/1377355.html

    http://www.cnblogs.com/ulihj/archive/2011/01/06/1927662.html




    展开全文
  • TCP协议-TCP包格式

    千次阅读 2013-10-28 13:38:17
    TCP协议也是建立在IP协议之上的,不过TCP协议是可靠的.按照顺序发送的.TCP的数据结构比前面的结构都要复杂. 行 0.......4.......8..10...........16..............24..............32  ---------------...
  • TCP与IP协议

    千次阅读 2017-09-04 18:56:51
    TCP与IP协议OSI的基本概念OSI是Open System Interconnect的缩写,意为开放式系统互联。 OSI七层参考模型的各个层次的划分遵循下列原则: 1、同一层中的各网络节点都有相同的层次结构,具有同样的功能。 2、同一...
  • TCP/UDP协议基本概念

    2019-10-26 00:10:11
    TCP和UDP协议TCP/IP协议的核心。 TCP 传输协议TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流...
  • TCP与UDP协议的特点及区别小结;TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
  • TCP/IP详解:协议(TCP)

    千次阅读 2016-10-20 22:53:47
    第17章:TCP:传输控制协议 T C P提供一种面向连接的、可靠的字节流服务。T C P连接中,仅有两方进行彼此通信。广播和多播不能用于 T C P。 如果必要, T C P将对收到的数据进行重新排序,将收到的数据以正确的顺序交给...
  • 运输层TCP/IP体系协议TCP|UDP)(一)

    千次阅读 2018-08-12 00:33:18
    TCP和UDP是TCP/IP体系中,运输层最终要的两种协议。在介绍这两种协议之前,先介绍一下端口的概念。  从IP层面来说,通信的两端是主机。IP数据报的首部明确表明了发送放和接受放的IP地址,但是,真正通信的实体是两...
  • 使用TCP协议传输数据相对来说更安全,因为通信双方拥有一个专属的通信通道,每发送一个数据包都有确认回复,若数据包丢失。如果发送放没收到确认包,就可以重发这个数据包。 最经典的例子就是三次握手。三次握手是...
  • TCP/IP协议

    千次阅读 2014-12-24 14:04:12
    TCP/IP协议  TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名... 众所周知,如今电脑上因特网都要作TCP/IP协议设置,显然该协议成了当今地球村“人人”之间的“牵手协议”。  1997年
  • OSI七层协议tcp/ip四层协议详解

    千次阅读 2017-07-03 21:34:11
    谈到网络不能不谈OSI参考模型,...在现实网络世界里,TCP/IP协议栈获得了更为广泛的应用。 OSI参考模型 OSI的基本概念 OSI是Open System Interconnect的缩写,意为开放式系统互联。 OSI七层参考模型的各个层次
  • 参考:https://zhidao.baidu.com/question/337954440.html 基于TCP的有FTP、Telnet、SMTP、HTTP、POP3DNS 基于UDP的有TFTP、SNMPDNS 其中DNS既可以基于TCP,也可以基于UDP。
  • 运输层TCP协议

    千次阅读 2016-12-02 22:19:34
    TCPTCP/IP协议族中非常复杂的一个协议。它具有以下特点: 1:面向连接的运输层协议。在使用TCP协议之前,首先需要建立TCP连接。传送数据完毕后,必须释放已经建立的TCP连接。 2:一条TCP连接有两个端点,连接...
  • 互联网协议TCP/IP 网络结构

    千次阅读 2018-04-17 15:53:19
    什么是 TCP/IP 网络?为什么远隔万里的计算机可以互相通信?计算机网络作为 IT 行业的基石,是工程师永远绕不开的话题。 计算机网络的分层体系结构 计算机网络是一个非常庞大且复杂的系统,所以在设计之初...
  • OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化,代码转换,数据加密 没有协议 会话层 解除或建立别的接点的联系
  • TCP协议连接建立连接断开过程

    千次阅读 2014-01-14 15:25:10
    在写socket程序的时候,遇到SIGPIPE,网上找资料,很多都提到FIN包和RST包,遂搜了下TCP的连接建立断开过程 --------------------------------------------分割线----------------------------------------------...
  • TCP协议连接建立连接断开过程(含断开时的TCP状态图) 博客分类:  技术类 网络协议应用服务器Linux网络应用数据结构  TCP协议连接建立时3次握手的过程。 简述TCP协议连接建立时3次握手...
  • TCP/IP协议族 详解(TCP/IP四层模型、OSI七层模型)

    千次阅读 多人点赞 2018-04-12 21:53:09
    TCP/IP协议族(TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又被称为TCP/IP协议栈(英语:TCP/IP ...
  • 6.TCP:传输控制协议

    千次阅读 2018-04-01 20:14:36
    尽管TCP和UDP都使用了相同的网络层(IP),TCP却向应用层提供了一种面向连接的,可靠的字节流服务,这UDP完全... TCP通过下列方式来提供可靠性: 1.应用数据被分割成最适合发送的数据块,这UDP不同;TCP传递给...
  • TCP传输控制协议

    千次阅读 2010-01-12 12:40:00
    TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供UDP完全不同的服务。 TCP...
  • 一、TCP/IP协议群基础知识 ...他们与TCP或IP的关系密切,是互联网不可缺少的组成部分。 二、TCP/IP协议群的分层模型 1、硬件(物理层) TCP/IP协议中最底层的是负责数据传输的硬件。 2、网卡层(数据链路层) ...
  • 实验九 TCP 协议分析实验 1.TCP 协议介绍** TCP 是传输控制协议 (Transmission Control Protocal)的缩写,提供面向连接的可靠的传输服务。在TCP/IP 体系中,HTTP、FTP、SMTP 等协议都是使用TCP 传输方式的。 (1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,542
精华内容 18,616
关键字:

下列协议与tcp