zoukankan      html  css  js  c++  java
  • TCP和UDP

     本文基于《计算机网络(自顶而下方法)(原书第6版)》、明教教主秦柯的视频笔记和网上相关博客所写。博主理解若有误的地方,欢迎大家指出。

    TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议。(引用陈宝佳所述

    一、TCP

    1、TCP提供一种面向连接的、可靠的字节流服务。

    (1)TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备文段,以建立确保数据传输的参数。

     (2)TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复。TCP报文段是以IP(不靠谱协议)数据包来传输,而IP数据包可能达到接收端时可能会失序,所以,若有必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的形式交给应用层。

    (2.1)TCP通过以下方式来提供可靠服务:

    (a)应用层的数据被分割成TCP认为最合适发送的数据块;

    (b)TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段(确认ACK),如果没有及时收到一个确认,将重发这个报文段(超时重传);

    (c)另外,TCP收到收到来自另一端的数据,它将发送一个确认,但不是立即发送,通常会推迟几分之一秒,这样是为了节省资源,确认包(ACK)和自己这边可能发送的数据合成一个包发过去节省资源。

    (3)面向字节流,说的是应用层产生的数据与真正发送的单个IP数据包可能没有什么联系。应用层的数据若是过大,这TCP将会将其拆成合适的大小送到网络上,若是小,TCP则会积累足够大小以后再发到网络上。

    (4)TCP是点对点形式的,其传送形式只能是单播不能为广播和组播。

    2、TCP协议的一些应用

    当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

    二、UDP

    1、UDP是一个简单的面向数据报的运输层协议。

    (1)面向数据报:就是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。即应用层给UDP的报文不论大小,直接将UDP头部封装以后交给IP,然后封装IP头部以后,传送到网络上,应用层传输的数据和网络上的数据报一一对应--------一个网络操作一个数据包。这容易造成IP分片(主要由UDP造成),IP会把MTU和数据报长度进行比较,若大则需要分片。(MTU :最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位))。

    (2)UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDP也不负责重发,甚至当出现包的到达顺序乱掉时也没有纠正的功能(发送了就得了)。如果需要这些细节控制,那么不得不交给由采用UDP的应用程序去处理。换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

     2、UDP的应用

    基于UDP的协议有:DHCP,DNS,SNMP,TFTP,BOOTP。

    3、UDP支持多播和组播。

    补充

    我们经常用“ping”来测试两台主机通信是否正常,其实该命令就是向对方发送udp数据包,然后对方主机确认收到数据包,如果数据包到达的信息及时返回的话,就说明网络是通的,QQ就是udp发信息的,因此有时会出现收不到信息的时候。

    三、TCP与UDP区别总结(转自Li_Ning_的博客):

    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接;
    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;
    3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;
          UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);
    4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
    5、TCP首部开销20字节;UDP的首部开销小,只有8个字节;
    6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道;

     Ref:

    http://blog.csdn.net/li_ning_/article/details/52117463

    http://www.cnblogs.com/Jessy/p/3536163.html

    http://blog.csdn.net/herbert5069/article/details/31358641 

  • 相关阅读:
    Combine 框架,从0到1 —— 4.在 Combine 中使用计时器
    Combine 框架,从0到1 —— 4.在 Combine 中使用通知
    Combine 框架,从0到1 —— 3.使用 Subscriber 控制发布速度
    Combine 框架,从0到1 —— 2.通过 ConnectablePublisher 控制何时发布
    使用 Swift Package Manager 集成依赖库
    iOS 高效灵活地配置可复用视图组件的主题
    构建个人博客网站(基于Python Flask)
    Swift dynamic关键字
    Swift @objcMembers
    仅用递归函数操作逆序一个栈(Swift 4)
  • 原文地址:https://www.cnblogs.com/love-yh/p/7430389.html
Copyright © 2011-2022 走看看