精华内容
下载资源
问答
  • 基于TCP面向连接的 Socket网络编程实验
  • DL-T-790-433-2005数据通信协议-数据链路层-面向连接的协议.pdf 介绍了关于DL-T-790-433-2005数据通信协议-数据链路层-面向连接的协议的详细说明,提供电力设计规范的技术资料的下载。
  • 面向连接与面向无连接协议 面向连接和无连接服务 (Connection Oriented and Connectionless Services) These are the two services given by the layers to layers above them. These services are: 这是各层为其...

    面向连接与面向无连接协议

    These are the two services given by the layers to layers above them. These services are:

    这是各层为其上方的层提供的两项服务。 这些服务是:

    1. Connection Oriented Service

      面向连接的服务

    2. Connectionless Services

      无连接服务

    面向连接的服务 (Connection Oriented Services)

    There is a sequence of operation to be followed by the users of connection oriented service. These are:

    面向连接的服务的用户需要遵循一系列操作。 这些是:

    1. Connection is established.

      建立连接。

    2. Information is sent.

      信息已发送。

    3. Connection is released.

      连接被释放。

    In connection oriented service we have to establish a connection before starting the communication. When connection is established, we send the message or the information and then we release the connection.

    在面向连接的服务中,我们必须在开始通信之前建立连接。 建立连接后,我们发送消息或信息,然后释放连接。

    Connection oriented service is more reliable than connectionless service. We can send the message in connection oriented service if there is an error at the receivers end. Example of connection oriented is TCP (Transmission Control Protocol) protocol.

    面向连接的服务比无连接服务更可靠。 如果接收者端出现错误,我们可以在面向连接的服务中发送消息。 面向连接的示例是TCP(传输控制协议)协议。

    连接少服务 (Connection Less Services)

    It is similar to the postal services, as it carries the full address where the message (letter) is to be carried. Each message is routed independently from source to destination. The order of message sent can be different from the order received.

    它与邮政服务相似,因为它带有要携带邮件(信)的完整地址。 每个消息都从源到目的地独立路由。 发送的消息顺序可以与接收的顺序不同。

    In connectionless the data is transferred in one direction from source to destination without checking that destination is still there or not or if it prepared to accept the message. Authentication is not needed in this. Example of Connectionless service is UDP (User Datagram Protocol) protocol.

    在无连接情况下,数据沿一个方向从源传输到目标,而无需检查目标是否仍然存在或是否准备接受消息。 在此不需要身份验证。 无连接服务的示例是UDP(用户数据报协议)协议。

    区别:面向连接和无连接服务 (Difference: Connection oriented and Connectionless service)

    1. In connection oriented service authentication is needed, while connectionless service does not need any authentication.

      在面向连接的服务中,需要身份验证,而无连接服务不需要任何身份验证。

    2. Connection oriented protocol makes a connection and checks whether message is received or not and sends again if an error occurs, while connectionless service protocol does not guarantees a message delivery.

      面向连接的协议建立连接并检查是否接收到消息,如果发生错误,则再次发送,而无连接服务协议不能保证消息的传递。

    3. Connection oriented service is more reliable than connectionless service.

      面向连接的服务比无连接服务更可靠。

    4. Connection oriented service interface is stream based and connectionless is message based.

      面向连接的服务接口基于流,无连接基于消息。

    什么是服务原语? (What are Service Primitives?)

    A service is formally specified by a set of primitives (operations) available to a user process to access the service. These primitives tell the service to perform some action or report on an action taken by a peer entity. If the protocol stack is located in the operating system, as it often is, the primitives are normally system calls. These calls cause a trap to kernel mode, which then turns control of the machine over to the operating system to send the necessary packets. The set of primitives available depends on the nature of the service being provided. The primitives for connection-oriented service are different from those of connection-less service. There are five types of service primitives :

    服务由一组可用于用户进程访问服务的原语(操作)正式指定。 这些原语告诉服务执行某些操作或报告对等实体采取的操作。 如果协议栈经常位于操作系统中,则原语通常是系统调用。 这些调用导致陷阱进入内核模式,然后将机器的控制权交给操作系统以发送必要的数据包。 可用的原语集取决于所提供服务的性质。 面向连接的服务的原语与无连接服务的原语不同。 服务原语有五种类型:

    1. LISTEN : When a server is ready to accept an incoming connection it executes the LISTEN primitive. It blocks waiting for an incoming connection.

      LISTEN:当服务器准备好接受传入连接时,它将执行LISTEN原语。 它阻止等待传入的连接。

    2. CONNECT : It connects the server by establishing a connection. Response is awaited.

      CONNECT:通过建立连接来连接服务器。 等待响应。

    3. RECIEVE: Then the RECIEVE call blocks the server.

      RECIEVE:然后RECIEVE调用将阻止服务器。

    4. SEND : Then the client executes SEND primitive to transmit its request followed by the execution of RECIEVE to get the reply. Send the message.

      SEND:然后客户端执行SEND原语以发送其请求,然后执行RECIEVE以获取答复。 发送消息。

    5. DISCONNECT : This primitive is used for terminating the connection. After this primitive one can't send any message. When the client sends DISCONNECT packet then the server also sends the DISCONNECT packet to acknowledge the client. When the server package is received by client then the process is terminated.

      DISCONNECT:此原语用于终止连接。 在此原始之后,就无法发送任何消息。 当客户端发送DISCONNECT数据包时,服务器也会发送DISCONNECT数据包以确认客户端。 当客户端收到服务器程序包时,该过程终止。

    面向连接的服务原语 (Connection Oriented Service Primitives)

    There are 5 types of primitives for Connection Oriented Service :

    面向连接的服务有5种原语:

    LISTENBlock waiting for an incoming connection
    CONNECTIONEstablish a connection with a waiting peer
    RECEIVEBlock waiting for an incoming message
    SENDSending a message to the peer
    DISCONNECTTerminate a connection
    阻止等待传入的连接
    连接 与等待的对等方建立连接
    接收 阻止等待传入的消息
    发送 向对等发送消息
    断开 终止连接

    无连接服务原语 (Connectionless Service Primitives)

    There are 4 types of primitives for Connectionless Oriented Service:

    面向无连接的服务有4种原语:

    UNIDATAThis primitive sends a packet of data
    FACILITY, REPORTPrimitive for enquiring about the performance of the network, like delivery statistics.
    统一数据 这个原语发送一个数据包
    设施,报告 用于查询网络性能的原始信息,例如传递统计信息。

    服务与协议的关系 (Relationship of Services to Protocol)

    In this section we will learn about how services and protocols are related and why they are so important for each other.

    在本节中,我们将学习服务和协议之间的关系以及它们为什么如此重要。

    什么是服务? (What are Services?)

    These are the operations that a layer can provide to the layer above it in the OSI Reference model. It defines the operation and states a layer is ready to perform but it does not specify anything about the implementation of these operations.

    这些是OSI参考模型中一层可以提供给其上一层的操作。 它定义了操作并声明了一个层已准备好执行,但是它没有指定有关这些操作的实现的任何内容。

    Services showing SERVICE ACCESS POINTS

    什么是协议? (What are Protocols?)

    These are set of rules that govern the format and meaning of frames, messages or packets that are exchanged between the server and client.

    这些是一组规则,用于管理在服务器和客户端之间交换的帧,消息或数据包的格式和含义。

    翻译自: https://www.studytonight.com/computer-networks/connection-oriented-and-connectionless-service

    面向连接与面向无连接协议

    展开全文
  • 面向连接与无连接

    万次阅读 多人点赞 2018-05-13 11:23:50
    面向连接与面向无连接是两种方法,在网络中用于相关网络协议的制定(例如TCP是面向连接的,而UDP是面向无连接的),在应用中,它们代表着数据通信的两种不同的传输数据技术。本文主要指协议与服务。   面向连接...

            面向连接与面向无连接是两种方法,在网络中用于相关网络协议的制定(例如TCP是面向连接的,而UDP是面向无连接的),在应用中,它们代表着数据通信的两种不同的传输数据技术。本文主要指协议与服务。

     

    面向连接(Connection-Oriented)

           面向连接协议是TCP/IP协议族的重要组成部分,面向连接依赖发送方和接收方之间的显示通信和阻塞以管理双方的数据传输,网络系统需要在两台主机之间发送数据之前先建立连接。而面向连接服务就是通信双方在通信时,要事先建立好一条通信线路(虚拟的),其过程有建立连接、维护连接、释放(断开)连接三个过程。

     

     

           面向连接方法中,在两个端点之间建立了一条数据通信信道(电路)。这条信道提供了一条在网络上顺序发送报文分组的预定义路径,这个连接类似于语音电话。发送方与接收方保持联系以协调会话和报文分组接收或失败的信号。但这并不意味着面向连接的信道比无连接的信道使用了更多的带宽,两种方法都只在报文分组传输时才使用带宽。

     

    流状态信息

           对于电路抽象和面向连接的分组网络(例如X.25),需要在每个交换机中为每个连接存储一些信息或状态。原因是每个分组只携带少量的额外信息,以提供到某个状态表的索引。例如,在X.25中,12位的逻辑信道标识符(LCI)或逻辑信道号(LCN)被用于这个目的。在每台交换机中,LCI或LCN和交换机中的每个流状态相结合,以决定分组交换路径中的下一台交换机。在使用信令协议在一条虚电路上交换数据之前,每个流状态已经建立,该协议支持连接建立、清除和状态信息。

            简单来说,面向连接的网络将流状态信息(LCI、LCN等用于识别通信两端的信息)存储在交换机中,因此相较于面向无连接网络的传送数据来说携带信息较少。

    特点

           面向连接服务的特点是其在进行数据传输前必须经过建立连接、维护连接、释放连接三个过程,并且在数据传输过程中,各分组不需要携带目的节点的地址。这就好比一个通信管道,数据发送方在一端发送数据,数据接收方在另一端取出数据。面向连接协议保证数据传输的收发顺序不变,即你应我答的模式。因此面向连接服务的传输可靠性高,但需要负担通信开始前的链接开销,协议复杂,通信效率不高。

     

    虚拟连接

           面向连接协议建立的是虚拟连接,这是相对于物理连接而言的。物理连接是实实在在存在的,例如线缆、索道等,看得见摸得着。而虚拟连接则是通过双向的消息传送以及消息确认来模拟物理连接。
           在计算机网络中,面向连接协议除了Internet的传输控制协议(TCP,Transmission Control Protocol)以外,还有Novell的顺序分组交换(SPX)、IBM/Microsoft的NetBIOS等。

     

     

    面向无连接

           与面向连接相对,面向无连接是指通信双方不需要事先建立通信线路,而是把每个带有目的地址的报文分组送到线路上,由系统自主选定线路进行传输。面向连接基于电话系统模型,而面向无连接则基于邮政系统模型。相对于面向连接的建立连接的三个过程,面向无连接只有“传送数据”的过程。
           在无连接方法中,网络除了把分组传送到目的地以外不需做任何事情,如果分组丢失了,接收方必须检测出错误并请求重发;如果分组因采用不同的路径而没有按序到达,接收方必须将它们重新排序。

     

     

    数据报(Datagram)

           数据报是面向无连接网络的一个重要概念,可用于建立一个无连接的网络。数据报起源于CYCLADES[P73]系统,它是一个特定类型的分组,有关来源和最终目的地的所有识别信息都位于分组而不是分组交换机。虽然这通常需要较大的数据包,但不需要再交换机中维护连接状态,并且不需要使用复杂的信令协议。

     

     

    特点

           由于面向无连接不需要在通信双方进行数据传输前建立虚拟连接线路,而维护连接的过程正是影响面向连接网络的瓶颈所在,因此面向无连接的服务能做到高效率和实时性,但可靠性相对面向连接服务较低一些。

     

     

    对比与总结

           面向连接,是指通信双方在进行通信之前,要事先在双方之间建立起一个完整的可以彼此沟通的通道,这个通道也就是连接。在通信过程中,整个连接的情况一直可以被实时地监控和管理。而无连接的通信,就不需要预先建立起一个联络两个通信节点的连接来,需要通信的时候,发送节点就可以往“网络”上送出信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控,让该信息的传递在通信网络中尽力而为地往目的地节点传送。
           在远程通信的技术中,X.25协议是面向连接的,它的传输方式叫做“虚电路”(virtual circuit);在因特网技术里,IP协议就是无连接的,它的信息传输方式叫做数据报(datagram)。而TCP协议就是面向连接的。

     

     

           面向连接的协议比面向无连接的协议在可靠性上有着显著的优势,但建立连接前必须等待接收方响应,传输信息过程中必须确认信息是否传到,断开连接时需要发出响应信号等,无形中加大了面向连接协议的资源开销。具体到TCP和UDP协议来说,除了源端口和目的端口,TCP还包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息,UDP则只包含长度和校验和信息。UDP数据报比TCP小许多,这意味着更小的负载和更有效的使用带宽。许多即时聊天软件采用UDP协议,与此有莫大的关系。两种协议的特点决定了它们的应用场景,在网络中,有些服务,如HTTP、FTP等,对数据的可靠性要求较高,在使用这些服务时,必须保证数据包能够完整无误的送达;而另外一些服务,如DNS、即时聊天工具等,并不需要这么高的可靠性,高效率和实时性才是它们所关心的。

     

     

           因特网是一个巨大的无连接数据分组网络,其中所有的数据分组传递都通过IP处理。然而,TCP在顶层添加面向连接的服务。TCP提供全部的高级面向连接的会话功能,以确保适当地传递数据。MPLS是用于IP网络的相对较新的面向连接的连网方案,它通过路由或两层网络建立快速标记交换路径。


     

                                                         本文内容摘自《TCP/IP详解 卷1:协议(中文版)第2版》、百度百科、维基百科

    展开全文
  • TCP-面向连接的传输层协议

    千次阅读 2020-12-04 17:07:40
    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。许多高层应用协议(包括HTTP、FTP)都是以它为基础的,TCP非常适合数据的连续传输。 传输控制协议TCP...


    传输控制协议(TCP,Transmission Control Protocol)是一种 面向连接的、 可靠的基于字节流传输层通信协议。许多高层应用协议(包括HTTP、FTP)都是以它为基础的,TCP非常适合数据的连续传输。
    传输控制协议TCP是为了在 不可靠的互联网络上提供 可靠的端到端字节流而专门设计的一个传输协议。

    主要特点

    TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式:

    1. 基于字节流的方式;(流就是指不间断的数据结构)TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
    2. 面向连接;面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。
    3. 可靠通信方式;对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
    4. 在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
    5. 通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

    TCP能够为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地送达网络上的其他计算机。因此,对可靠性要求高的数据通信系统往往使用TCP传输数据,但在正式收发数据前,通信双方必须首先建立连接。

    工作方式

    建立连接—三次握手

    TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
    在这里插入图片描述

    • 第一次握手
      建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。等待服务器的确认;

    • 第二次握手
      服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,

    • 第三次握手
      当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。

    为什么 TCP 建立连接需要三次握手,而不是两次?

    这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。

    三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立。

    问题的核心在于保证信道数据传输的可靠性,避免资源浪费
    在这里插入图片描述

    连接终止—四次挥手

    TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。
    在这里插入图片描述

    • 第一次挥手: 若主机A 认为数据发送完成,则它需要向 主机B 发送连接释放请求;主机A(可以使客户端,也可以是服务器端),设置Sequence Number,向主机B发送一个FIN报文段;此时,主机A进入FIN_WAIT_1状态;这表示主机A没有数据要发送给主机B了;
    • 第二次挥手: 主机B收到了主机A发送的FIN报文段,向主机A回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机A进入FIN_WAIT_2状态;主机B告诉主机A,我“同意”你的关闭请求; B进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
    • 第三次挥手: B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求。主机B向主机A发送FIN报文段,请求关闭连接,同时主机B进入LAST_ACK状态;
    • 第四次挥手: 主机A收到主机B发送的FIN报文段,向主机B发送ACK报文段,然后主机A进入TIME_WAIT状态;主机B收到主机A的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

    在这里插入图片描述
    在这里插入图片描述

    为什么要四次挥手

    TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

    为什么要等待2MSL

    MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
    原因有二:

    1. 保证TCP协议的全双工连接能够可靠关闭
    2. 保证这次连接的重复数据段从网络中消失

    第一点:如果主机1直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致主机2没有收到主机1最后回复的ACK。那么主机2就会在超时之后继续发送FIN,此时由于主机1已经CLOSED了,就找不到与重发的FIN对应的连接。所以,主机1不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
    第二点:如果主机1直接CLOSED,然后又再向主机2发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达主机2,由于新连接和老连接的端口号是一样的,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。

    TCP流量控制

    如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
    利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
    设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。假设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。

    在这里插入图片描述
    从图中可以看出,B进行了三次流量控制。第一次把窗口减少到 rwnd = 300 ,第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义。
    TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

    TCP拥塞控制

    1.慢开始和拥塞避免

    发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。
    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
    慢开始算法:
    当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。
    通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。


    每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
    另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。
    为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。慢开始门限ssthresh的用法如下:

    当 cwnd < ssthresh 时,使用上述的慢开始算法。
    当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
    当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
    拥塞避免
    让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

    在这里插入图片描述

    无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。
    这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕。
    如下图,用具体数值说明了上述拥塞控制的过程。现在发送窗口的大小和拥塞窗口一样大。

    在这里插入图片描述

    2.快重传和快恢复

    快重传
    快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。
    在这里插入图片描述
    接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。
    显然,接收方不能确认M4,因为M4是收到的失序报文段。根据 可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。
    但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了 接收方的四个对M2的确认,其中后三个都是重复确认。
    快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期。
    由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

    快恢复
    与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

    当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。
    与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
    在这里插入图片描述

    性能UDPTCP
    是否连接无连接面向连接
    是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
    连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
    传输方式面向报文面向字节流
    首部开销首部开销小,仅8字节首部最小20字节,最大60字节
    适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

    参考链接: 关于 TCP/IP,必知必会的十个问题.

    展开全文
  • 无连接和面向连接协议的区别

    万次阅读 多人点赞 2018-10-15 16:01:26
      网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这...

      网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?

      答案是:面向连接和无连接指的都是协议。也就是说,这些术语指的并不是物理介质本身,而是用来说明如何在物理介质上传输数据的。面向连接和无连接协议可以,而且通常也确实会共享同一条物理介质。

      如果两者的区别与承载数据的物理介质无关,又和什么有关呢?它们的本质区别在于,对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。

    一、无连接协议和面向连接协议的概念

      无连接协议中的分组被称为数据报(datagram),每个分组都是独立寻址,并由应用程序发送的。从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系,这就意味着协议很可能是不可靠的。也就是说,网络会尽最大努力传送每一个数据报,但并不保证数据报不丢失、不延迟或者不错序传输。

      另一方面,面向连接的协议则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长期的对话。记住这些状态,协议就可以提供可靠的传输。比如,发送端可以记住哪些数据已经发送出去了但还未被确认,以及数据是什么时候发送的。如果在某段时间间隔内没有收到确认,发送端可以重传数据。接收端可以记住已经收到了哪些数据,并将重复的数据丢弃。如果分组不是按序到达的,接收端可以将其保存下来,直到逻辑上先于它的分组到达为止。

      典型的面向连接协议有三个阶段。第一阶段,在对等实体间建立连接。接下来是数据传输阶段,在这个阶段中,数据在对等实体间传输。最后,当对等实体完成数据传输时,连接被拆除

      一种标准的类比是:使用无连接协议就像寄信,而使用面向连接的协议就像打电话。

    二、UDP和TCP协议

      既然无连接协议有这么多的缺点,大家可能会奇怪,为什么还要使用这种协议呢?我们会看到,在很多情况下,使用无连接协议构建应用程序都是有意义的。比如,使用无连接协议可以很方便地支持一对多和多对一通信,而面向连接协议通常都需要多个独立的连接才能做到。但更重要的是,无连接协议是构建面向连接协议的基础。TCP/IP 是基于一个4层的协议栈,如下图所示:
    在这里插入图片描述
      如图所示,TCP 和 UDP 都是构建在 IP 之上的。因此,IP 是构建整个 TCP/IP 协议族的基础。但 IP 提供的是一种尽力而为的、不可靠的无连接服务。它接收来自其上层的分组,将它们封装在一个 IP 分组中,根据路由为分组选择正确的硬件接口,从这个接口将分组发送出去。一旦将分组发送出去了,IP 就不再关心这个分组了。和所有无连接协议一样,它将分组发送出去之后就不再记得这个分组了。这种简单性也是 IP 的主要优点。

    1、TCP—面向连接服务

    • 它为 TCP 段中的数据提供了校验和。这样有助于确保抵达目的地的数据在传输过程中不会被网络损坏;

    • 它为每字节分配了一个序列号,这样,如果数据抵达目的地时真的错序了,接收端也能够按照恰当的顺序将其重装起来。当然,TCP 并没有为每字节都附加一个序列号。实际上,每个 TCP 段的首部都包含了段中第一字节的序列号。这样,就隐含地知道了段中其他字节的序列号。

    • TCP 提供了一种确认-重传机制,以确保最终每个段都会被传送出去。

    2、UDP—无连接服务

    • 它提供了一个可选的校验和来检测数据的损坏情况。尽管 IP 也有校验和,但它只对 IP 分组首部进行计算,所以,TCP 和 UDP 也都提供了校验和来保护它们自己的首部和数据;

    • UDP 向 IP添加的第二项特性就是端口的概念。

      回到与电话/寄信的类比中来,我们可以把 TCP 连接中的网络地址当作一个办公室总机的电话号码,把端口号当作办公室中某台正被呼叫的特定电话的分机号。同理,可以将UDP网络地址当作一座公寓楼的地址,并把端口号当作公寓楼大厅中的个人邮箱。

    转自:https://blog.csdn.net/tennysonsky/article/details/44455565

    展开全文
  • Java面向连接的类 Sockets有两种主要的操作方式:面向连接的和无连接的.面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫.所有的事情在到达时的顺序与它们出发时的顺序时一样.无连接的sockets操作...
  • 关于无连接服务与面向连接服务

    千次阅读 2020-03-28 22:08:34
    连接服务
  • 面向连接和面向无连接的区别

    千次阅读 2019-09-25 14:46:07
    面向无连接和面向连接的最主要区别是什么? 答: 主要的区别有两条。其一:面向连接分为三个阶段,第一是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。...
  • C++,面向连接的服务器端通信程序
  • Linux下C语言编程(聊天室),支持一对一聊天;支持群聊,支持发送文件.
  • 第一:TCP 和 UDP 的区别( 面向连接 和 面向无连接 ) TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时...
  • 面向连接的服务与无连接的服务

    千次阅读 2018-11-22 10:47:29
    面向连接的服务:首先每次进行数据的传输时,要先建立一个连接,然后传输,并且在传输结束后需要断开连接 特点:静态地分配资源,传输前需要建立连接,适用于在一段时间内向一个目的地址发送大量的数据 参考模型:...
  • 什么是面向连接和无连接呢?

    千次阅读 2018-10-27 13:40:58
    面向连接和无连接关键在于连接有无的区别,那么首先面向连接指的是在双方进行通信之前首先要建立一个会话(三次握手),确保消息的准确到达,如果有什么问题能够相互通知然后解决。举个栗子:打电话 那么无连接就...
  • 本文介绍了城域以太网面向连接业务的发展背景和标准化进程,分析了多种现有城域以太网面向连接技术,包括PWE3、VPLS 和PBB-TE,并介绍了热点技术PBB-TE 的发展现状及其面临的挑战。
  • 上一节《套接字有哪些类型》提到,流格式套接字(Stream Sockets)就是“面向连接的套接字”,它基于 TCP 协议;数据报格式套接字(Datagram Sockets)就是“无连接的套接字”,它基于 UDP 协议。 这给大家造成一种...
  • 网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个...
  • 连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接; 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息; 面向数据报: ...
  • 如题,在理解TCP和UDP中,一个是面向连接的传输协议,一个是不面向连接的协议。怎么能够更好的理解他们的不同。亚当和夏娃分别生活在两个山头,山头之间是万丈深渊,亚当采集野果需要分享给夏娃,如果他们之间有一条...
  • 简单的基于面向连接c/s程序工作模型的socket编程
  • 一、面向连接与无连接服务 计算机网络一般采用两种不同的技术传输数据 面向连接 面向无连接 1.面向连接 ①特点: 发送数据之前先建立好会话连接,通过网络服务在发送方与接收方之间建立一条虚拟链路 传输控制...
  • 面向连接的传输服务 ---》 基于tcp协议的数据传输 传输特征:  可靠的数据传输 可靠性 : 数据在传输中,无失序 无差错 无丢失 无重复  在数据传输前和传输结束后需要建立连接和断开连接  三次握手 : 在...
  • tcp如果想要提供一个可靠的传输协议,一定需要每次都建立连接吗?三 次招手的意义在于让通信两端确定,信息刚才是可以从任意一端传到另 一端的。如果传送数据前我们没有三次招手。那么,由于tcp是一个可靠 的...
  • 上一节《套接字有哪些类型》提到,流格式套接字(Stream Sockets)就是“面向连接的套接字”,它基于 TCP 协议;数据报格式套接字(Datagram Sockets)就是“无连接的套接字”,它基于 UDP 协议。 这给大家造成一种...
  • 在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 介绍 有些人认为应当...
  • 流格式套接字(Stream Sockets)就是“面向连接的套接字”,它基于 TCP 协议; 数据报格式套接字(Datagram Sockets)就是“无连接的套接字”,它基于 UDP 协议。 从字面上理解,面向连接好像有一条管道,它连接...
  • - 连接:在自己监听的端口接收到连接的请求,然后经过“三次握手”,维护一定的数据结构和对方的信息,确认了该信息:我发的内容对方会接收,对方发的内容我也会接收,直到连接断开。 - 断开:经过“四次挥手”确保...
  • 什么是面向连接(网络)

    千次阅读 2019-06-30 14:22:17
    面向连接: 是指通信双方在通信时,要事先建立一条通信线路。 其有三个过程:建立连接、使用连接和释放连接。 TCP协议就是一种面向连接的协议。 无连接: 面向无连接:是指通信双方不需要事先建立一条通信线路...
  • 面向连接、无连接与数据传输中的电路交换、分组交换 .面向连接、无连接 面向连接必须在数据交换之前建立连接(三个阶段:连接建立、连接维护、释放)。在数据传输过程中,各个分组不需要携带目标节点的地址,并且...
  • 面向连接的套接字程序设计 网络程序设计

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 512,298
精华内容 204,919
关键字:

面向连接