【面试】计算机网络总结1(OSI七层协议+TCP与UDP简介)

点击查看其他内容:

【面试】计算机网络总结1(OSI七层协议+TCP与UDP简介)

【面试】计算机网络总结2(TCP的三次握手与四次挥手)

【面试】计算机网络总结3(TCP的滑动窗口机制+拥塞处理)


1 OSI七层协议模型、TCP/IP四层模型

1.1 TCP/IP

 1.2 TCP/IP 与 HTTP

1.3 TCP协议与UDP协议

2 传输层协议

2.1 UDP协议

2.1.1 UDP概述

2.1.2 UDP的首部格式

2.1.3 UDP如何实现可靠传输

2.2 TCP协议

2.2.1 TCP的特点

2.2.2 TCP的连接

2.3 TCP与UDP对比

2.3.1TCP和UDP应用场景:

2.3.2 TCP与UDP的区别:


1 OSI七层协议模型、TCP/IP四层模型

应用层

任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义应用进程间通信和交互的规则。常见的协议有HTTP协议和FTP等。交互的数据单元为报文(message)

表示层

 

会话层

用于建立和拆除会话

传输层

负责将来自会话层的消息传递给网络层(对两个主机之间的通信提供通用的数据传输服务。)常见的协议有传输控制协议TCP、用户数据报UDP协议。

网络层

为不同主机提供通信服务。把运输层产生的报文段或者用户数据报封装成分组或包(packet)——IP数据报,进行传送。②选择合适的路由,使传输层的分组能通过路由器找到目的主机。IP、ICPM、ARP等

数据链路层

将IP数据报组装成帧,在两个相邻结点间的链路上传送帧。 每一帧包括数据和必要的控制信息(同步信息、地址信息、差错控制等)

物理层

规定一些机电性能,也包括工作方式如双工、单工或半双工,建立通信的启动和终止等

这七层模型是设计层面的概念,每一层都有固定要完成的职责和功能,分层的好处在于清晰和功能独立性,但分层过多会使层次变的更加复杂,虽然不需要实现本层的功能,但是也需要构造本层的上下文,空耗系统资源,所以在落地实施网络通信模型的时候将这七层模型简化合并为四层模型分别是应用层、传输层、网络层、网络接口层(数据链路层)(各层之间的模型、协议统称为:TCP/IP协议簇)。

1.1 TCP/IP

TCP/IP的模型的每一层都需要下一层所提供的协议来完成自己的目的。我们来看下数据是怎么通过TCP/IP协议模型从一台主机发送到另一台主机的。

 1.2 TCP/IP 与 HTTP

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP 协议不仅仅指的是 TCP  和 IP 两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

而HTTP是应用层协议,主要解决如何包装数据。

“IP”代表网际协议,TCP 和 UDP 使用该协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。

 

TCP

UDP

连接性

面向连接

面向非连接

传输可靠性

可靠

不可靠

报文

面向字节流

面向报文

效率

传输效率低

传输效率高

流量控制

滑动窗口

拥塞控制

慢开始、拥塞避免、快重传、快恢复

传输速度

应用场合

对效率要求低,对准确性要求高或要求有连接的场景

对效率要求高,对准确性要求低

1.3 TCP协议与UDP协议

1) TCP/IP协议的两个主要协议都是因特网的正式标准,即:

①用户数据报协议UDP(User Datagram Protocol) 【RFC 768】

②传输控制协议TCP(Transmission Control Protocol) 【RFC 793】

2)依照OSI术语,两个对等传输实体在通信中传送的数据单位叫做传输协议数据单元TPDU(Transport Protocol Data Unit)。

在传输层协议中,即为TCP报文段或UDP用户数据报。

3)UDP在传输之前不需要先建立连接。原地主机的传输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。

4)TCP则提供面向连接的服务。在传送数据之前,必须先要建立连接,数据传送结束之后要释放连接。TCP不提供广播或多播服务。

5)TCP/IP的传输层用一个16位端口号来标志一个端口。但端口号只具有本地意义,只是为了标志本计算机应用层中的各个进程在和传输层交互时的层间接口。

传输层使用的端口号分为两类:

①服务器端使用的端口号。

此处又分为两类,最重要的一类是熟知端口号或系统端口号,数值为0~1023。IANA把这些端口号指派给了TCP/IP最重要的一些应用程序。

如:

应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap)
熟知端口号 21 23 25 53 69 80 161 162

另一类叫做登记端口号,数值为1024~49151。是为没有熟知端口号的应用程序使用的。这类端口号必须在IANA按照规定的手续登记,以防止重复。

②客户端使用的端口号

数值为49152~65535。是留给客户进程选择暂时使用。通信结束后,这个端口号就可以供其他客户进程使用。

2 传输层协议

2.1 UDP协议

2.1.1 UDP概述

(1)UDP在IP的基础上,只增加了 复用、分用的功能以及差错检测的功能。

(2)UDP的主要特点:

①UDP是无连接的。

即发送数据之前不需要建立连接,因此减少了开销与发送数据之前的时延。

②UDP使用尽最大努力交付。

即不保证可靠交付。

③UDP是面向报文的。

UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。即应用层交给UDP多长的报文,UDP就照样发送。因此,应用程序必须选择合适大小的报文。

④UDP没有阻塞控制。

因此网络出现的阻塞不会使源主机的发送速率降低。(适合一些实时应用,允许在网络发生拥塞时丢失一些数据,但不允许数据有太大的时延。)

⑤UDP支持一对一、一对多、多对一和多对多的交互通信。

⑥UDP的首部开销小。

只有8个字节,比TCP的20个字节的首部短很多。

2.1.2 UDP的首部格式

用户数据报UDP有两个字段:数据字段和首部字段。

首部字段只有8个字节。由四个字段组成,每个字段的长度都是两个字节。

(1)源端口:源端口号。在需要对方回信时选用,不需要时可用全0.

(2)目的端口:目的端口号。这在终点交付报文时必须使用到。

(3)长度:UDP用户数据报的长度,其最小值是8(仅有首部)。

(4)检验和:检验UDP用户数据报在传输中是否有错。有错就丢弃。 

若接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。

2.1.3 UDP如何实现可靠传输

增加确认和重传机制

拥塞控制

流量控制

谷歌Chrome浏览器使用的的QUIC协议在UDP之上的应用层协议中实现了可靠性

2.2 TCP协议

2.2.1 TCP的特点

①TCP是面向连接的传输层协议。

即应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP协议。

②每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的。(一对一的)

③TCP提供可靠交付的服务。

通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。

④TCP提供全双工通信。

TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

⑤面向字节流。

TCP中的流指的是 流入到进程或从进程流出的字节序列。

“面向字节流”的含义为:虽然应用程序和TCP的交互是一次一个数据块。但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP并不知道所传送的字节流的真实含义。

2.2.2 TCP的连接

(1)TCP把连接作为最基本的抽象。

(2)每一条TCP连接有两个端点。(唯一的被通信两端的两个端点——即套接字 所确定。)

(3)TCP连接的端点叫做套接字(socket)或插口。

端口号拼接到IP地址即构成了套接字。

套接字socket = (IP地址:端口号)

(4)TCP连接 ::={socket1 , socket2 } = { ( IP1:port1 ) , ( IP2:port2 ) }

(5)同一个IP地址可以有多个不同的TCP连接。 同一个端口号也可以出现在多个不同的TCP连接中。

2.3 TCP与UDP对比

2.3.1TCP和UDP应用场景:

由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
①FTP 文件传输
②HTTP /  HTTPS

由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:
①包总量较少的通信,如  DNS 、 SNMP 等
②视频、音频等多媒体通信
③广播通信

2.3.2 TCP与UDP的区别:

1. 连接
TCP 是面向连接的传输层协议,传输数据前先要建立连接。
UDP 是不需要连接,即刻传输数据。

2. 服务对象
TCP 是一对一的两点服务,即一条连接只有两个端点。
UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性
TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
UDP 是尽最大努力交付,不保证可靠交付数据。

4. 拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销
TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是  20 个字节,如果使用了「选项」字段则会变长的。
UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式
TCP 是流式传输,没有边界,但保证顺序和可靠。
UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同
TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层,但是如果中途丢了一个分片,则就需要重传所有的数据包,这样传输效率非常差,所以通常 UDP 的报文应该小于 MTU。

为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?

原因是 TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的,无需多一个字段去记录UDP 的首部长度。

为什么 UDP 头部有「包长度」字段,而 TCP 头部则没有「包长度」字段呢?

先说说 TCP 是如何计算负载数据长度:

其中 IP 总长度 和 IP 首部长度,在 IP 首部格式是已知的。TCP 首部长度,则是在 TCP 首部格式已知的,所以就可以求得 TCP 数据的长度。

大家这时就奇怪了问:“ UDP 也是基于 IP 层的呀,那 UDP 的数据长度也可以通过这个公式计算呀?为何还要有「包长度」呢?”

这么一问,确实感觉 UDP 「包长度」是冗余的。

因为为了网络设备硬件设计和处理方便,首部长度需要是  4 字节的整数倍。
如果去掉 UDP 「包长度」字段,那 UDP 首部长度就不是  4 字节的整数倍了,所以可能是为了补全 UDP 首部长度是  4 字节的整数倍,才补充了「包长度」字段。

在OSI七层模型中,每一层的协议数据单元格式分别为:

1.物理层----比特

2.数据链路层----帧

3.网络层-------包

4.传输层------段

5.会话层-----数据单元

6.表示层----数据单元

7.应用层----数据单元

2.3.3  TCP粘包问题

TCP是面向字节流的,而UDP是报文传输。

UDP报文中有个字段来记录UDP的长度因此在,应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。而TCP没有

TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块,但是 TCP 并没有把这些数据块区分边界,仅仅是一连串没有结构的字节流;另外从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段,

所以TCP可能会发生粘包问题,解决方法:

  • 消息定长:每次发送固定长度
  • 设置消息边界:回车符号是个边界
  • 将消息分为消息头和消息体: 消息头记录长度

注:文章内容来自谢希仁《计算机网络第六版》 与 微信公众号:小林coding图解系列 与 多来源 计网ppt

猜你喜欢

转载自blog.csdn.net/paranior/article/details/115112619