当前位置: 首页 > news >正文

[面试直通版]网络协议面试核心之IP,TCP,UDP-TCP与UDP协议的区别

点击->计算机网络复习的文章集<-点击

目录

前言

UDP

TCP

区别小总结


  • 前言

  • TCP和UDP都是在传输层,在程序之间传输数据
  • 传输层
  • OSI模型:第四层
  • TCP/IP模型:第三层
  • 关键协议:TCP协议、UDP协议
  • 传输层属于主机间不同进程的通信
  • 传输层向上面的应用层提供通信服务,并屏蔽了下面的核心网络细节,使得面向传输层编程就像是两个主机进程之间有一条端到端的逻辑通信信道一样
  • 当传输层采用TCP协议时,这条逻辑通信信道就是一条可靠的通信信道,而尽管下面的网络是不可靠的
  • TCP是基于连接的,UDP是基于非连接的
  • 如果将进程与进程之间的通信看做是人与人之间的通信,那么假使人与人之间的通信方式有两种写信和打电话
    • 那么写信信件写完寄出去之后,无法知道对方是否收到,也无法知道对方收到的内容是否完整,知道对方信件收到的顺序是否正确
    • 打电话就不一样,当电话接通之后,肯定要确认对方有没有接通然后互相通话,最后挂断的时候也会通知对方
  • 写信的方式就和UDP的传输方式很像
  • 而打电话的方式就和TCP的方式很像
  • UDP

  • 看一下 UDP 的包头

  • UDP很简单,如果没有这两个端口号,数据就不知道该发给哪个应用
  • 特点:
    • 沟通简单,不需要大量的数据结构,处理逻辑和包头字段
    • 无连接,知道对端的IP和端口号就直接进行传输, 不需要建立连接
    • 它不会建立连接,但是会监听这个地方,谁都可以传给它数据,它也可以传给任何人数据,甚至可以同时传给多个人数据
    • 不可靠,没有确认机制, 没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息
    • 不会根据网络的情况进行拥塞控制,无论是否丢包,它该怎么发还是怎么发
    • 面向数据报,不能够灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并
    • 数据收不够灵活,但是能够明确区分两个数据包,避免粘包问题
    • 由于UDP在传输数据报前不用再客户和服务器之间建立一个连接,且没有超时重发等机制,所以性能负载低,传输速度很快,实现简单
  • 基于这些特点,UDP 的主要应用场景为
    • 1.需要资源少,网络情况稳定的内网,或者对于丢包不敏感的应用
    • 比如 DHCP 就是基于 UDP 协议的,应用IP地址配置
    • 2.不需要一对一沟通,建立连接,而是可以广播的应用
    • 因为它不面向连接,所以可以做到一对多,承担广播或者多播的协议
    • 3.需要处理速度快,可以容忍丢包,即使网络拥塞,也毫不退缩
    • 4.简单场景
  • 协议:
    • NFS: 网络文件系统
    • TFTP: 简单文件传输协议
    • DHCP: 动态主机配置协议
    • BOOTP: 启动协议(用于无盘设备启动)
    • DNS: 域名解析协议
  • TCP

  • 看一下 TCP 的包头

  • 首先,源端口和目标端口是不可少的
  • 表示数据是从哪个进程来, 到哪个进程去
  • 接下来是包的序号
    • 主要是为了解决乱序问题;不编好号怎么知道哪个先来,哪个后到
  • 确认序号
    • 发出去的包应该有确认,这样能知道对方是否收到,如果没收到就应该重新发送,这个解决的是不丢包的问题
  • 紧急指针
    • 标识哪部分数据是紧急数据
  • 状态位
    • SYN 是发起一个链接,ACK 是回复,RST 是重新连接,FIN 是结束连接
    • 1.URG: 紧急指针是否有效
    • 2.ACK: 确认号是否有效
    • 3.PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
    • 4.RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
    • 5.SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
    • 6.FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
    • 因为 TCP 是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更
  • 窗口大小
    • TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力,即接收缓冲区剩余的空间大小
  • 特点:
    • 面向连接,有连接服务,有可靠服务
    • 实现复杂,速度较慢,性能负载较高
  • 通过对 TCP 头的解析,要掌握 TCP 协议,应该重点关注以下问题:
    • 顺序问题
    • 丢包问题
    • 连接维护
    • 流量控制
    • 拥塞控制
  • 协议:
    • HTTP
    • HTTPS
    • SSH
    • Telnet
    • FTP
    • SMTP
  • 区别小总结

  • 1---
    • TCP面向连接(如打电话要先拨号建立连接)
    • UDP是无连接的,即发送数据之前不需要建立连接
  • 2---
    • TCP提供可靠的服务;也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
    • UDP尽最大努力交付,即不保证可靠交付
  • 3--
    • UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信
  • 4--
    • 每一条TCP连接只能是点到点的
    • UDP支持一对一,一对多,多对一和多对多的交互通信
  • 5--
    • TCP对系统资源要求较多
    • UDP对系统资源要求较少
  • 6--
    • UDP程序结构较简单,实现更简单
  • 7--
    • TCP是面向字节流的
    • UDP是基于数据报的
http://www.lryc.cn/news/20675.html

相关文章:

  • VO,BO,PO,DO,DTO,AO的区别
  • JavaSE学习笔记day15
  • Spring Security认证研究
  • BigKey、布隆过滤器、分布式锁、红锁
  • 一文让你彻底理解Linux内核调度器进程优先级
  • Java 抽象类和接口
  • 三行代码让你的git记录保持整洁
  • 阿里巴巴内网 Java 面试 2000 题解析(2023 最新版)
  • 网络应用之静态Web服务器
  • IndexDB 浏览器服务器
  • 追梦之旅【数据结构篇】——详解C语言实现链队列
  • SpringMVC - 13 - SpringMVC执行流程
  • 6091: 斐波那契数列
  • 任何人均可上手的数据库与API搭建平台
  • Ubuntu(虚拟机)的Anaconda 及使用
  • Git ---- IDEA集成 GitHub
  • opencv提取结构化文本总结
  • JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
  • Redis的持久化方式
  • 【unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随
  • handwrite-1
  • 【一天一门编程语言】Pascal 语言程序设计极简教程
  • 【基础篇0】Linux下ANACONDA与TF-LITE环境配置
  • TCP协议原理二
  • 电子科技大学网络协议(TCP/IP作业答案)--网工(五次作业汇总)
  • Kubernetes集群声明式文件YAML
  • 为赋能,创共赢~ 〖TFS_CLUB社区〗-〖星荐官计划〗来袭~ 期待各位小伙伴的加入~
  • 【华为OD机试模拟题】用 C++ 实现 - 水仙花数(2023.Q1)
  • Windows作为操作系统的典型特征和主要功能
  • 【Linux】-- 多线程安全