(一)Java网络编程之计网基础TCPIP协议簇TCPUDP协议及腾讯QQ通信原理综述

先来看看维基百科对于计算机网络这个名词的解释:

计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。

简单来说,计算机网络就是用于满足不同机器之间通信、共享的一种系统。

在internetwork项目的研发过程中,1974年,RobertE.Kahn以及VintonG.Cerf两位教授正式提出了新的传输协议:TCP/IP协议,用于满足不同计算机网络之间的互联通信,ARPA到1982年接受TCP/IP选定为Internet主要的计算机通信系统,作为因特网通信的“基石”。

从组成上而言,计算机网络主要由主机、协议、传输介质以及软件四部分组成。

计算机网络体系主要提供的两个核心功能就在于:

资源子网以及通信子网也对应着OSI中的上三层和下三层。

不过如果学习过计算机网络课程的小伙伴应该都知道,其实计算机网络是一个复杂而庞大的系统,由软件、驱动、硬件、线路等多部门共同组成,但对于这些理论性内容不再阐述,有兴趣的可以自行了解。

计算机网络是个非常复杂的系统,由于最初各个计算机网络体系结构不同,导致双方网络之间无法互通,因此,20世纪90年代,ISO国际标准化推出了OSI模型打算制定计算机网络体系标准。

简单来说就类似于国内的普通话,因为不同省份的方言不同,导致不同地方的人交流起来并不方便,因此定义了“普通话”这一标准,所有人都遵循该标准进行交流沟通。

但由ISO组织制定的OSI网络七层模型结构并没有得到广泛应用,实际中应用最广泛的是TCP/IP体系结构。换句话说,OSI七层模型只是理论上官方制定的国际标准,而TCP/IP体系结构才是事实上的国际标准。

PS:国际标准化组织提出的OSI模型未得到广泛应用的原因:①制定时太过理想化,未考虑实际的应用场景。②拆分过于精细化,实现起来过于复杂,运行效率并不高。③OSI体系的制定周期过长,导致按其标准生产的设备无法及时投入市场抢占份额。④OSI体系因为分层过多,设计也不合理,有些相同的功能在多个层次重复出现。

但因为TCP/IP体系中的最后一层没有制定规范的标准,所以对于学习计算机网络完善体系时会缺失一部分,所以又提出了一种折中方案,也就是综合OSI以及TCP/IP两个体系的优缺点,提出了一种五层结构的原理体系,因此在接触计算机网络体系时,通常都会存在三种分层结构:

计算机网络体系采用的是分层结构,每个层次之间互不干扰,上层不需要关心下层的具体实现,下层只需要为上层提供服务即可。

在ISO组织定义的国际标准OSI模型中,是七层网络模型。在实际应用最广泛的TCP/IP模型中,是四层网络模型。当然,在计算机网络教学中,也提出了五层网络模型。

但无论多少层网络模型,其实本质上都是在叙述相同的内容,只不过拆分的精细度不同而已,三种网络模型对应如下:

OSI七层网络模型中,每层的功能如下:

在TCP/IP体系中,将原本OSI体系中的应用层、表示层、会话层合并为了应用层,将数据链路层和物理层合并为了数据链路层,因此TCP/IP体系中只存在四层结构。

注意点:在最初因为技术问题,因此数据传输必须建立在物理实体介质的基础之上,但如今无线电的电磁波技术也可以做到利用空气作为介质,从而达到传输数据的目的。

在OSI分层体系中,上三层:应用层、表示层、会话层组成资源子网,下三层:网络层、数据链路层、物理层组成通信子网。

在网络通信中,通信双方都必须是对等的,并且双方都遵守相同协议的,这样才可通信。好比举个例子:

而在计算机网络中,当两台机器进行通信时,其过程主要包含数据的封装与解封:

如上图,左侧是发送端,右侧是接收端,当发送端的应用尝试传输一条数据时,数据会根据网络分层结构,从上至下依次封装,每层都对数据做一定的处理,最后在物理层转换为比特流(二进制数据),然后传输至接收端。因为双方之间遵守的都是相同的协议体系(网络模型),因此接收端会首先接收到比特流数据,然后从下至上依次解封数据,最终在应用层还原数据,从而达到通信的目的。

