网络协议概述(网络层次结构、TCP、UDP)

您所在的位置:网站首页 谷歌网络协议有哪些 网络协议概述(网络层次结构、TCP、UDP)

网络协议概述(网络层次结构、TCP、UDP)

2023-11-07 13:45| 来源: 网络整理| 查看: 265

1.网络协议纵览

参考文章:http://www.cnblogs.com/syfwhu/p/5237652.html

网络协议

网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。

层次结构

由于网络节点之间联系的复杂性,在制定协议时,通常把复杂成分分解成一些简单成分,然后再将它们复合起来。最常用的复合技术就是层次方式,网络协议的层次结构如下: (1)结构中的每一层都规定有明确的服务及接口标准。 (2)把用户的应用程序作为最高层 (3)除了最高层外,中间的每一层都向上一层提供服务,同时又是下一层的用户。 (4)把物理通信线路作为最低层,它使用从最高层传送来的参数,是提供服务的基础。

在这里插入图片描述

计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。

更加详细的各层网络协议:

在这里插入图片描述

数据封装

在这里插入图片描述

数据解封

在这里插入图片描述

2.网络协议之TCP

参考文章:http://www.cnblogs.com/syfwhu/p/5143437.html

TCP

TCP作用:

当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。

因特网有两个核心协议:IP和TCP。IP(Internet Protocol)负责联网主机之间的路由选择和寻址;TCP(Transmission Control Protocol)负责在不可靠的传输信道之上提供可靠的抽象层。TCP向应用层隐藏了大多数网络通信的复杂细节,比如丢包重发、按序发送、拥塞控制、数据完整等。正如任何一种技术它越完善和强大,其性能损耗也就越大,TCP为了给信息传输提供可靠的方式做了很多工作,也就造成了一定的性能瓶颈,下面就具体的讲解一下TCP的原理及思想。

一个完整的TCP数据包的结构如下所示:

在这里插入图片描述

连接建立和断开

所有TCP连接的建立都要进行三次握手,因为在交换应用数据之前,客户端和服务器需要约定分组序列号及协商其他相关信息。出于安全考虑,序列号由两端随机生成。三次握手过程如下图:

在这里插入图片描述

TCP快速打开:在某些条件下,允许第一个SYN分组中带有应用程序数据。这就使得在传输小文件时,减少了新建TCP连接带来的性能损失,因为它在第一次发送分组时携带了应用数据,可以一定程度上降低HTPP事物网络延时。

虽然建立一个连接需要三次握手,而断开一个连接需要四次握手才可以完成,这是由TCP的半关闭造成的。其大致过程入下所示:

在这里插入图片描述

