字节一面后续:TCP/IP 四层模型了解么?每一层都有哪些协议?

网络 通信技术
应用层位于传输层之上,主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输。 我们把应用层交互的数据单元称为报文。

本文转载自微信公众号「CS指南」,作者大白。转载本文请联系CS指南公众号。

大家好,我是大白。

这是 「面试现场」操作系统 的姊妹篇计算机网络,这个系列我会通过真实面试的形式向你讲解某个具体的知识点。

下面是正文。

1内容回顾

面试官:上次我们聊了网络分层相关的内容,今天我们继续延伸一下,来聊聊每一层具体做了什么事情。

大白:好的好的!

面试官:开始之前,我们先来回顾一下 TCP/IP 4 层模型。

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层

TCP-IP-4-model

2应用层

面试官:通常我们建议从应用层向网络接口层学习。你先说说应用层主要做了什么工作吧?

大白: 应用层位于传输层之上,主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输。 我们把应用层交互的数据单元称为报文。

应用层协议定义了网络通信规则,对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如支持 Web 应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。

network-layer

HTTP:超文本传输协议

面试官:那你先聊聊 HTTP 协议吧!

大白:超文本传输协议(HTTP,HyperText Transfer Protocol)主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。

当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的,整个过程如下图所示。

HTTP请求过程

https://www.seobility.net/en/wiki/HTTP_headers

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

另外, HTTP 协议是”无状态”的协议,它无法记录客户端用户的状态 一般我们都是通过 Session 来记录客户端用户的状态如何判断邮箱是真正存在的?。

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

面试官:SMTP 协议了解吗?

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

注意 :接受邮件的协议不是 SMTP 而是 POP3 协议。

SMTP 协议这块涉及的内容比较多,下面这两个问题比较重要:

  • 电子邮件的发送过程
  • 如何判断邮箱是真正存在的?

电子邮件的发送过程?

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

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

一个电子邮件被发送的过程

https://www.campaignmonitor.com/resources/knowledge-base/what-is-the-code-that-makes-bcc-or-cc-operate-in-an-email/

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

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

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

推荐几个在线邮箱是否有效检测工具:

  • https://verify-email.org/
  • http://tool.chacuo.net/mailverify
  • https://www.emailcamel.com/

POP3/IMAP:邮件接收的协议

面试官:POP3/IMAP 协议了解吗?

大白:巴拉巴拉说了一大堆。。。

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

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

FTP:文件传输协议

面试官:应用层文件传输使用的是什么协议?

大白:文件传输协议 FTP(File Transfer Protocol)

面试官:可以简单介绍一下吗?

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

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

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

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

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

FTP工作过程

DNS:域名系统

面试官:域名是是如何被解析为 IP 地址的?

大白:域名系统(DNS,Domain Name System)将人类可读的域名 (例如,www.baidu.com) 转换为机器可读的 IP 地址 (例如,220.181.38.148)。 我们可以将其理解为专为互联网设计的电话薄。

dns-overview

IP 地址是一个网卡再网络世界中的通讯地址,我们可以把它理解为我们现实世界中的家庭地址。

DNS 解析的完整流程是怎样的呢? (这个会在后面的文章中详细介绍到)

DNS 解析的完整流程

https://aws.amazon.com/cn/route53/what-is-dns/

Telnet:远程登录协议

面试官:远程登录协议了解吗?

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

SSH:安全的网络传输协议

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

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

3传输层(Transport layer)

面试官:好了!看来你小子没少花时间准备啊!我们再来看看传输层吧!

面试官:你先说说传输层主要做了什么工作吧?

大白: 传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务。 应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。

运输层主要使用以下两种协议:

  • 传输控制协议 TCP(Transmisson Control Protocol)--提供面向连接的,可靠的数据传输服务。
  • 用户数据协议 UDP(User Datagram Protocol)--提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

transport-layer

大白:关于 TCP 和 UDP 的详细介绍咱们会在后面的文章中介绍到。

4网络层(Network layer)

面试官:好家伙!TCP 和 UDP 还要留一手是吧?

大白:不急嘛!我们先把网络层聊完(反客为主)。

大白:网络层负责为分组交换网上的不同主机提供通信服务。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报,简称数据报。

注意 ??:不要把运输层的“用户数据报 UDP”和网络层的“IP 数据报”弄混。