TCP/IP应该是计算机网络中听的次数最多的词汇,但它并非单纯的指TCP和IP两个协议,而是一组协议的代名词,指由许许多多的网络协议一同组成的“协议簇”,TCP/IP协议簇主要组成如下:

除开最常见的TCP/IP协议簇外,还有一些其他的协议组,如IPX/SPX、NetBEUI、AppleTalk等协议组。

前面的叙述中,更偏向于“空中楼阁”般的理论概念,比较生涩难懂,接下来我们以实际的TCP/IP协议出发,再对计算机网络更进一步阐述。

TCP/IP通信协议是最完整、使用最广泛的网络协议体系,它的魅力在于可使不同硬件结构,不同操作系统的计算机相互通信,通信协议中定义多方之间发送/接收的报文格式、顺序以及规则,其中语法定义了传输的报文格式,语义定义了报文传输规则,时序定义了报文传输顺序,计算机通信的本质就在于信息报文的相互交换。

计算机网络体系中,不同节点通信时交换的信息报文被称为协议数据单元(PDU),PDU主要由协议头信息+数据(SDU)组成,数据是指发送端需要传输给接收端的信息,而协议头信息中,则包含了完成传输所需的控制信息,如地址、长度、序号、分段标识、差错控制信息等。

基于TCP/IP体系而言,PDU在不同层存在不同的称呼,如下图:

就目前而言,前面的阐述中已经将计算机网络中最常见的OSI、TCP/IP体系简单介绍明白了,但对于这些体系中,不同层的具体作用却并没有进行探讨。因此,接下来我们从自己设计一个计算机网络体系的角度出发,分别来探讨网络分层的必要性与每个分层的具体含义。

先来看最简单的通信模型:

如上图,两台电脑之间通物理媒体连接,互相传递信息,从而达到通信的目的。

在这种最简单的直连通信模型中,想要实现双方之间的通信,那应该考虑如下几个问题:

对于如上问题,我们可以将其全部归纳到“物理层”来解决,在该层中定义标准规范。

简单来说,物理层主要任务是负责在介质上正确的传送比特流,并规定物理接口的各种特性和物理设备的标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。

但一般现在不会存在直连型网络,常用的计算机网络都是由多台机器共同组成的,如下:

在这种总线连接的通信模型中,当一台主机,比如A向D发送数据时,数据会通过总线传输至总线上的所有主机,此时D如何知道该条数据是发给自己的呢?其他主机又如何区分数据不是发给自己的呢?因此,对于这种多台机器组成的网络模型而言,我们也需要解决一系列问题,如:

对于上述中的这些问题,可以全部划归到链路层处理。

因此可以得出,数据链路层主要任务是实现数据在不可靠的物理线路上的可靠传递,负责提供物理地址寻址、数据的成帧、流量控制、差错控制等功能,确保数据的可靠传输。

到目前为止,解决了物理层及链路层中的问题后,就可以实现数据在一个局域网络中的传输了。但实际每天都接触的因特网是由无数个小网络和路由器互连组成的,如下:

因此只解决前面所叙述的问题还是无法在庞大的计算机网络中实现通信,毕竟之前因为只有一个网络,所以不需要对网络进行标识。但在这种广域网模型中,会存在大大小小无数个局域网,所以想要从一台主机将数据传输给另一台主机时,此时又该如何精准定位到某个网络中的具体主机呢?因此又产生了一系列的问题需要加以解决:

而对于这些问题我们都可以划归到网络层处理。

所以,网络层主要负责将网络地址翻译成对应的物理地址,并通过路由选择算法为数据的传输选择最适当的路径。

路由选择:路由主要包括路由表和路由算法两个方面,网络层会根据速度、距离(步跳数)、价格及网络拥塞程度等因素,在路由表的多条通信路径中找一条最佳路径。

至此,如果解决了物理层、链路层及网络层的问题,数据就可以做到在不同的网络中进行通信。但这对于普通用户而言仍然不够,因为一台主机上会安装多个应用程序,好比:

因此还需要解决:

这些问题可以被划归到传输层加以解决。