(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。 (2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。 注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。 (3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。 (4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

拥塞预防及控制:

TCP在不可靠的网络环境上提供了可靠的信息传输方式,为此它加入了很多机制,如流量控制、拥塞控制和拥塞预防等。

选择性应答:

TCP通信时,如果发送序列中间某个数据包丢失,TCP会通过重传最后确认的包开始的后续包,这样原先已经正确传输的包也可能重复发送,急剧降低了TCP性能。为改善这种情况,发展出SACK(Selective Acknowledgment, 选择性确认)技术,使TCP只重新发送丢失的包,不用发送后续所有的包,而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据重发了,哪些数据已经提前收到等。SACK是TCP中的一个可选特性,要想启用需要自己打开设置。

TCP的不足——队首阻塞:

TCP在不可靠的信道上进行可靠地传输,隐藏了很多网络底层的细节,极大的方便了工程人员的使用。任何事物都有其利弊,TCP也不例外,在某些场景下也是有极大限制的,

由于TCP是有序交付的,每个分组都会有一个唯一的序列号,需要按照顺序传递到接收端,接收端也需要接受到所有分组后才能处理所受到的信息。如果中间某一个分组没能被接收到,其他分组需要存储在缓冲区,需要等待接收到重发的分组后才能处理。

TCP的按序交付和分组重排使得应用程序不再关心底层细节,使得开发更为方便。但在实时性要求较高的场景下,可能有些应用对有序交付和可靠性要求并不高,使用TCP就会造成很大的延时。而且由于分组到达接收端会存在一定的不确定性,使得传输时间也变得不确定,这个时间变化称之为抖动。

能够容忍和自行处理包的乱序或者丢包的应用,或者对延迟和抖动敏感的应用,可以考虑另外一个选择:UDP。

3.网络协议之UDP

参考文章:http://www.cnblogs.com/syfwhu/p/5226483.html

TCP协议在不可靠的网络环境上提供了可靠的通信通道,隐藏了大量的底层细节,使应用程序更加简洁。但有些应用并不需要这么高的可靠性,并不需要按序交付,而且TCP为了提高可靠性也增加了延时,在某些对延时或抖动要求很高的情景下并不适用。为此,UDP(User Datagram Protocol,用户数据报协议)被提出。UDP虽然应用较为广泛,比如DNS查询等,但一直不是重要的角色。自从WebRTC被提出以来,它可以使浏览器在UDP的基础上实现原生的语音和视频实时通信及其他形式的P2P通信,UDP在这种境况下显得更加重要。本文大致介绍UDP的原理及应用,以求加深对其理解。

UDP

TCP是面向连接的,需要三次握手建立连接之后再传输数据,而是UDP面向无连接的,它并不能保证信息交付,也不能保证按序交互,也不跟踪连接状态,也不需要拥塞控制。

要了解UDP和为什么它通常被称为“空协议”,我们首先需要了解一下互联网协议(IP),它位于TCP和UDP协议层下面。IP层主要任务就是基于地址将数据报从源主机发送到目的主机。要做到这一点,消息都封装在一个IP包,标识源和目的地址,以及一些其他路由参数。

IPv4的首部结构如下:

在这里插入图片描述

UDP协议会用自己的分组结构封装用户信息,其数据格式如下:

在这里插入图片描述

如上图所示,我们在UDP数据报里增加了源端口和目标端口,这样就使得当IP分组被送到接收端后,接收端就可以拆开UDP分组,根据目标端口找到对应的应用程序,然后再把数据传递给应用程序。

从IP和UDP的数据格式可以看到,它们的首部都带有校验和,都可以用来校验数据,那么应用程序即使忽略UDP的校验和也不影响数据完整性,校验和字段是可选的。这意味着UDP层所有的错误检测和纠错,可以委托给上述应用层校验。说到底,UDP仅仅是在IP层上通过嵌入应用程序的源端口和目标端口,提供了一个“应用程序多路复用”机制。由此可以得到UDP的特征如下:

不保证消息交付:不确认,不重传,无超时;不保证交付顺序:不设置包序号,不重排,不发生队首阻塞;不跟踪连接状态:不必建立连接或重启状态机;不需要拥塞控制:不内置客户端或网络反馈机。

TCP是一个面向字节流的协议,能够通过多个分组的形式发送应用程序的消息数据,包内本身没有任何明确的消息边界。为了实现这一目标,连接两端都分配了连接状态,并且数据包被排序,重发丢包,按顺序发送。相反UDP数据报有明确的界限:每一个数据报都被打包到一个IP包中,应用层读到的每一个UDP包都是完整的信息 - 数据报不能被分割。

关于数据报(Datagram)详细定义如下:

数据报:一个自包含的,独立的数据实体,其承载了足够的信息,使其可以从源路由到达目标路由,而不依赖于在网络节点前的数据交换和传输网络没有任何依赖。

数据报文(Datagram)和数据包(Packet)两个术语往交替使用,但其实二者有一些细微差别。数据包(packet)一般用来描述任何格式的数据块,而数据报(Datagram)往往被保留用来描述通过一个不可靠的服务传输的数据包(Packet) - 没有传输保障,没有失败通知。所以UDP包一般或者说更准确的被称为数据报(Datagram)。

UDP是一个简单的,无状态的协议,适合于引导上层的其他应用层协议 - 几乎所有的协议决策都留给它上面的应用层。然而,在你想实现自己的协议来取代TCP,你应该仔细考虑有关的复杂性,如UDP与其它层的交互(比如NAT穿越),以及网络协议一些最佳实践。没有仔细的规划和设计,设计一个新的协议不是一个好主意,最终也许实现成一个的简陋的TCP版本。关于传输UDP时遇到的NAT穿透问题,将在下篇文章中讲述。

4.网络协议之NAT穿透

详情可以参考:http://www.cnblogs.com/syfwhu/p/5229020.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3