TCP

  • TCP是Transfer Control Protocol(传输控制协议)的简称,是一种面向连接的保证可靠传输的协议。
  • 在TCP/IP协议中,IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一确定Internet上的一台主机。
  • TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
  • 通过TCP协议传输,得到的是一个顺序的无差错的数据流。
  • 发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信。
  • 当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
  • TCP是一个基于连接的协议,它能够提供两台计算机之间的可靠的数据流
  • HTTP、FTP、Telnet等应用都需要这种可靠的通信通道。

UDP

  • UDP是User Datagram Protocol的简称,是一种无连接的协议。
  • UDP是从一台计算机向另一台计算机发送称为数据报的独立数据包的协议,该协议并不保证数据报是否能正确地到达目的地,它是一个非面向连接的协议。
  • 每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达时间以及内容的正确性都是不能保证的

TCP与UDP区别

(1)TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

(2)TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

(3)UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

(4)每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

(5)TCP对系统资源要求较多,UDP对系统资源要求较少。

(6)TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

tcp协议和udp协议的差别

区别 TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 少量数据 传输大量数据
速度

补充

TCP编程步骤

服务器端一般步骤:

  1、创建一个socket,用函数socket();

  2、设置socket属性,用函数setsockopt(); * 可选

  3、绑定IP地址、端口等信息到socket上,用函数bind();

  4、开启监听,用函数listen();

  5、接收客户端上来的连接,用函数accept();

  6、收发数据,用函数send()和recv(),或者read()和write();

  7、关闭网络连接;

  8、关闭监听;

客户端一般步骤:

  1、创建一个socket,用函数socket();

  2、设置socket属性,用函数setsockopt();* 可选

  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选

  4、设置要连接的对方的IP地址和端口等属性;

  5、连接服务器,用函数connect();

  6、收发数据,用函数send()和recv(),或者read()和write();

  7、关闭网络连接;

UDP

服务器端一般步骤:

  1、创建一个socket,用函数socket();

  2、设置socket属性,用函数setsockopt();* 可选

  3、绑定IP地址、端口等信息到socket上,用函数bind();

  4、循环接收数据,用函数recvfrom();

  5、关闭网络连接;

客户端一般步骤:

  1、创建一个socket,用函数socket();

  2、设置socket属性,用函数setsockopt();* 可选

  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选

  4、设置对方的IP地址和端口等属性;

  5、发送数据,用函数sendto();

  6、关闭网络连接;

为什么UDP有时比TCP更有优势?

UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。

(1)网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。

(2)TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。

采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

推荐

文末

欢迎关注个人微信公众号:Coder编程

欢迎关注Coder编程公众号,主要分享数据结构与算法、Java相关知识体系、框架知识及原理、Spring全家桶、微服务项目实战、DevOps实践之路、每日一篇互联网大厂面试或笔试题以及PMP项目管理知识等。更多精彩内容正在路上~

新建了一个qq群:315211365,欢迎大家进群交流一起学习。谢谢了!也可以介绍给身边有需要的朋友。

文章收录至

Github: https://github.com/CoderMerlin/coder-programming

Gitee: https://gitee.com/573059382/coder-programming

欢迎关注并star~

[Java网络安全系列面试题] 说一说TCP和UDP的区别与联系?的更多相关文章

  1. [Java网络安全系列面试题] GET 和 POST 的区别在哪里?

    一. 概述 本文的内容源自其他博客的总结,属于笔者的读书笔记,结构如下: HTTP 的请求报文 GET 方法的特点 POST 方法的特点 GET 和 POST 的区别 二. HTTP 的请求报文 首先 ...

  2. [Java网络安全系列面试题]常见web攻击有哪些?

    搞Web开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事.本篇主要简单介绍在Web领域几种常见的攻击手段及Java Web中的预防方式. 1. XSS 1.1 什么是 ...

  3. java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

    InerAddress: /**IP地址:在网络上唯一标示一台计算机 * 端口号:标示计算机上不同的应用程序 * java.net.InetAddress类:此类表示互联网协议 (IP) 地址. * ...

  4. Java多线程系列 面试题

    1. https://blog.csdn.net/jjj19891128/article/details/24393661  多线程经典面试题 2. https://blog.csdn.net/ll6 ...

  5. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  6. 轨迹系列——Socket总结及实现基于TCP或UDP的809协议方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...

  7. 前端面试题-TCP和UDP的区别

    TCP和UDP的区别 (1)TCP是面向连接的,udp是无连接的即发送数据前不需要先建立链接. (2)TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UD ...

  8. Java程序员面试题收集(3)

    面试中被问到过的题目: 1.<%@ include=""/>和<jsp:include page="" flush="true&qu ...

  9. JAVA 150道笔试题知识点整理

    JAVA 笔试题 整理了几天才整理的题目,都是在笔试或者面试碰到的,好好理解消化下,对你会有帮助,祝你找工作顺利,收到满意的 offer . 1.Java 基础知识 1.1 Java SE 语法 &a ...

随机推荐

  1. AF(操作者框架)系列(3)-创建第一个Actor的程序

    这节课的内容,语言描述基本是无趣的,就是一个纯程序编写,直接上图了. 如果想做其他练习,可参考前面的文章: https://zhuanlan.zhihu.com/p/105133597 1. 新建一个 ...

  2. idea 报Сannot Run Git runnerw.exe: AttachConsole failed with error 6

    报错:Сannot Run Git runnerw.exe: AttachConsole failed with error 6 解决方案:指向Git 的git.exe文件所在的安装目录,配置上就可以 ...

  3. 学习Vue.js-Day2

    书接上文/思考反馈 react,ng,vue作用差不多,那各个都有什么特点啊,实际工作中应该用哪一个? 答:其实在实际工作中,组员会通过讨论而选择框架:这三个框架都能解放你的工作量,也适合做单页面应用 ...

  4. TCP/IP基础总结性学习(6)

    HTTP 首部 一. HTTP 报文首部 1.HTTP 报文的结构: 2.HTTP 请求报文 图示: 举例子: 3.HTTP 响应报文: 下面的示例是访问 http://hackr.jp 时,请求报文 ...

  5. vue+element tree(树形控件)组件(2)

    今天记录组件的代码和一个调用它的父组件的代码,接口接收数据直接传element直接能用的,也就是经过上一章函数处理过的数据以下是代码 父组件 <template> <commonfi ...

  6. 《即时消息技术剖析与实战》学习笔记11——IM系统如何保证服务高可用:流量控制和熔断机制

    IM 系统的不可用主要有以下两个原因: 一是无法预测突发流量,即使进行了服务拆分.自动扩容,但流量增长过快时,服务已经不可用了: 二是业务中依赖的这些接口.资源不可用或变慢时,比如发消息可能需要依赖& ...

  7. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  8. vue 不用npm下载安装包 该如何引用js

    公司电脑不让用npm  ,vue的项目要使用moment.js, 用了各种script 引用,总是报错 正确的方式应该为: import {moment} from ‘moment.js ’ 不可以全 ...

  9. Asp.Net Core 2.0实现HttpResponse中繁切换

    随笔背景:因为项目中有个简单的功能是需要实现中文简体到繁体的切换,数据库中存储的源数据都是中文简体的,为了省事就想着通过HttpHeader的方式来控制Api返回对应的繁体数据. 实现方式:通过Asp ...

  10. 查看chrome插件源码

    简介 想查看chrome插件的源码,就需要找到chrome插件安装的位置,接着再文件夹下查找此插件的id. mac cd ~/Library/Application Support/Google/Ch ...