基于OSI模型而言,上三层资源子网主要负责用户数据处理,下三层通信子网主要负责数据通信,而传输层位于OSI模型中的第四层,是资源子网与通信子网之间的桥梁,因此,无论是在OSI亦或TCP/IP体系中,传输层都是至关重要的一层。

传输层的主要功能是:提供端到端之间的传输机制以及提供差错效验和流量控制,保证报文的正确传输。在TCP/IP体系中,主要提供了两种传输服务:

TCP/IP体系中将资源子网都合并为了应用层,但在OSI模型中,资源子网是分为应用层、表示层、会话层三个层次的,也就是拆分粒度更精细化,服务也更为精细化。

主要负责应用层的用户数据处理,例如数据编/解码、数据的加密解密、数据压缩、数据格式处理等,其作用如其名,主要处理用户信息的表示问题。

会话层位于OSI模型的第五层,是用户应用程序和网络之间的接点,主要负责网络中的两节点间建立、管理和终止通信。会话层的功能涵盖:建立通信链接、保持会话过程、维持通信链接的畅通、同步节点间的对话信息、决定通信是否终止以及通信中断时决定从何处重新发送。

简单而言,应用层主要是为用户与网络之间,提供各类可“接触”的窗口。

与之前的OSI模型的通信过程相同,TCP/IP体系中,一端想往另一端传输数据时,数据也会经历封装与解封的过程,数据经过每一层时都会加入当前层的协议信息,从而形成本层的PDU,继而向下传递,直到最终被转换为比特流数据,通过传输介质转换为信号传输到另一端,另一端接收到之后则会依次解封数据,过程如下:

同比生活,也就是类似收发快递的过程:

前面更多的在叙述计算机网络的整体的结构,接下来则准备对计算机网络中几个常见的网络协议进行阐述,如IP、TCP、UDP等协议(HTTP、HTTPS放在下章讲解)。

当应用层的数据被封装后,想要将数据在网络上传输,数据究竟要被发往何处,又该如何精准的在网络上定位目标机器,此时起到关键作用的就是“IP协议”。IP协议的作用在于把各种数据包准确无误的传递给目标方,其中两个重要的条件是IP地址和MAC地址。其中IP地址就是所有主机在网络通信中的唯一标识,但由于IP地址是稀有资源,不可能每个主机都拥有一个IP地址,因此路由器里面会记录我们主机的MAC地址,通常的IP地址是路由器根据MAC地址生成的,而MAC地址是全球唯一的。

举例:IP地址就如同是物流线路上的驿站地址,而MAC地址就是具体货架上货物的位置。

之前的IP地址采用的IPv4格式,目前大部分主机都已向IPv6过渡。

IP地址一般由网络标识(NetID)和主机标识(HostID)两部分组成,其中网络标识对应着网络地址,表示其局域网属于互联网中的哪一个网络;主机标识对应着一台机器的主机地址,表示机器属于该局域网络中的哪一台主机。通常情况下,一个IP存在四组数字,每组数字对应着八位二进制数字(一个IP地址共计32Bit),每组之间分别用.隔开,其中不同类型的IP地址,表示网络标识和主机标识的数字段也不同,目前的IP地址主要可分为A、B、C、D、E五大类,如下:

A类地址由8位网络标识+24位主机标识组成,也就是之前的四组数字中,第一组表示网络地址,而后三组代表主机地址。网络地址的最高位,即首位必须为0,其中0和127都为保留位,因此A类IP的网络地址范围为1~126(1.0.0.0~126.0.0.0),也就代表着可用的A类网络有126个,每个网络中最大可容纳一千多万台主机(224-2)。

PS:为什么A类网络的地址范围是1~126呢?因为A类IP中用8bit表示网络标识,首位需要保留为0,因此剩下的7bit能够表示的最大数字为127,末位127也需保留,因此A类网络地址的取值范围为1~126。

示意图如下:

例如32.44.128.5这个地址,其中第一段代表网络地址,剩余三段表示网络中的主机地址。

