TCP与UDP区别

  1. TCP面向连接,通过三次握手建立连接,四次挥手解除连接;UDP是无连接的,即发送数据之前不需要建立连接。
  2. TCP是可靠的通信方式。TCP通过超时重传、数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
  4. 每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个包。

注意:对于TCP点对点,这里的端点指的是套接字Socket,由IP地址+端口号构成,即

套接字Socket=(IP地址:端口号)  比如:(192.3.4.5:80)

TCP 和 UDP 的使用场景

TCP 的使用场景:比如下载电影、文件传输之类

  1. 可靠性要求高的应用:TCP 提供可靠的、面向连接的通信,它通过序列号、确认和重传机制来确保数据的可靠传输,适用于对数据完整性要求高的应用场景,如文件传输、电子邮件等。

UDP 的使用场景:比如视屏电话、广播之类

  1. 实时性要求高的应用:UDP 是无连接的,不提供数据的可靠传输和顺序传输保证,但它具有较低的延迟,适用于对实时性要求高的应用,如语音通话、视频流等。
  2. 数据量小,频繁交互的应用:UDP 的头部开销小,适用于数据量小、频繁交互的应用场景,如 DNS 查询、NTP 时间同步等。

UDP 怎么样可以实现可靠的传输?

实现的方式可以参考TCP的可靠传输机制,差别就是将TCP传输层功能,如 确认机制、重传功能、流量控制、拥塞控制等功能实现在了应用层。 

TCP 三次握手、四次挥手过程、流量控制、拥塞控制、超时重传

【计算机网络】TCP 如何实现可靠传输

OSI 七层模型、TCP/IP 四层模型

C/C++工程师面试题(网络编程篇)_TCP

各层的主要功能

应用层:

  • 任务:通过应用进程间的交互来完成特定网络应用。
  • 协议:DNS,HTTP,SMTP
  • 数据单元:把应用层交互的数据单元称为报文(message)。

运输层:

  1. 任务:负责向两台主机中进程之间的通信提供通用的数据传输服务。
  2. 协议:TCP,UDP
  3. 数据单元:TCP的数据单元是报文段,UDP的数据单元是用户数据报

TCP与UDP

  • TCP是面向字节流、连接、可靠数据传输服务。
  • UDP是面向报文、无连接、不可靠的传输服务。

网络层:

  1. 任务:为分组交换网上的不同主机提供通信服务。
  2. 协议:IP
  3. 数据单元:IP数据报

两个具体任务:

  1. 路由选择:通过一定的算法,在互联网中的每一个路由器上,生成一个用来转发分组的转发表。
  2. 转发:每一个路由器在接收到一个分组时,要依据转发表中指明的路径把分组转发到下一个路由器。

数据链路层:

  1. 任务:实现两个相邻节点之间的可靠通信
  2. 协议:PPP点对点协议,CSMA/CD广播协议
  3. 数据单元:帧(frame)
物理层:
任务:实现比特(0 或 1)的传输。确定连接电缆的插头应当有多少根引脚,以及各引脚应如何连接。

C/C++工程师面试题(网络编程篇)_数据_02

在数据链路层加上尾部

C/C++工程师面试题(网络编程篇)_TCP_03

对称加密和非对称加密

对称加密:对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。

常见的对称加密算法有:DES、AES、3DES等。

非对称加密:非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。

常见的非对称加密算法:RSA,ECC等。

HTTPS加解密的过程是怎么样的?

HTTPS使用了传输层安全性协议(TLS)或者(SSL)来保护数据的传输过程,是一种安全的通信协议。

下面是HTTPS加解密的详细过程:


  1. 握手阶段
  • 客户端发送连接请求
  • 服务器回应客户端请求,返回数字证书,其中包含服务器的公钥。
  • 客户端验证服务器发送的数字证书的合法性,通过后客户端生成一个随机的对称加密密钥,并使用服务器的公钥加密这个对称密钥,并发送给服务器。
  1. 密钥交换阶段
  • 服务器使用私钥解密客户端发送的加密后的对称密钥。(对称加密所要使用的密钥通过非对称加密传输
  • 服务器和客户端现在都拥有了相同的对称密钥,用于后续通信的加密和解密。(数据进行对称加密

总体来说,HTTPS加解密过程通过非对称加密算法(RSA)进行密钥交换,然后通过对称加密算法(如AES)对通信数据进行加密和解密,以确保通信过程的安全性和私密性。

滑动窗口是什么

TCP 中采用滑动窗口来进行传输控制

  • 滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。
  • 发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。

滑动窗口机制主要是通过窗口大小实现流量控制,进而解决发送方发送数据过快、过多导致的接收端缓存区数据溢出导致的丢包现象。

TCP粘包是什么

TCP粘包是指发送方连续发送的数据包在接收方到达时被合并成一个大的数据包,而不是按照发送时的数据包边界进行分割。

产生原因:

  1. 发送方缓冲区未完全发送:发送方在发送数据时,如果发送缓冲区中还有未发送完的数据,新发送的数据可能会被合并到之前的数据包中一起发送。
  2. 接收方接收速度慢:接收方接收数据的速度比发送方发送数据的速度慢,导致多个数据包在接收方缓冲区中被合并成一个大的数据包。

导致问题:可能会导致接收方在解析数据时出现困难

解决办法:

  1. 消息边界标记:发送方在每个数据包的末尾添加特定的分隔符来标记数据包的边界,接收方根据这些分隔符来切分数据包,从而避免粘包问题。
  2. 定长消息:固定每个数据包的长度,不允许超过固定长度的数据包发送,这样可以避免粘包问题。

GET 和 POST 的区别

get主要用来获取数据,而post是提交或修改数据。

get有长度限制(2048字节)而post没有。

get的参数是显式的,而post是隐式的

浏览器从输入 URL 开始到页面显示内容,中间发生了什么?

URL解析:浏览器解析输入的URL,包括协议、主机名、端口号、路径等信息。

DNS解析:将解析的主机名转换为相应的IP地址

建立TCP连接:浏览器与对应服务器通过三次握手建立TCP连接

发送HTTP请求:浏览器向服务器发送HTTP请求

服务器处理并响应请求:服务器接收到HTTP请求之后响应客户端请求

浏览器解析响应:客户端接收到资源后解析HTML并进行渲染。


渲染过程就是先将HTML转换成dom树,再将CSS样式转换成stylesheet,根据dom树和stylesheet创建布局树,对布局树进行分层,为每个图层绘表,再将图层分成图块,紧接着光栅化将图块转换成位图,最后合成绘制生成页面。