面试问题:Tcp/Udp协议是什么,各有什么异同点,各自的使用场景?

Tcp协议(传输控制协议)

  • tcp是面向连接的协议,在收发数据之前,必须与对方建立可靠的连接;

  • 三次握手:简单形象通俗描述:

    主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。
    三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

  • 四次握手:断开Tcp连接时,需要客户端和服务端总共发送4个包以确认连接的断开。通俗描述为:

    客户端A和服务器B四次握手:
    客户端A: “B,我已经没有话说了,我不会再给你发消息了”; (等待B确认)(一次握手)
    服务端B: “A,好的,我知道你不会给我发消息了”;(此时,A->B的这条通路会变为半关闭状态,A -> B这个方向的连接释放了,但是,B->A这个方向的还没释放,B发消息给A,A仍能接收到)(二次握手);
    服务端B: “A,我也没话要跟你说了”;(等待A确认)(三次握手);
    客户端A: “好,我知道了,挂了吧”;(收到确认后,B断开连接,A断开连接)。

  • 特点:
    (1)是面向连接的运输层协议(使用Tcp协议前必须建立Tcp连接,传送数据完毕后,必须释放已建立的Tcp连接);
    (2)点对点:每条Tcp连接只能有两个端点(连接的端点叫套接字(socket)或插口);
    (3)Tcp提供可靠交互服务,通过Tcp连接传送的数据,无差错,不丢失,不重复,并且有序到达。
    (4)提供全双工通信:
    (5)面向字节流。

  • 适用场景:适用于对效率要求相对低,但对准确性要求相对高的场景下;

    一般用于文件传输(对数据准确性要求高,速度可以相对慢),发送或接收邮件(对数据准确性要求高,非紧急应用),远程登录等等。
    TCP可以用于网络数据库,分布式高精度计算系统的数据传输

  • Tcp的可靠传输协议

(1)停止等待协议:

超时重传:A给B发送消息后,必须收到B返回的确认消息才算发送成功,A只要在发送后的一段时间内没有收到B的确认消息,那就认为刚才发的消息丢失,就会重新发送刚才的消息,这就叫超时重传。
一种情况是,B在收到重传的消息后,又收到了之前丢失的消息,此时B也应该向A发送确认信息,但A会将这个信息丢弃,B也会将迟到的那个信息丢弃。

(2)连续ARQ协议

滑动窗口协议:接收方采用累计确认的方式,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。

  • Tcp的拥塞控制
    (1)拥塞:对网络资源的需求超过了网络能提供的资源(需求资源 > 可用资源)就称为拥塞;
    (2)拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。
    (3)几种拥塞控制方法:
  • 慢开始算法 和 拥赛避免算法:发送数据时,由小到大逐渐增大发送窗口,这样的方法可以使分组注入到网络的速率更合理。
  • 快重传算法 和 快恢复算法:收到3个重复的确认,执行快重传算法,转入拥塞避免,将发送窗口数量变为慢开始数量的一半。

Udp协议

  • 特点:
    (1)UDP是无连接的:发送数据之前不需要建立连接,发送结束后也没有连接释放,因此减少了开销和发送数据前的时研;
    (2)UDP使用尽最大努力交付:即不保证可靠交互;
    (3)UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
    (4)UDP没有拥塞控制:网络出现拥塞并不会使源主机的发送速率降低;

很多实时应用如ip电话,实时视频会议等要求主机以恒定速率发送数据,并且允许在拥塞时有一些数据丢失,但不允许有太大的时延,就可以用UDP,比如打视频电话,有一两帧卡顿影响并不大。

(5)UDP支持一对一,一对多,多对一,多对多的交互通信;
(6)UDP首部开销小;

  • 适用场景:UDP协议适用于对效率要求相对高,对准确性要求相对低的场景。