B类地址由16位网络标识+16位主机标识组成,因此IP中第一段和第二段都为网络标识,其中前两位为保留位1、0,因此B类IP的网络地址取值范围为128~191(128.0.0.0~191.255.0.0),总计可用的B类网络数量为16382个,每个网络中可容纳6万多台主机(216-2)。B类IP组成示意图如下:

例如128.123.11.32这个地址,其中前两段为网络地址,后两段表示网络中的主机地址。

C类地址由24位网络标识+8位主机标识组成,也就是说,整个IP地址中,前三段都为网络地址,最后一段为主机地址。C类地址中,前三位都为保留位,即C类网络的最高位必须为1、1、0,因此C类网络地址的取值范围为192-223(192.0.0.0~223.255.255.0),粗略计算下来,C类网络的数量可达209万左右,每个网络中允许存在254台主机(28-2),组成示意如下:

如192.0.0.121这个IP,前三段为网络地址,最后一段则为网络中的主机地址。

D类和后续的E类属于特殊的IP地址,D类地址被称为广播或组播地址,其最高位必须是1、1、1、0,因此取值范围为224~239(224.0.0.0~239.255.255.255),如下:

E类地址则属于保留的地址,为以后接入更多的网络预留的IP,其最高位必须为1、1、1、1,即E类IP第一段的取值范围为240~255(240.0.0.255~239.255.255.254):

但255.255.255.255这个全1的IP属于特殊含义的地址,表示当前子网的广播地址,如同全0的IP:0.0.0.0代表本机地址一样,带有特殊的含义。

因不同类型的网络IP规模不同,所以它们也分别应用于不同的场景,如:

子网掩码又被称为网络掩码、地址掩码、子网络遮罩,它的作用主要有两个:

但默认的子网掩码值也并非都相同,不同的网络类型存在不同的默认掩码,如:

一个子网掩码决定着一个子网(独立的单个网络)内可容纳的主机数量,计算公式为:可容纳的主机数量=(2的n次方)-2。这个n可以理解为二进制掩码中0的数量,例如:

在中型企业中,经常会碰到一个问题,公司使用C类网,因此子网内可容纳的主机(电脑)数量为254台,但实际公司的电脑可能超出这个数量,如存在440台电脑,那此时如何更改路由器的设置可以让440台电脑同时上网呢?

,对于第一种方案需要增加经济成本,因此可以暂不考虑。来看看第二种方案,此时将子网掩码修改到多少合适呢?计算过程如下:

此时假设路由器的LAN口配置是197.118.0.1,那根据第一步计算出的网段数量,分配两个子网段,197.118.0.1~197.118.1.254即可满足需求,采用这种更改子网掩码的方式,就在不增加路由器的情况下,也能达成了为局域网增加可用IP数的需求。

最终可用IP范围为:197.118.0.1/23,可用IP地址共计510个。嗯?xxx/23是什么东东?其实这个值是子网掩码的简写方式,之前算出来的子网掩码为255.255.254.0,转换为二进制,一共存在23个1,因此可以简写为xxx/23。

两个IP处于同一网段的前提是:两个IP的网络标识必须一致,那如何计算网络地址呢?

网络地址=IP地址“位与”子网掩码。

如C类网197.118.0.198、197.118.1.114两个IP,子网掩码为255.255.254.0,如何计算网络地址?首先需要将掩码与IP全部都转换为二进制,如下:

首先将197.118.0.198网络部分(前三段)的二进制值同掩码进行位与运算,最终可以计算出:

11000101.01110110.00000000,转换为十进制为197.118.0。

紧接着再197.118.1.114网络部分的二进制值同子网掩码进行位与运算,计算结果:

最终可得到结果:197.118.0.198、197.118.1.114的网络地址都为197.118.0,代表着这两个IP处于同一个网段。

经过上述内容学习后,我们已经对IP协议中的IP组成、分类、计算等知识已经建立起了基础,接下来在重点看看IP协议的核心流程。IP协议核心主要包含IP寻址和路由控制。

前面曾提及:网络上任何一台主机都会存在自己的IP地址,那么当应用层数据被封装后,能够精准定位到目标主机的关键原因就在于IP,可以通过IP地址在网络中进行寻址,从而让数据到达目的主机。

