本文最后更新于2023年5月23日,已超过 1 年没更新!内容可能已失效,请自行测试。

OSI各层的结构与功能

OSI将计算机网络体系结构划分为七层

  • 物理层: 将数据转换为可通过物理介质传送的电子信号
  • 数据链路层: 决定访问网络介质的方式
  • 网络层: 使用权数据路由经过大型网络
  • 传输层: 提供终端到终端的可靠连接
  • 会话层: 允许用户使用简单易记的名称建立连接
  • 表示层: 协商数据交换格式
  • 应用层: 用户的应用程序和网络之间的接口

学习计算机网络时一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚.

应用层

应用层的任务:通过应用进程间的交互来完成特定网络应用.

应用层协议定义的是应用进程间的通信和交互的规则.

对于不同的网络应用需要不同的应用层协议.在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等.

我们把应用层交互的数据单元称为报文

域名系统(DNS)

域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(百度百科)例如:一个公司的Web网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名,类似的还有:IBM公司的域名是www.ibm.com、Oracle公司的域名是www.oracle.com、Cisco公司的域名是www.cisco.com等。

万维网(HTTP协议)

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。(百度百科)

运输层

运输层的任务:负责向两台主机进程之间的通信提供通用的数据传输服务.

应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务.

由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能.所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程.

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

  1. 传输控制协议TCP--提供面向连接的,可靠的数据传输服务
  2. 用户数据协议UDP--提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性

TCP的主要特点

  • TCP是面向连接的
    • 比如打电话,通话前需要先拨号建立连接,通话结束后要挂机释放连接
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
  • TCP提供可靠交付的服务
    • 通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达
  • TCP提供全双工通信
    • TCP允许通信双方的应用进程在任何时候都能发送数据.
    • TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据.
  • 面向字节流
    • TCP中的“流”指的是流入进程或从进程流出的字节序列.
    • “面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流

UDP的主要特点

  • UDP是无连接的
  • UDP尽最大努力交付,不保证可靠交付,主机不需要维持复杂的链接状态
  • UDP是面向报文的
  • UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • UDP支持一对一、一对多、多对一和多对多的交互通信
  • UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短

TCP/UDP协议的区别

网络层

网络层(network layer)负责为分组交换网上的不同主机提供通信服务.

在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送.

在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报

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

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

数据链路层

数据链路层通常简称为链路层,两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议.

在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装程帧,在两个相邻节点间的链路上传送帧.每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等).

在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束.这样一来,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层.控制信息还使接收端能够检测到所收到的帧中有误差错.如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源.如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错.这种方法会使链路层的协议复杂些。

物理层

在物理层上所传送的数据单位是比特

物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异.使其上面的数据链路层不必考虑网络的具体传输介质是什么.

下面一张七层体系结构图总结一下

图片来源: https://blog.csdn.net/yaopeng_2005/article/details/7064869

TCP三次握手与四次挥手

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

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

为什么要三次握手

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

第一次握手:Client什么都不能确认;Server确认了对方发送正常

第二次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己接收正常,对方发送正常

第三次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送、接收正常,对方发送接收正常

为什么要传回syn

接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

传了SYN,为啥还要传ACK

双方通信无误必须是两者互相发送信息都无误.传了SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要ACK信号来进行验证.

断开一个TCP连接则需要“四次挥手”

  • 客户端-发送一个FIN,用来关闭客户端到服务器的数据传送
  • 服务器-收到这个FIN,它发回一个ACK,确认序号为收到的序号加1.
  • 服务器-关闭与客户端的连接,发送一个FIN给客户端
  • 客户端-发回ACK报文确认,并将确认序号设置为收到序号加1

为什么要四次挥手

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

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

彻底明白TCP的三次握手与四次挥手

TCP协议的可靠传输

  • 应用数据被分割成TCP认为最适合发送的数据块
  • 超时重传
    • 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段.如果不能及时收到一个确认,将重发这个报文段。
  • TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层.
  • 校验和:
    • TCP将保持它首部和数据的检验和.
    • 这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化.如果收到的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段.
  • TCP的接收端会丢弃重复的数据
  • 流量控制:
    • TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据.
    • 当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失.
    • TCP使用的流量控制协议是可变大小的滑动窗口协议.
  • 拥塞控制
    • 当网络拥塞时,减少数据的发送
  • 停止等待ARQ协议
    • 它的基本原理就是每发完一个分组就停止发送,等待对方确认,在收到确认后再发下一个分组.

输入URL ->> 显示页面的过程

打开一个网页,整个过程会使用哪些协议?

图片来源:《图解HTTP》

状态码

各种协议与HTTP协议之间的关系

一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。

图片来源:《图解HTTP》

HTTP长连接、短连接

在HTTP/1.0中默认使用短连接.也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接.当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话.

而从HTTP/1.1起,默认使用长连接,用以保持连接特性.使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接.Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间.实现长连接需要客户端和服务端都支持长连接.

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

写在最后

计算机网络常见问题回顾

  • ①TCP三次握手和四次挥手、
  • ②在浏览器中输入url地址->>显示主页的过程
  • ③HTTP和HTTPS的区别
  • ④TCP、UDP协议的区别
  • ⑤常见的状态码。

建议

非常推荐大家看一下 《图解HTTP》 这本书,这本书页数不多,但是内容很是充实,不管是用来系统的掌握网络方面的一些知识还是说纯粹为了应付面试都有很大帮助.下面的一些文章只是参考.

参考:

《计算机网络第七版》(谢希仁编著)

https://blog.csdn.net/qq_16209077/article/details/52718250

https://blog.csdn.net/zixiaomuwu/article/details/60965466

=

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。