UDP一般用于即时通信:

  • QQ聊天 对数据准确性和丢包要求比较低,但速度必须快;
  • 在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的);
  • 网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题);
  • UDP可以用于服务系统内部之间的数据传输,因为数据可能比较多,内部系统局域网内的丢包错包率又很低,即便丢包,顶多是操作无效,这种情况下,UDP经常被使用。

TCP/UDP协议(二)的更多相关文章

  1. QQ--基于TCP/UDP协议的通讯原理

    QQ是一个基于TCP/UDP协议的通讯软件  发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!   一 ...

  2. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  3. TCP/UDP协议简要梳理

    TCP/UDP协议简要梳理 TCP TCP,Transmission Control Protocol,传输控制协议是一种面向连接的.可靠的.基于字节流的传输层通信协议.在因特网协议族中,TCP所在的 ...

  4. TODO:Golang语言TCP/UDP协议重用地址端口

    TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...

  5. java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端

    java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端 启动界面如下图: 首先启动服务器: 客户端登陆,登陆成功后为: 默认发送是全部用户,是多人发送. 当在边列 ...

  6. Shell 脚本实现TCP/UDP协议通讯

    Shell 脚本实现TCP/UDP协议通讯 http://www.cnblogs.com/occult/archive/2012/12/25/2832183.html  

  7. 计算机网络中的TCP/UDP协议到底是怎么回事(二)

    上一篇博客阐述了TCP/IP五层网络结构模型以及一些关于TCP.UDP的基础知识,这篇博客会接着写一些关于TCP拥塞控制的算法以及对TCP中常有的疑问进行解答. TCP拥塞控制 首先了解几个概念,为下 ...

  8. NetworkComms框架介绍 完美支持TCP/UDP协议

    NetworkComms网络通信框架序言 英文文章地址 :http://www.networkcomms.net/tcp-udp-connections/ NetworkComs.Net无缝的支持TC ...

  9. TCP/UDP 协议,和 HTTP、FTP、SMTP,区别及应用场景

    一.OSI 模型 OSI 模型主要作为一个通用模型来做理论分析,而TCP/IP 协议模型是互联网的实际通讯协议,两者一般做映射分析,以下不做严格区分和声明(好吧,比较懒): OSI 整个模型层次大致可 ...

随机推荐

  1. HeadFirst设计模式---装饰者

    定义装饰者模式 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案.这句话摘自书中,给人读得很生硬难懂.通俗地来说,装饰者和被装饰者有相同的父类,装饰者的行为组装着 ...

  2. jdbc、Mybatis、Hibernate介绍(非原创)

    文章大纲 一.jdbc介绍二.Mybatis介绍三.Hibernate介绍四.jdbc.Mybatis.Hibernate比较五.参考文章   一.jdbc介绍 1. jdbc编程步骤 (1)加载数据 ...

  3. github 分支管理

    github 分支管理 最近有同事问我git 如何管理分支,这里我以github为例,做下工作中常用的分支管理操作. 分支管理 作用:假设你准备开发一个新功能,但需要两周才能完成,第一周写了60%,如 ...

  4. SQL注入:宽字节注入

    了解GBK编码 尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的 ...

  5. 七、union联合

    Union:联合 作用:把2次或多次查询结果合并起来 案例(认识union):我想把商品价格大于5000元的和商品价格小于20元的商品都取出来 1.Select * from goods where ...

  6. Python语言基础07-面向对象编程基础

    本文收录在Python从入门到精通系列文章系列 1. 了解面对对象编程 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编 ...

  7. 04.UTXO:未使用的交易输出,比特币核心概念之一

    在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...

  8. python 一些程序规范(跨目录调用文件)

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 参考: https://www.cnblogs.com/monologuesmw/p/9490093.html 软件 ...

  9. Sentinel Dashboard 的 Docker 镜像使用

    1.下载 docker 镜像:https://hub.docker.com/r/anjia0532/sentinel-docker 2.启动 docker 容器:docker run -p8080:8 ...

  10. shiro 基本知识测试

    shiro 基本知识测试 <!--shiro核心包--> <dependency> <groupId>org.apache.shiro</groupId> ...