但在实际的网络通信过程中,可能有时数据发送的链路非常遥远,如你从中国向日本网友发送一条数据,那么由于一些网络抖动、物理介质损坏都会导致数据丢失。但此时又该如何确保数据“安稳”到达目的地呢?

为了防止数据由于介质损坏或网络抖动等原因丢失,因此会在数据的传输链路中加入一些“中转站”,也就是所谓的“路由器”,一方面可以备份数据,查看数据是否丢失,如果丢失会重新发送,另一方面也可以控制数据的转发。当然,这个控制数据转发的过程也被称为“路由控制”。

正因为路由控制的存在,所以即使网络复杂多变,也能够通过路由器的控制将数据“安稳”送达至目的主机。

但因数据传输过程中,数据从发送方到接收方之间存在的链路是不可预估的,因此数据传输的链路上可能会分布很多路由器。本质上数据在链路中传输,就是一个个路由器相互之间交换数据报的过程,当然,这个过程也被称为“跳”。

跳:数据包经过一台路由器就是一跳。好比一个网络中存在四个路由器:A、B、C、D,如果局域网A中的主机要给局域网D中的主机发送数据,从理论上来说就会经过B、C、D三台路由器,也就是会经过三跳。

哪当数据到达某个路由器后,它如何知道“下一跳”该去往何处呢?此时中转的路由器就会解析收到的数据报,然后从中解析出IP数据报,然后查询自身的路由表,从而选择“下一跳”该走的路线,最终不断重复该过程直至数据到达目标主机。这种多次转发数据的过程也被称为“多跳路由”。

目前的网络几乎大部分还是基于IPv4版本,但同时大部分应用程序也开始支持IPv6,IPv6是“InternetProtocolVersion6(互联网协议第6版)”的缩写,是用于替代IPv4的下一代IP协议,也就是下一代互联网的协议。

IPv6相较于IPv4而言,主要不同点在于:

前述的IP协议分析都是基于IPv4版本而言的,因为目前主流的网络版本还是IPv4,但如今也逐步向IPv6过渡。

TCP(TransmissionControlProtocol)传输控制协议是面向连接的可靠传输协议,是位于传输层的核心协议之一,在不可靠的互联网络上,IP协议只提供了简单不可靠的包交换,但网络中不同主机之间经常需要一种可靠的、类似于管道一样的连接、流机制,去稳定传输一些数据,如视频、音频、图片等大文件数据。因此TCP应运而生,TCP协议是为了在不可靠的互联网络上提供可靠的端到端之间,字节流传输而专门设计的一个传输协议,TCP中采用字节流传输数据。

先来看看TCP的报文头结构:

TCP报文头结构中的各字段释义如下:

当数据接收完成后,TCP会用校验和函数来检验数据是否正确,在发送方和接收方都需要计算该值,发送方计算后会将该值放在TCP头中携带发送,接收方接收到数据后,也会再次计算该值,再与报文头中的值进行比对,确认数据的正确性。

由于TCP是基于管道连接式通信的协议,因此在数据传递之前,必须要先建立连接,当数据传输完毕后,也必须要关闭连接。因此,这就引出了面试过程中人尽皆知的问题:“为什么TCP是三次握手,四次挥手!”

想要了解清楚这个问题的答案,那么得先了解TCP建立与关闭连接的过程。

所谓的TCP三次握手,其实是指TCP建立连接的过程,因为TCP属于可靠性的传输协议,因此在发送数据前必须要先确保发送/接收数据的双方状态正常,因此需要经过“三次握手”的过程,具体如下:

经过如上三个步骤,客户端和服务端双方之间确认请求后,连接会成功建立,紧接着双方都会处于estab-lishen状态,数据可以正常传输。

当然,这个过程略微有些难理解,换个日常生活的例子来快速理解一遍!

当“三次握手”完成后,客户端和服务端之间会成功建立连接,从此开启双方端到端之间的数据传输,当一方数据传输完成后,会尝试中断连接,因此又会经历“四次挥手”的过程,如下:

前面提及过,因为TCP是双全工的协议,因此双方都可以主动释放连接,在TCP中,当一方数据传输完成后,就会主动关闭连接,也就会经历“挥手”的过程,同样我们也可以举个通俗一些的例子来认识这个过程:

