zoukankan      html  css  js  c++  java
  • tcp与udp的区别

     udp的优势:

    UDP:无连接,发送数据之前不需要建立连接(TCP需要)。减少了开销和延时。

    UDP:面向报文,对IP数据报只做简单封装(8字节UDP报头)。减少报头开销。

    UDP:没有阻塞机制,宁愿阻塞时丢弃数据不传,也不阻塞造成延时。

    UDP支持一对一、一对多、多对一、多对多通信。

     tcp

    TCP是点对点的连接。一条TCP连接只能连接两个端点。

    TCP 提供可靠传输,无差错、不丢失、不重复、按顺序。

    TCP 提供全双工通信,允许通信双方任何时候都能发送数据,发送方设有发送缓存,接收方设有接收缓存。

    TCP 面向字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。

    区别:

    TCP(Transmission Control Protocol)传输控制协议,相对于UDP,TCP是面向连接的、提供可靠的数据传输服务。

    同时也是较UDP开销较大的、传输速度较慢的。

    UDP:单个数据报,不用建立连接,简单,不可靠,会丢包,会乱序;

    TCP:流式,需要建立连接,复杂,可靠 ,有序

    为什么要三次握手?

    握手的过程实际上是在通知对方自己的初始化序号(Initial Sequence Number),简称ISN,也就是上图中的x和y。x和y会被当作之后传输数据的一个依据,以保证TCP报文在传输过程中不会混乱。

    解决两个问题:

    1、避免连接请求的数据包丢失

    假设连接途中,客户端网络不稳定出现丢包,服务端根据seq=x来确定客户端请求到第几个包。然后告诉客户端你从第seq=x个包开始发送给我,之前的不用发送了,我这里有记录了。

    2、数据传输过程因为网络并发量很大在某结点被阻塞

    传输过程因为网络并发量很大在某结点被阻塞了,Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据,但是Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!

    三次握手的seq与ack确定了包的顺序。客户端每次请求时,询问服务端说这是第一号包,服务端收到后告诉客服端下次你给我的只能是二号包(别的都不要),同时给返回到客户端的包作标记:这是我返回给你的一号包。这样,出现阻塞时,根据包的序号就知道要响应的是几号包。

    为什么要四次挥手?

    tcp关闭连接需要四次握手原因:TCP连接是全双工通道,需要双向关闭。

    client向server发送关闭请求,表示client不再发送数据,server响应。此时server端仍然可以向client发送数据,待server端发送数据结束后,就向client发送关闭请求,然后client确认。

  • 相关阅读:
    cropper.js 实现裁剪图片并上传头像
    LINQ查询表达式
    c#扩展方法
    lambda表达式
    axios 封装
    Photoshop的混合模式中的叠加实现光照射在背景上的问题
    laravel官方教程-heroku中数据库迁移出现22023的问题
    laravel官方教程-服务器多php指定问题
    浏览器network信息
    理解CommonJs(用于nodejs)、AMD、CMD、ES6模块
  • 原文地址:https://www.cnblogs.com/topass123/p/12531001.html
Copyright © 2011-2022 走看看