面试热点问题之 - TCP/UDP

简介: 面试热点问题之 - TCP/UDP

不管面试 Java 、C/C++、Python 等开发岗位,有关TCP的知识点总是一个热点问题


每次面对这类面试题的时候,真的是又爱又狠….


不过没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧!


1.讲一下什么是网络协议?


计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议.


而TCP/IP 是互联网相关的各类协议族的总称。


2.这些协议有哪几层有了解吗?


这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层


链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。


网络层:负责路由以及把分组报文发送给目标网络或主机。


传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。


应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。


3.可以讲一下什么是TCP吗?


TCP 协议属于4层传输层。它是面向连接的、可靠的、基于字节流的传输层通信协议。


4.可以具体一点吗?


面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;


可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;


字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。


5.那你知道什么是 TCP 连接


用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。


6.可以详细阐述一下它们各自的意思吗?


Socket-由 IP 地址和端口号组成;


序列号-用来解决乱序问题等;


窗口大小-用来做流量控制。


7.如何唯一确定一个 TCP 连接呢?


TCP 四元组可以唯一的确定一个连接,四元组包括如下:


1.源地址


2.源端口


3.目的地址


4.目的端口


8.那他们有什么作用呢?


源地址和目的地址的字段(32 位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机。


源端口和目的端口的字段(16 位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程。


9.UDP 和 TCP 有什么区别呢?


9.1.连结


TCP 是面向连接的传输层协议,传输数据前先要建立连接。


UDP 是不需要连接,即刻传输数据。


9.2.服务对象


TCP 是一对一的两点服务,即一条连接只有两个端点。


UDP 支持一对一、一对多、多对多的交互通信。


9.3.可靠性


TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。


UDP 是尽最大努力交付,不保证可靠交付数据。


9.4.拥塞控制、流量控制


TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。


UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。


9.5还有一个是关于首部开销的。


TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。


UDP 首部只有 8 个字节,并且是固定不变的,开销较小。


10.你刚才提到了的TCP首部长度。那么为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?


原因很简单。


TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的,所以无需再多用一个字段去记录 UDP 的头部长度。


11.它们有这么多区别。那应用场景又有何不同呢?


由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:

  • FTP 文件传输
  • HTTP / HTTPS

由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:

  • 包总量较少的通信,如 DNS 、SNMP 等
  • 视频、音频等多媒体通信
  • 广播通信

从上面的动态图可以得知,UDP只会把想发的数据报文一股脑的丢给对方,并不在意数据有无安全完整到达。


而TCP 是面向连接的、可靠的、基于字节流的传输层通信协议


总结


TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。


虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为


对数据准确性要求高,速度可以相对较慢的,可以选用TCP。


好了,今天的分享就到此。下期给大家分享TCP的三次握手和四次挥手!

相关文章
|
2月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
85 1
UDP 协议和 TCP 协议
|
13天前
|
网络协议 算法 网络性能优化
|
1天前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
11 4
|
7天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
23天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
34 1
TCP和UDP区别?
|
8天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
15天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
42 10
|
25天前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
28 1
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
35 0
Linux C/C++之TCP / UDP通信
|
1月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
59 1