网络层的还有一个任务就是选择合适的路由,使源主机运输层所传下来的分株,能通过网络层中的路由器找到目的主机。

这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称.

互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP 层。

nerwork-layer

面试官:那我挑几个比较重要的协议,你给介绍一下呗!大白。

IP:网际协议

面试官:IP 协议了解么?

大白:网际协议 IP 是 TCP/IP 协议中最重要的协议之一,也是网络层最重要的协议之一,IP 协议的作用包括寻址规约、定义数据包的格式等等,是网络层信息传输的主力协议。目前 IP 协议主要分为两种,一种是过去的 IPv4,另一种是较新的 IPv6,目前这两种协议都在使用,但后者已经被提议来取代前者。

大白:关于 IP 协议的详细介绍咱们会在后面的文章中介绍到。

ARP:地址解析协议

面试官:ARP 协议呢?

大白:ARP 协议,全称地址解析协议(Address Resolution Protocol),它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。

大白:关于 ARP 协议的详细介绍咱们会在后面的文章中介绍到。

NAT:网络地址转换协议

面试官:哎呦!有点东西!再说说 NAT 协议吧!

大白:NAT 协议(Network Address Translation)的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(WAN)中,需要一个统一的 IP 地址来标识该 LAN 在整个 Internet 上的位置。

大白:关于 NAT 协议的详细介绍咱们会在后面的文章中介绍到。

5网络接口层(Network interface layer)

面试官:网络接口层呢?

大白:我们可以把网络接口层看作是数据链路层和物理层的合体。

  • 数据链路层(data link layer)通常简称为链路层( 两台主机之间的数据传输,总是在一段一段的链路上传送的)。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
  • 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

network-interface-layer

最后再分享一个关于 OSI 七层模型非常不错的总结图片!

https://wsgzao.github.io/post/osi/

6总结

下面大白带大家简单总结一下每一层包含的协议和核心技术:

network-protocol-overview

应用层协议 :

  • HTTP 协议(超文本传输协议,网页浏览常用的协议)
  • DHCP 协议(动态主机配置)
  • DNS 系统原理(域名系统)
  • FTP 协议(文件传输协议)
  • Telnet 协议(远程登陆协议)
  • 电子邮件协议等(SMTP、POP3、IMAP)
  • ......

传输层协议 :

  • TCP 协议
    • 报文段结构
    • 可靠数据传输
    • 流量控制
    • 拥塞控制
  • UDP 协议
  • 报文段结构
  • RDT(可靠数据传输协议)

网络层协议 :

  • IP 协议(TCP/IP 协议的基础,分为 IPv4 和 IPv6)
  • ARP 协议(地址解析协议,用于解析 IP 地址和 MAC 地址之间的映射)
  • ICMP 协议(控制报文协议,用于发送控制消息)
  • NAT 协议(网络地址转换协议)
  • RIP 协议、OSPF 协议、BGP 协议(路由选择协议)
  • ......

网络接口层 :

 

  • 差错检测技术
  • 多路访问协议(信道复用技术)
  • CSMA/CD 协议
  • MAC 协议
  • 以太网技术
  • ......

 

责任编辑:武晓燕 来源: CS指南
相关推荐

2023-09-02 21:44:24

TCP/IP通信协议

2022-01-05 21:54:51

网络分层系统

2022-03-30 10:10:17

字节码栈空间

2010-06-13 13:39:46

TCP IP协议栈

2010-09-27 13:25:58

TCP IP协议栈

2022-10-19 14:08:42

SYNTCP报文

2019-09-30 09:41:04

五层协议OSITCP

2020-09-07 06:38:54

HA高可用协议

2022-12-02 13:49:41

2022-02-20 09:56:28

TCPIP网络协议

2019-01-18 16:39:08

系统层中间件层应用层

2022-08-13 12:07:14

URLHTTP加密

2024-09-19 08:51:01

HTTP解密截取

2022-10-10 08:13:16

递归通用代码

2024-11-26 08:52:34

SQL优化Kafka

2020-08-06 00:41:17

TCPIP网络协议

2020-12-15 06:54:02

带宽延时吞吐率

2017-05-23 16:13:45

2022-07-26 00:00:02

TCPUDPMAC

2021-10-29 21:26:39

前端引擎层类型
点赞
收藏

51CTO技术栈公众号