三次握手是指TCP建立连接需要发送三个数据包,主要目的是在于:为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。

四次挥手是指TCP关闭连接时需要发送四个数据包,主要目的在于:当客户端发送完数据后,给服务端发送“我要关闭连接了”的请求,然后服务端告知客户端收到了“关闭请求”,但此时服务端会继续向客户端传输未发送的数据,客户端也照旧可以接收服务端的数据,直到服务端的数据传输完成后,服务端也会发出“关闭连接”的请求,客户端同意后,最终才会断开连接,从而保证数据正常可靠的交互。

本质上“三次握手与四次挥手”就是在指TCP建立与关闭连接的过程,搞明白建立和关闭连接的过程后再来看看最开始的问题:“为什么TCP是三次握手,四次挥手!”

因为建立连接“握手”时,当服务端接收到“客户端想与服务端建立连接”的请求后,可以立马返回“同意+与客户端建立连接”报文,客户端也确认建立连接后,就可以称为“握手完成”。但关闭连接时的“挥手”,因为一方数据传输完成后就会提出关闭连接,不过另外一方可能还依旧存在数据未发送完成,因此服务端就不能在“确认关闭”连接的时候,也同时发出“关闭连接”的请求,因为自己的数据还没发送完成呢,所以会等到自身的数据全部传输后,再主动向客户端发起一次“关闭连接”的请求,等待客户端“确认关闭”后,从而完成整个“挥手”动作。

要理解“TCP沾包”问题之前,首先要理解TCP传输数据的方式。TCP在传输数据时,会给每个分割后的报文段分配一个序号,接收方在收到数据后,会按照序号排好,然后将其放置在TCP缓冲区中。同时TCP为了提升传输速度,若连续几次发送的数据都很少,TCP会根据优化算法把多个数据合并成一个包发出。

沾包问题:多个数据包在一块儿,无法确定每个数据包之间的分割边界,因此从应用层的角度看来,就好像多个数据包“沾”在了一起。

对于TCP传输层而言,发送方和接收方都有可能造成数据沾包问题。

发送发导致的数据沾包问题:TCP为了优化传输速度,往往会等收集到足够多的数据后才发送一包数据,因此发送发传输的数据就出现了沾包问题。还有一种情况则是:当需要发送的数据大于MSS规定,那么TCP就会对数据包进行拆包,一个数据包会被分开传输,最终导致数据出现沾包问题。

接收方导致的数据沾包问题:TCP中,如果数据被接收后,应用程序没有及时读取缓冲区中的数据报文,就会导致缓冲区中堆积大量的报文数据。这种情况下,站在TCP层的角度而言,看到的是一个个的数据报文依次排列着,但对于应用层的程序来说,看到的就是一串连续的字节流数据,应用程序无法知道每个数据包之间的分割边界,站在应用层的角度来看,所有的数据包就好像都“沾”在一起了一样,应用程序根据预先设定好的大小从缓冲区中接收数据,最终会一次性读取到多包数据。

因为TCP既要保证可靠性,同时又要尽可能提高传输性能,所以整个TCP设计的尤为复杂,牵扯出的概念也很多,比如为了保证数据的可靠传输,TCP中提供的机制:

在确保了数据可靠传输的同时,TCP也提供了一堆机制尽可能提高数据传输性能:

同时,TCP协议中,每建立一条连接都会维持九个定时器,可以适当了解:

UDP(UserDatagramProtocol)协议是传输层的一个不可靠传输协议,它为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。在传输层中,与TCP协议互补,UDP除了给应用层提供了发送数据包的功能外,几乎没有做任何其他事情。而面向连接的TCP恰恰相反,几乎做了所有的事情。

刚刚提到过,UDP仅为应用层提供了发送数据报的功能,主要就是指UDP对IP协议的扩充:

接下来先看看UDP的报文头结构。

对比TCP复杂的报文头结构,UDP的头部就显得比较简单了,整个头共8字节:

UDP是一个无连接的协议,因此采用UDP传输协议的程序,在传递数据时,不会存在建立/释放连接的过程。当数据需要传输时,会对于应用层的数据简单的封装,也就是加上自己的UDP头后,直接会将数据丢给IP层,然后交由链路传输。

