计算机网络常见面试题总结

计算机网络常见面试题总结

这个总结转载自https://javaguide.cn/cs-basics/network/other-network-questions.html

应用层有哪些常见的协议?

HTTP:超文本传输协议

超文本传输协议(HTTP, HyperText Transfer Protocol) 主要是为Web浏览器与Web服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,网页就是通过HTTP请求进行加载的,整个过程如下图所示。

img

HTTP协议是基于TCP协议的,因此在发送HTTP请求之前首先要简历TCP连接,也就是3次握手。目前使用的HTTP协议大部分都是1.1。在1.1协议里面,Keep-Alive是默认开启的,这样的话建立的连接就可以在多次请求中被复用了。

SMTP:简单邮件传输(发送)协议

简单邮件传输(发送)协议(SMTP, Simple Mail Transfer Protocol),基于TCP协议,用来发送电子邮件。

注意!:接收邮件的协议是POP3而不是SMTP

SMTP协议这块设计的内容比较多,以下两个问题比较重要:

1.电子邮件的发送过程

2.如何判断邮箱是否真正存在?

电子邮件的发送过程?

比如我的邮箱是yinjun96@foxmail.com,我要向xiaowang@qq.com发送邮件,整个过程可以简单分为下面几步:

  1. 通过SMTP协议,我将我写好的邮件交给foxmail邮箱服务器(邮局)
  2. foxmail邮箱服务器发现我发送的邮箱是qq邮箱,然后它使用SMTP协议将我的邮件转发到qq邮箱服务器
  3. qq邮箱服务器接收邮件之后就通知邮箱为xiaowang@qq.com的用户来收邮件,然后用户就通过POP3/IMAP协议将邮件取出。

如何判断邮箱是否真正存在的?

很多场景(比如邮件营销)下面我们需要判断我们要发送的邮箱地址是否真的存在,这个时候我们可以利用SMTP协议来检测,主要分为以下几步:

  1. 查找邮箱域名对应的SMTP服务器地址
  2. 尝试与服务器建立连接
  3. 连接成功后尝试向需要验证的邮箱发送邮件
  4. 根据返回结果判断邮箱地址的真实性

POP3/IMAP:邮件接收的协议

这两个协议没必要多做阐述,只需要了解POP3和IMAP两者都是负责邮件接收的协议即可。另外,需要注意不要将这两者和SMTP协议搞混淆了。SMTP协议只负责邮件的发送,真正负责接收的协议是POP3/IMAP

IMAP协议相比与POP3更新一点,为用户提供的可选功能更多一点,几乎所有现代电子邮件客户端和服务器都支持IMAP。大部分网络邮件服务提供商都支持POP3和IMAP。

FTP:文件传输协议

FTP协议主要提供文件传输服务,基于TCP实现可靠的传输。使用FTP传输文件的好处是可以屏蔽操作系统和文件存储方式。

FTP是基于客户-服务器(C/S)模型而设计的,在客户端与FTP服务器之间建立两个连接。如果我们要基于FTP协议开发一个文件传输的软件的话,首先需要搞清楚FTP的原理。关于FTP的原理,很多书籍上已经描述的非常详细了

FTP的独特优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条TCP连接(其他客户服务器应用程序一般只有一条TCP连接):

  1. 控制连接:用于传送控制信息(命令和响应)
  2. 数据连接:用于数据传送

这种将命令和数据分开传送的思想大大提高了FTP的效率

FTP工作过程

Telnet:远程登陆协议

Telnet协议通过一个终端登录到其他服务器,建立在可靠的传输协议TCP之上。Telnet协议的最大缺点是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用Telnet,并被一种称为SSH的非常安全的协议所取代的主要原因。

SSH:安全的网络传输协议

**SSH(Secure Shell)**是目前较可靠,专门为远程登陆会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH建立在可靠的传输协议TCP之上

Telnet和SSH之间的主要区别在于SSH会对传输的数据进行加密,保证数据安全性

TCP三次握手和四次挥手(面试常客)

为了准确无误地把数据送到目标处,TCP协议采用了三次握手策略

TCP三次握手漫画图解

如下图所示,两个机器人通过三次握手确定了对方能正确接收和发送信息

TCP三次握手

简单示意图

TCP三次握手

  • 客户端----> 发送带有SYN标志的数据包—一次握手—服务端
  • 服务端---->发送带有SYN/ACK标志的数据包----二次握手—客户端
  • 客户端----->发送带有ACK标志的数据包----三次握手—服务端

详细示意图

img

为什么要三次握手

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的

  • 第一次握手:客户端什么都不能确认,服务端确认了对方发送正常,自己接收正常
  • 第二次握手:客户端确定了自己发送和接收都正常,并且对方发送和接收都正常。服务端确认了对方发送正常,自己接收正常
  • 第三次握手:客户端和服务端都确认了自己发送/接收正常并且对方发送/接收也正常

所以三次握手就能确认双发手法功能都正常,缺一不可

第二次握手传回了ACK,为什么还要传回SYN?

接收端传回发送端所发送的ACK是为了告诉客户端,我收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而传回SYN则是为了建立并确认从服务端到客户端的通信

SYN同步序列编号(Synchronize Sequence Numbers)是TCP/IP建立连接时使用的握手信号。在客户端与服务器之间建立正常的TCP连接时,客户端首先发出一个SYN消息,服务器使用SYN-ACK应答表示接收到了这个消息,最后客户端再以ACK(Acknowledgement)消息响应。这样再客户端和服务器之间才能建立起可靠的TCP链接,数据才可以在客户端和服务器之间传递

为什么要四次挥手?

TCP四次挥手

断开一个TCP连接需要四次挥手:

  • 客户端—>发送一个FIN,用来关闭客户端到服务器的数据传送
  • 服务器—>收到这个FIN,它发回一个ACK,确认序号为收到的序号+1。和SYN一样,一个FIN占用一个序号
  • 服务器—>关闭与客户端的连接,发送一个FIN给客户端
  • 客户端—>发回ACK报文确认,并将确认序号设置为收到序号+1

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后将完全关闭了TCP连接

举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“我知道了”,这样通话才算结束。

上面讲的比较概括,推荐一篇讲的比较细致的文章https://blog.csdn.net/qzcsu/article/details/72861891

TCP与UDP的区别

TCP、UDP协议的区别

UDP在传送数据之前不需要先建立连接,服务器在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式(一般用于即时通信),比如:微信视频,斗鱼直播等

TCP提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的传输服务(TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传输时,有确认、窗口、重传和拥塞控制机制,在数据传送结束后还会断开连接用来节约系统资源),这难以避免增加了许多开销,如确认、流量控制、计时器以及连接管理等。这不仅使得协议数据单元的首部增大很多,还要占用许多处理器资源。TCP一般用于文件传输、发送和接收邮件、远程登陆等场景。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值