zoukankan      html  css  js  c++  java
  • UDP与TCP笔记

     

    1、UDP

    UDP协议在工作时是建立在IP协议之上的,UDP从进程的缓冲区接收进程每一次产生的输出,对每次输出都生成一个UDP数据报,然后把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输层使用UDP协议时,发送端不需要发送缓冲区。

     

     

     

    UDP协议的特点:

    从UDP协议的数据报格式可以看出,UDP对数据的封装非常简单,主要是增加了端口号与校验和,然后就可以直接通过IP层进行传输了,因此它具有以下特点:

    (1) UDP是一种无连接、不可靠的数据报传输服务协议。

    (2) UDP对数据传输过程中惟一的可靠保证措施是进行差错校验,如果发生差错,则只是简单地抛弃该数据报。

    (3) 如果目标端收到的UDP数据报中的目标端口号不能与当前已使用的某端口号匹配,则将该数据报抛弃,并发送目标端口不可达的ICMP差错报文。

    (4) UDP协议在设计时的简单性,是为了保证UDP在工作时的高效性和低延时性。因此,在服务质量较高的网络中(如局域网),UDP可以高效地工作。

    (5) UDP常用于传输延时小,对可靠性要求不高,有少量数据要进行传输的情况,如DNS(域名服务)、TFTP(简单文件传输)等。

     

    2、TCP

    TCP报文段(常称为段)与UDP数据报一样也是封装在IP中进行传输的,只是IP报文的数据区为TCP报文段。

    1.TCP 源端口号 TCP源端口号长度为16位,用于标识发送方通信进程的端口。目标端在收到TCP报文段后,可以用源端口号和源IP地址标识报文的返回地址。

    2.TCP目标端口号 TCP目标端口号长度为16位,用于标识接收方通信进程的端口。源端口号与IP头部中的源端IP地址,目标端口号与目标端IP地址,这4个数就可以惟一确定从源端到目标端的一对TCP连接。

    3.序列号 序列号长度为32位,用于标识TCP发送端向TCP接收端发送数据字节流的序号。

    4.确认号 确认号长度为32位。

    5.头部长度 该字段用4位二进制数表示TCP头部的长短,它以32位二进制数为一个计数单位。TCP头部长度一般为20个字节,因此通常它的值为5。

    6.保留 保留字段长度为6位,该域必须置0,准备为将来定义TCP新功能时使用。

    7.标志 标志域长度为6位,每1位标志可以打开或关闭一个控制功能,这些控制功能与连接的管理(3.3.2小节讲述)和数据传输控制有关,其内容如下所述:

    ●URG:紧急指针标志,置1时紧急指针有效。

    ●ACK:确认号标志,置1时确认号有效。如果ACK为0,那么TCP头部中包含的确认号字段应被忽略。

    ●PSH:push操作标志,当置1时表示要对数据进行push操作。

    ● RST:连接复位标志,表示由于主机崩溃或其他原因而出现错误时的连接。

    ●SYN:同步序列号标志,它用来发起一个连接的建立,也就是说,只有在连接建立的过程中SYN才被置1。

    ●FIN:连接终止标志,当一端发送FIN标志置1的报文时,告诉另一端已无数据可发送,即已完成了数据发送任务,但它还可以继续接收数据。

    8.窗口大小 窗口大小字段长度为16位,它是接收端的流量控制措施,用来告诉另一端它的数据接收能力。

    9.校验和 校验和字段长度为16位,用于进行差错校验。校验和覆盖了整个的TCP报文段的头部和数据区。

    10.紧急指针 紧急指针字段长度为16位,只有当URG标志置1时紧急指针才有效,它的值指向紧急数据最后一个字节的位置(如果把它的值与TCP头部中的序列号相加,则表示紧急数据最后一个字节的序号,在有些实现中指向最后一个字节的下一个字节)。

    11.选项 选项的长度不固定,通过选项使TCP可以提供一些额外的功能。每个选项由选项类型(占1个字节)、该选项的总长度(占1个字节)和选项值组成

    12.填充 填充字段的长度不定,用于填充以保证TCP头部的长度为32位的整数倍,值全为0。

     

    TCP连接的建立与关闭:

    1. 建立连接 TCP使用“三次握手”(3-way Handshake)法来建立一条连接。所谓三次握手,就是指在建立一条连接时通信双方要交换三次报文。具体过程如下。

    2.关闭连接 由于TCP是一个全双工协议,因此在通信过程中两台主机都可以独立地发送数据,完成数据发送的任何一方可以提出关闭连接的请求。关闭连接时,由于在每个传输方向既要发送一个关闭连接的报文段,又要接收对方的确认报文段,因此关闭一个连接要经过4次握手。

     

    滑动窗口协议:

    1. 1比特滑动窗口协议,当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。
    2. 后退n协议,由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。
    3. 选择重传协议,在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。

     

  • 相关阅读:
    设计模式之模板方法
    UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
    JAVA并行框架学习之ForkJoin
    生产环境上shell的解读
    设计模式之中介者模式
    设计模式之策略模式
    设计模式之状态模式
    深入理解动态代理
    深入理解Java虚拟机
    深入理解Java虚拟机
  • 原文地址:https://www.cnblogs.com/VicLily/p/8862641.html
Copyright © 2011-2022 走看看