正因为如上特性,因此UDP的传输速度仅受到数据生成的速度、计算机算力和传输带宽的限制。

在接收端,UDP会把每个消息段放在队列/缓冲区中,程序每次从队列中读一个消息段。当然,接收端收到数据后,也会对数据做效验,但效验完成后,如若数据存在差错,那UDP只会单纯的丢弃该数据包,不会要求发送端重发数据。

由于UDP的不可靠传输,因此数据出现丢包是很常见的事情,一般UDP中造成数据丢包的原因主要如下:

这里面牵扯到很多原因,有历史原因,也综合考虑了服务器负载、网络复杂度、服务器数量/网络带宽成本问题、实现难度等多方面因素导致的。

由于UDP传输不可靠,因此腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包,通过这种方式来保证消息无遗漏的传输。

当A想要向B传输一个文件时,A首先会向服务器发出一个文件传输的请求,服务器接收到该请求后,会将其转发给B,同时会将A的临时IP发送给B,如果A、B两个客户端在同一内网,那么B会直接尝试连接A,从而达到文件传输的目的。但如若A、B并不在同一个局域网,那么A的文件传输操作就会由服务器进行文件中转,因为服务器具备公网IP,因此A、B两个客户端都可以连接到服务器,于是A、B最终就通过这种中转的方式顺利达成文件传输的目的。

大概过程如下:

如果NAT无法穿透,那则无法进行P2P通信,无法穿透的原因也可能由于地理位置、网络类型限制等多方面因素导致。

P2P通信翻译过来也就是端到端通信,在P2P模型中,服务器只作为客户端地址的中转站存在,不需要承担高昂的流量成本。

