面试热点问题之 - 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的三次握手和四次挥手!

相关文章
|
1月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
77 1
UDP 协议和 TCP 协议
|
2月前
|
消息中间件 网络协议 算法
UDP 和 TCP 哪个更好?
【8月更文挑战第23天】
136 0
|
4天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
17 1
TCP和UDP区别?
|
6天前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
17 1
|
11天前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
20 0
Linux C/C++之TCP / UDP通信
|
14天前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
29 1
|
20天前
|
存储 网络协议 算法
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
41 5
|
21天前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
45 1
|
1月前
|
存储 网络协议 算法
UDP & TCP 超详解
本文详细介绍了UDP与TCP协议的相关知识。首先阐述了UDP协议结构,包括其报文格式、各字段含义及其CRC校验和机制。接着深入探讨了TCP协议,涵盖其协议结构、确认应答机制、超时重传策略、三次握手与四次挥手过程,以及滑动窗口、流量控制和拥塞控制等关键技术。最后分析了TCP在异常情况下的处理机制,如进程崩溃、主机关机、掉电和网线断开等情况。
106 5
|
1月前
|
网络协议
TCP和UDP区别
简介: TCP和UDP区别