THE END
1.网络体系结构网络体系结构通常采用分层的模型来表示,每一层都建立在它的下层之上,并为上层提供服务。这种分层的方法简化了网络设计和实现的复杂性,使得不同的层次可以独立地发展和改进,而不需要对整个网络体系结构进行修改。 国际标准化组织(ISO)在1979年提出的开放系统互连(OSI-Open System Interconnection)的参考模型是广泛采用的https://blog.csdn.net/dhaimo/article/details/144049145
2.计算机网络体系结构163在计算机网络产生之初,每个计算机厂商都有一套自己的网络体系结构的概念,它们之间互不相容。为此,国际标准化组织(ISO)在1979年建立了一个分委员会来专门研究一种用于开放系统互联的体系结构(Open Systems Interconnection),简称OSI。“开放”这个词表示:只要遵循OSI标准,一个系统可以和位于世界上任何地方的、也遵循OSI标https://dy.163.com/v2/article/detail/DJ7V5ILM0518DF1M.html
3.计算机网络体系结构与参考模型两个系统中实体间的通信是一个很复杂的过程 ,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究 、实现和维护,促进标准化工作,通常对计算机网络的体系结构以分层的方式进行建模。 我们把计算机网络的各层及其协议的集合称为网络的体系结构 (Architecture ) 。换言之,计算机网络的体系结构就是这个计算机网络https://www.jianshu.com/p/d038469c84f9
4.27104信息网络化基础第一代网络,单计算机联机系统、多点通信线路、终端集中器和前端处理机。 1.1.2 计算机一计算机网络 第二代网络,通信子网、资源子网、公用数据通信网,现代计算机网络的典型特点。 1.1.3 体系结构标准化网络 第三代网络,开放系统互联参考模型。§1.2 计算机网络的概念计算机网络的定义。 http://www.jiangsuzikao.com/zkdg/21978.html
5.2019考研计算机学科专业基础综合考试大纲2019考研考研大纲计算机大纲一、计算机网络体系结构 (一)计算机网络概述 1。计算机网络的概念、组成与功能 2。计算机网络的分类 3。计算机网络的标准化工作及相关组织 (二)计算机网络体系结构与参考模型 1。计算机网络分层结构 2。计算机网络协议、接口、服务等概念 3.ISO/OSI参考模型和TCP/IP模型 https://edu.sina.com.cn/kaoyan/2018-09-15/doc-ihkahyhx2202042.shtml
6.计算机网络体系结构概述20240114170357.ppt计算机网络体系结构概述.ppt,1.2 网络互联协议 邮件发送之前必须协商好发送者、接收者。SMTP服务进程同意为接收方发送邮件时,它将邮件直接交给接收方用户或将邮件逐个经过网络连接器,直到邮件交给接收方用户。在邮件传输过程中,所经过的路由被记录下来。这样,当邮件不能https://max.book118.com/html/2024/0114/6012104021010034.shtm
7.IPv9到底是什么?为什么专家团队花二十多年研究它?他认为,IPv9是我们国家拥有自主知识产权所有权、支配权和管控权的网络,具有无穷无尽的可分配IP地址数量,而且中国在2002年就开始研究数字资产地址,已经写入以中国为主导的国际标准组织ISO未来网络的《命名和寻址》标准中,因此要自主控制区块链的应用,必然使用拥有自主控制权的IPv9网络体系结构。而目前所有的热点区块链应用https://net.it168.com/a2018/0802/5001/000005001609.shtml?1
8.网络知识学习IPSec协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,包括网络认证协议AH、封装安全载荷协议ESP、密钥管理协议IKE和用于网络认证及加密的一些算法等。IPSec规定了如何在对等层之间选择安全协议、确定安全算法和密钥交换,向上提供了访问控制、数据源认证、数据加密等网络安全服务。 http://xsx.i.yce21.cn/index.php?r=space/person/blog/view&sid=2ffab018bb8746c08c09ad809ad3003a&id=1618565119
9.计网OSI七层模型分层,TCP/IP四层模型一、计算机网络体系结构分层 网络分层概述: 网络分层就是将网络节点所要完成的数据的发送或转发、打包或拆包,控制信息的加载或拆出等工作,分别由不同的硬件和软件模块去完成。这样可以将往来通信和网络互连这一复杂的问题变得较为简单。 在面试时,面试官会问及五层(TCP/IP结构体系),七层(OSI的结构体系)或四层(https://blog.51cto.com/u_15612474/5828184
10.用VxD技术设计网络计费系统杂项在任何网络体系结构的层次中,控制都是必不可少的功能,但不同的层次有不同的控制内容,不同层次之间的有不同的分工。 TCP/IP体系结构中IP层同OSI/ISO体系结构中的网络层相似,其控制功能包括:差错控制、拥塞控制以及路径控制等。IP层作为TCP/IP 体系结构中至关重要的一层,其控制功能是最复杂的。IP层协议ICMP,就http://www.jzxx.wj.czedu.cn/html/article4427262.html
11.网络信息体系技术架构用网络信息体系的理念来塑造装备体系要抓住体系架构这个顶层。把提高基于网络信息体系的一体化作战能力作为装备发展的目标,设计科学合理的技术架构。在网络信息体系理念的指引下塑造装备体系结构,给出装备体系的要素组成、技术标准化规范,建立统一的装备体系技术架构,破除军兵种、领域部门和系统间的壁垒,真正实现装备之间的互https://www.zhkzyfz.cn/CN/10.3969/j.issn.1673-3819.2017.06.001
12.计算机通信第二章2) 下载Cisco公司的软件Packet Tracer 5.3,在计算机上安装。安装完成后,使用该软件绘图2-1-1所示网络拓扑结构图。 3) 什么是网络体系结构?为什么要定义网络的体系结构? 1、计算机通信的网络体系结构实际上就是结构化功能分层和网络协议(规程)的集合,也就是从逻辑功能上构筑计算机进程之间互相通信的层次化结构、不同https://www.360doc.cn/article/19481460_411011515.html
13.ISO/OSI网络体系结构ISO/OSI 网络体系结构 1.参考模型 (1)模型 (2)各层主要功能和主要设备协议 (3)各层传输内容: 物理层:bit 数据链路层:帧 网络层:包 传输层:报文 2.网络互连硬件 (1)物理层的互联设备: 中继器:实现局域网网段互连,扩展局域网网段长度。 集线器:可看作一种特殊的多路中继器,也具有信号放大功能。 (2)数据https://www.pianshen.com/article/75191750488/