引言
就现在而言,大都网络编程的系列的文章都在围绕着核算机网络系统进行论说,但其间太多理论概念,关于大部分隔发者而言,用途甚微。因而,在本系列中则会以实践开发者的工作为中心,从Java程序员的视点动身,详细解读Java的网络编程中心内容。
一、核算机网络的“宿世此生”与根底概念
先来看看维基百科关于 核算机网络 这个名词的解释:
核算机网络是指将坐落不同地理位置,但具有独立功用的多台设备,经过通讯设备和线路衔接起来,在网络操作系统,网络办理软件、网络通讯协议的和谐办理下,完结资源同享和信息传递的核算机系统。
简略来说,核算机网络便是用于满意不同机器之间通讯、同享的一种系统。
其实一开端核算机网络是用于军事化意图的,因美国军方需求一种多节点的通讯技能,确保在其一部分节点被摧毁后,也能够确保通讯依旧正常,因而组建了一个部分ARPA
并在1966年完结了ARPANET
(阿帕网)项目,该项目也是最早的核算机网络之一。
当然,后续随着科技不断进步,各种网络相关的技能百家争鸣,呈现了各式各样的网络技能,但一同也带来了很大的局限性,例如:不同的核算机网络之间并不能彼此通讯、不同操作系统之间无法通讯、覆盖规模及其有限等。因而,ARPA
需求一种技能将不同的核算机局域网互联,终究ARPA
安排创建了一个新的项目被称为internetwork
因特网,也被称为“互联网”。
在internetwork
项意图研发进程中,1974年,Robert E. Kahn
以及Vinton G. Cerf
两位教授正式提出了新的传输协议:TCP/IP
协议,用于满意不同核算机网络之间的互联通讯,ARPA
到1982
年承受TCP/IP
选定为Internet
首要的核算机通讯系统,作为因特网通讯的“基石”。
1.1、核算机网络的组成
从组成上而言,核算机网络首要由主机、协议、传输介质以及软件四部分组成。
- 主机:可所以手机、电脑、服务器、电子手表等任意核算机硬件。
- 协议:各类界说归法的网络通讯协议,如
TCP/IP、IPX/SPX、AppleTalk
等。 - 传输介质:传输数据的通道,可所以实体铜线、电缆、光纤,也可所以无形的电磁波空间介质。
- 软件:包含一切联网的运用,如QQ、微信、支付宝、淘宝、京东等各类软件。
1.2、核算机网络的功用组成
核算机网络系统首要供给的两个中心功用就在于:
- 资源同享:资源子网完结。
- 数据通讯:通讯子网完结。
资源子网以及通讯子网也对应着OSI
中的上三层和下三层。
不过假如学习过核算机网络课程的小伙伴应该都知道,其实核算机网络是一个杂乱而巨大的系统,由软件、驱动、硬件、线路等多部分一同组成,但关于这些理论性内容不再论说,有爱好的能够自行了解。
1.3、网络分层与OSI七层模型的由来
核算机网络是个十分杂乱的系统,由于开端各个核算机网络系统结构不同,导致两边网络之间无法互通,因而,20世纪90年代,ISO
世界规范化推出了OSI
模型打算拟定核算机网络系统规范。
简略来说就类似于国内的普通话,由于不同省份的方言不同,导致不同当地的人交流起来并不方便,因而界说了“普通话”这一规范,一切人都遵循该规范进行交流交流。
但由ISO
安排拟定的OSI
网络七层模型结构并没有得到广泛运用,实践中运用最广泛的是TCP/IP
系统结构。换句话说,OSI
七层模型仅仅理论上官方拟定的世界规范,而TCP/IP
系统结构才是事实上的世界规范。
PS:世界规范化安排提出的
OSI
模型未得到广泛运用的原因:
①拟定时过分理想化,未考虑实践的运用场景。
②拆分过于精细化,完结起来过于杂乱,运转功率并不高。
③OSI
系统的拟定周期过长,导致按其规范生产的设备无法及时投入市场抢占份额。
④OSI
系统由于分层过多,规划也不合理,有些相同的功用在多个层次重复呈现。
但由于TCP/IP
系统中的最后一层没有拟定规范的规范,所以关于学习核算机网络完善系统时会缺失一部分,所以又提出了一种折中计划,也便是综合OSI
以及TCP/IP
两个系统的优缺点,提出了一种五层结构的原理系统,因而在触摸核算机网络系统时,一般都会存在三种分层结构:
- 法定规范系统:
OSI
七层结构。 - 实践运用系统:
TCP/IP
四层结构。 - 原理教育系统:五层结构。
二、OSI七层网络模型与TCP/IP协议簇
核算机网络系统选用的是分层结构,每个层次之间互不搅扰,上层不需求关怀基层的详细完结,基层只需求为上层供给服务即可。
在
ISO
安排界说的世界规范OSI
模型中,是七层网络模型。
在实践运用最广泛的TCP/IP
模型中,是四层网络模型。
当然,在核算机网络教育中,也提出了五层网络模型。
但不管多少层网络模型,其实本质上都是在叙说相同的内容,只不过拆分的精细度不同而已,三种网络模型对应如下:
2.1、OSI七层网络模型
OSI七层网络模型中,每层的功用如下:
- 运用层:人与核算机网络交互的窗口。
- 表明层:担任数据格式的封装,如加密、紧缩、编解码等。
- 会话层:树立、停止、办理不同端间的会话衔接。
- 传输层:供给端到端(两台机器)之间的传输机制,以及供给流量操控、犯错效验。
- 网络层:逻辑寻址,IP地址,鄙人两层的根底上向资源子网供给服务。
- 数据链路层:担任树立和办理节点间的链路,将数据封装成帧,进行牢靠传输。
- 物理层:在介质媒体上传输比特流。
在TCP/IP
系统中,将原本OSI
系统中的运用层、表明层、会话层兼并为了运用层,将数据链路层和物理层兼并为了数据链路层,因而TCP/IP
系统中只存在四层结构。
留意点:在开端由于技能问题,因而数据传输有必要树立在物理实体介质的根底之上,但如今无线电的电磁波技能也能够做到运用空气作为介质,然后抵达传输数据的意图。
在OSI
分层系统中,上三层:运用层、表明层、会话层组成资源子网,下三层:网络层、数据链路层、物理层组成通讯子网。
2.1.1、OSI模型的通讯的封装与解析进程
在网络通讯中,通讯两边都有必要是对等的,并且两边都恪守相同协议的,这样才可通讯。比方举个例子:
竹子想发微信信息给熊猫,喊熊猫出来玩,但两边之间的通讯根底有必要对等,也便是说,熊猫的手机上也有必要要装置了微信,否则竹子无法经过微信与熊猫出来玩。
但假如竹子说的是英语,熊猫只能懂汉语,两边并未恪守相同的“协议”,那两者之间天然也无法进行通讯。因而,通讯的另一要素则是:通讯两边都有必要恪守相同的协议。
而在核算机网络中,当两台机器进行通讯时,其进程首要包含数据的封装与解封:
如上图,左边是发送端,右侧是接纳端,当发送端的运用尝试传输一条数据时,数据会依据网络分层结构,从上至下顺次封装,每层都对数据做必定的处理,最后在物理层转换为比特流(二进制数据),然后传输至接纳端。
由于两边之间恪守的都是相同的协议系统(网络模型),因而接纳端会首要接纳到比特流数据,然后从下至上顺次解封数据,终究在运用层复原数据,然后抵达通讯的意图。
2.2、TCP/IP协议簇
TCP/IP
应该是核算机网络中听的次数最多的词汇,但它并非单纯的指TCP
和IP
两个协议,而是一组协议的代名词,指由许许多多的网络协议一同组成的“协议簇”,TCP/IP
协议簇首要组成如下:
上面列出了一些TCP/IP
协议簇中常用的一些协议,但整个协议簇是由大巨细小上百个协议一同组成的(关于TCP/IP
协议簇中的一些常用协议可参考:百度百科)。
在核算机网络系统中,每层都会存在多个协议,但一个协议只会隶归于一层。一同,协议也能够由软件、硬件两个维度来完结。
除开最常见的TCP/IP协议簇外,还有一些其他的协议组,如
IPX/SPX、NetBEUI、AppleTalk
等协议组。
2.2.1、通讯协议的基本概念
前面的叙说中,更倾向于“空中楼阁”般的理论概念,比较生涩难懂,接下来咱们以实践的TCP/IP
协议动身,再对核算机网络更进一步论说。
TCP/IP通讯协议是最完好、运用最广泛的网络协议系统,它的魅力在于可使不同硬件结构,不同操作系统的核算机彼此通讯,通讯协议中界说多方之间发送/接纳的报文格式、次序以及规矩,其间语法界说了传输的报文格式,语义界说了报文传输规矩,时序界说了报文传输次序,核算机通讯的本质就在于信息报文的彼此交换。
2.2.2、协议数据单元(PDU)
核算机网络系统中,不同节点通讯时交换的信息报文被称为协议数据单元(PDU),PDU
首要由协议头信息+数据(SDU
)组成,数据是指发送端需求传输给接纳端的信息,而协议头信息中,则包含了完结传输所需的操控信息,如地址、长度、序号、分段标识、过失操控信息等。
依据TCP/IP
系统而言,PDU
在不同层存在不同的称呼,如下图:
2.3、核算机网络系统中各层总述
就现在而言,前面的论说中现已将核算机网络中最常见的OSI、TCP/IP
系统简略介绍了解了,但关于这些系统中,不同层的详细效果却并没有进行讨论。因而,接下来咱们从自己规划一个核算机网络系统的视点动身,分别来讨论网络分层的必要性与每个分层的详细意义。
2.3.1、物理层
先来看最简略的通讯模型:
如上图,两台电脑之间通物理媒体衔接,互相传递信息,然后抵达通讯的意图。
在这种最简略的直连通讯模型中,想要完结两边之间的通讯,那应该考虑如下几个问题:
- ①衔接两台电脑之间的传输媒体能够选用哪些介质类型。
- ②衔接两台电脑时,两台电脑应该存在怎样的物理接口。
- ③传输数据时,运用何种信号表达比特流中的
0
和1
。 - ④两边之间通讯时,不同的传输介质,数据传输的速度规范又该是多少。
关于如上问题,咱们能够将其悉数归纳到“物理层”来处理,在该层中界说规范规范。
简略来说,物理层首要使命是担任在介质上正确的传送比特流,并规则物理接口的各种特性和物理设备的规范,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
2.3.2、数据链路层
但一般现在不会存在直连型网络,常用的核算机网络都是由多台机器一同组成的,如下:
在这种总线衔接的通讯模型中,当一台主机,比方A
向D
发送数据时,数据会经过总线传输至总线上的一切主机,此刻D
怎么知道该条数据是发给自己的呢?其他主机又怎么差异数据不是发给自己的呢?因而,关于这种多台机器组成的网络模型而言,咱们也需求处理一系列问题,如:
- ①编址问题:怎么差异总线上的各主机(如
MAC
地址),在发送数据时,带上方针主机的地址,其他主机依据数据中的方针地址承认是否是发给自己的。 - ②当其他主机收到传递的数据后,怎么从比特流中正确差异出数据和意图地址。
- ③当一同多台主机共用主线时,怎么和谐各主机竞争总线,防止数据发生磕碰。
关于上述中的这些问题,能够悉数划归到链路层处理。
因而能够得出,数据链路层首要使命是完结数据在不牢靠的物理线路上的牢靠传递,担任供给物理地址寻址、数据的成帧、流量操控、过失操控等功用,确保数据的牢靠传输。
2.3.3、网络层
到现在为止,处理了物理层及链路层中的问题后,就能够完结数据在一个局域网络中的传输了。但实践每天都触摸的因特网是由无数个小网络和路由器互连组成的,如下:
因而只处理前面所叙说的问题仍是无法在巨大的核算机网络中完结通讯,终究之前由于只要一个网络,所以不需求对网络进行标识。但在这种广域网模型中,会存在大巨细小无数个局域网,所以想要从一台主机将数据传输给另一台主机时,此刻又该怎么精准定位到某个网络中的详细主机呢?因而又产生了一系列的问题需求加以处理:
- ①怎么标识各个网络及网络中的主机(网络和主机一同编址问题,如IP地址)。
- ②一台主机向另一台主机发送数据时,在广域网中往往存在多条链路可走,此刻怎么挑选最适宜的路由。
而关于这些问题咱们都能够划归到网络层处理。
所以,网络层首要担任将网络地址翻译成对应的物理地址,并经过路由挑选算法为数据的传输挑选最恰当的途径。
路由挑选:路由首要包含路由表和路由算法两个方面,网络层会依据速度、距离(步跳数)、价格及网络拥塞程度等因素,在路由表的多条通讯途径中找一条最佳途径。
2.3.4、传输层
至此,假如处理了物理层、链路层及网络层的问题,数据就能够做到在不同的网络中进行通讯。但这关于普通用户而言仍然不行,由于一台主机上会装置多个运用程序,比方:
主机A上装置了QQ、微信、谷歌浏览器,当另一台主机向主机A发送数据时,那这些数据到底应该交给主机上的哪个进程处理呢?
因而还需求处理:
- ①怎么处理进程之间依据网络的通讯问题,怎么标识网络通讯相关的进程。
- ②假如数据在传输进程中呈现丢包、误码等传输过错,又该怎么处理。
这些问题能够被划归到传输层加以处理。
依据OSI
模型而言,上三层资源子网首要担任用户数据处理,下三层通讯子网首要担任数据通讯,而传输层坐落OSI模型中的第四层,是资源子网与通讯子网之间的桥梁,因而,不管是在OSI
亦或TCP/IP
系统中,传输层都是至关重要的一层。
传输层的首要功用是:供给端到端之间的传输机制以及供给过失效验和流量操控,确保报文的正确传输。 在TCP/IP
系统中,首要供给了两种传输服务:
- “面向衔接”的
TCP
牢靠传输协议。 - “面向无衔接”的
UDP
不牢靠传输协议。
2.3.5、运用层
运用层不管是在OSI
亦或TCP/IP
模型中,都是坐落最高层,它是用户、各种运用程序和网络之间的接口,其功用是直接向用户供给服务,并完结用户在网络中的各种操作,运用层为用户供给的服务规模包含:文件目录服务、文件传输服务、远程登录服务、电子邮箱服务、打印服务、网络办理服务、安全服务、域名办理服务等,这些服务由运用层中各种协议及运用程序供给。
TCP/IP
系统中将资源子网都兼并为了运用层,但在OSI
模型中,资源子网是分为运用层、表明层、会话层三个层次的,也便是拆分粒度更精细化,服务也更为精细化。
2.3.5.1、OSI-表明层
首要担任运用层的用户数据处理,例如数据编/解码、数据的加密解密、数据紧缩、数据格式处理等,其效果如其名,首要处理用户信息的表明问题。
2.3.5.2、OSI-会话层
会话层坐落OSI模型的第五层,是用户运用程序和网络之间的接点,首要担任网络中的两节点间树立、办理和停止通讯。会话层的功用包含:树立通讯链接、坚持会话进程、保持通讯链接的畅通、同步节点间的对话信息、决议通讯是否停止以及通讯中止时决议从何处从头发送。
简略而言,运用层首要是为用户与网络之间,供给各类可“触摸”的窗口。
2.3.6、TCP/IP系统中数据的通讯进程
与之前的OSI
模型的通讯进程相同,TCP/IP
系统中,一端想往另一端传输数据时,数据也会阅历封装与解封的进程,数据经过每一层时都会参加当时层的协议信息,然后形本钱层的PDU
,继而向下传递,直到终究被转换为比特流数据,经过传输介质转换为信号传输到另一端,另一端接纳到之后则会顺次解封数据,进程如下:
同比日子,也便是类似收发快递的进程:
- 发件:[发件人]→[货品]→[驿站]→[快递公司站点]
- 传输介质:[运输道路]→[中转站]
- 收件:[快递公司站点]→[驿站]→[货品]→[收件人]
2.3.7、核算机网络根底总结
到现在为止,核算机网络中一些比较重要的根底概念已介绍结束,前面的论说中,从核算机网络的诞生,到法定的OSI
规范系统以及TCP/IP
系统进行了简略剖析,关于开发者而言,这些根底知识了解即可,想要深化学习的小伙伴可观看《湖科大的核算机网络视频教育》,讲的比较透彻切浅显易懂。
三、IP网络协议与TCP、UDP网络传输层协议
前面更多的在叙说核算机网络的整体的结构,接下来则预备对核算机网络中几个常见的网络协议进行论说,如IP、TCP、UDP
等协议(HTTP、HTTPS
放鄙人章讲解)。
3.1、IP协议
当运用层的数据被封装后,想要将数据在网络上传输,数据终究要被发往何处,又该怎么精准的在网络上定位方针机器,此刻起到要害效果的便是“IP
协议”。
IP
协议的效果在于把各种数据包准确无误的传递给方针方,其间两个重要的条件是IP
地址和MAC
地址。其间IP
地址便是一切主机在网络通讯中的唯一标识,但由于IP
地址是稀有资源,不或许每个主机都拥有一个IP
地址,因而路由器里边会记载咱们主机的MAC
地址,一般的IP
地址是路由器依据MAC
地址生成的,而MAC
地址是全球唯一的。
举例:IP地址就好像是物流线路上的驿站地址,而MAC地址便是详细货架上货品的位置。
之前的IP
地址选用的IPv4
格式,现在大部分主机都已向IPv6
过渡。
3.1.1、IP地址的组成与分类
IP
地址一般由网络标识(NetID
)和主机标识(HostID
) 两部分组成,其间网络标识对应着网络地址,表明其局域网归于互联网中的哪一个网络;主机标识对应着一台机器的主机地址,表明机器归于该局域网络中的哪一台主机。
一般状况下,一个IP
存在四组数字,每组数字对应着八位二进制数字(一个IP
地址合计32Bit
),每组之间分别用.
离隔,其间不同类型的IP
地址,表明网络标识和主机标识的数字段也不同,现在的IP
地址首要可分为A、B、C、D、E
五大类,如下:
A类IP
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类IP
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类IP
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类IP
D
类和后续的E
类归于特别的IP
地址,D
类地址被称为播送或组播地址,其最高位有必要是1、1、1、0
,因而取值规模为224~239(224.0.0.0~239.255.255.255)
,如下:
E类IP
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分类小结
因不同类型的网络IP
规模不同,所以它们也分别运用于不同的场景,如:
- ①
A
类IP
适用于大型网络,由于单个网络中可包容的主机数十分巨大,因而常被保存给政府机构运用。 - ②
B
类IP
适用于中型网络,一般会被分配给公益安排、中大型企业等。 - ③
C
类IP
适用于小型网络,这种IP
适用于一切需求网络的个体和小集体,如网吧、家庭、个人电脑等。 - ④
D
类IP
用于组播。 - ⑤
E
类IP
用于保存和试验。
3.1.2、子网掩码
子网掩码又被称为网络掩码、地址掩码、子网络遮罩,它的效果首要有两个:
- 一、差异
IP
中网络地址和主机地址。 - 二、划分子网,扩展网段内的可用
IP
数目。
但默许的子网掩码值也并非都相同,不同的网络类型存在不同的默许掩码,如:
-
A
类网络的默许子网掩码:255.0.0.0
-
B
类网络的默许子网掩码:255.255.0.0
-
C
类网络的默许子网掩码:255.255.255.0
一个子网掩码决议着一个子网(独立的单个网络)内可包容的主机数量,核算公式为:可包容的主机数量=(2
的n
次方)-2
。这个n
能够了解为二进制掩码中0
的数量,例如:
- A类默许掩码:
255.0.0.0
转换为二进制为:11111111.00000000.00000000.00000000
,后边有24
个0
,因而可包容的主机数量为(2
的24
次方)-2
,即16777214
台主机。 - C类默许掩码:
255.255.255.0
转换为二进制为:11111111.11111111.11111111.00000000
,后边存在8
个0
,因而C
类网可包容主机数量为(2
的8
次方)-2
,即254
台主机。
修正子网掩码为局域网扩容
在中型企业中,经常会碰到一个问题,公司运用C
类网,因而子网内可包容的主机(电脑)数量为254
台,但实践公司的电脑或许超出这个数量,如存在440
台电脑,那此刻怎么更改路由器的设置能够让440
台电脑一同上网呢?
- 计划一:增加路由器的数量,更改多个路由器装备。
- 计划二:经过改变子网掩码的方法为局域网扩容。
,关于榜首种计划需求增加经济本钱,因而能够暂不考虑。来看看第二种计划,此刻将子网掩码修正到多少适宜呢?核算进程如下:
- ①:主机数量/子网可包容主机的最大数,再向上取整,即:
-
440/254≈1.73
,向上取整成果=2
,也便是包容440
台电脑需求2
个网段。
-
- ②子网掩码决议着子网内可包容的主机总量,那么设:
2
的N
次方≈主机数量,求N
:-
2
的N
次方=440
,可算出N>8
,即N=9
最适宜,因而掩码低位应当存在9
个0
; - 即:
11111111.11111111.11111110.00000000
,转换为十进制:255.255.254.0
; - 因而终究核算出子网掩码为
255.255.254.0
最适宜。
-
此刻假设路由器的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
的网络标识有必要共同,那怎么核算网络地址呢?
网络地址 =
IP
地址 “位与” 子网掩码。
如C类网197.118.0.198、197.118.1.114
两个IP
,子网掩码为255.255.254.0
,怎么核算网络地址?首要需求将掩码与IP悉数都转换为二进制,如下:
-
197.118.0.198
:11000101.01110110.00000000.11000110
-
197.118.1.114
:11000101.01110110.00000001.01110010
-
255.255.254.0
:11111111.11111111.11111110.00000000
首要将197.118.0.198
网络部分(前三段)的二进制值同掩码进行位与运算,终究能够核算出:
11000101.01110110.00000000
,转换为十进制为197.118.0
。
紧接着再197.118.1.114
网络部分的二进制值同子网掩码进行位与运算,核算成果:
11000101.01110110.00000000
,转换为十进制为197.118.0
。
终究可得到成果:197.118.0.198、197.118.1.114
的网络地址都为197.118.0
,代表着这两个IP
处于同一个网段。
子网掩码小结
子网掩码这块的内容,假如你不是专门做网络相关的工程师,哪恰当了解即可,如不了解其内容也无关紧要,作为软件开发者并不需求过分深化研讨。
3.1.3、IP协议中心流程
经过上述内容学习后,咱们现已对IP
协议中的IP
组成、分类、核算等知识现已树立起了根底,接下来在重点看看IP
协议的中心流程。IP
协议中心首要包含IP
寻址和路由操控。
前面曾提及:网络上任何一台主机都会存在自己的IP
地址,那么当运用层数据被封装后,能够精准定位到方针主机的要害原因就在于IP
,能够经过IP
地址在网络中进行寻址,然后让数据抵达意图主机。
但在实践的网络通讯进程中,或许有时数据发送的链路十分遥远,如你从中国向日本网友发送一条数据,那么由于一些网络颤动、物理介质损坏都会导致数据丢掉。但此刻又该怎么确保数据“安稳”抵达意图地呢?
为了防止数据由于介质损坏或网络颤动等原因丢掉,因而会在数据的传输链路中参加一些“中转站”,也便是所谓的“路由器”,一方面能够备份数据,检查数据是否丢掉,假如丢掉会从头发送,另一方面也能够操控数据的转发。当然,这个操控数据转发的进程也被称为“路由操控”。
正由于路由操控的存在,所以即便网络杂乱多变,也能够经过路由器的操控将数据“安稳”送达至意图主机。
但因数据传输进程中,数据从发送方到接纳方之间存在的链路是不可预估的,因而数据传输的链路上或许会分布许多路由器。本质上数据在链路中传输,便是一个个路由器彼此之间交换数据报的进程,当然,这个进程也被称为“跳”。
跳:数据包经过一台路由器便是一跳。
比方一个网络中存在四个路由器:A、B、C、D
,假如局域网A
中的主机要给局域网D
中的主机发送数据,从理论上来说就会经过B、C、D
三台路由器,也便是会经过三跳。
哪当数据抵达某个路由器后,它怎么知道“下一跳”该去往何处呢?此刻中转的路由器就会解析收到的数据报,然后从中解析出IP
数据报,然后查询自身的路由表,然后挑选“下一跳”该走的道路,终究不断重复该进程直至数据抵达方针主机。这种多次转发数据的进程也被称为“多跳路由”。
3.1.4、IPv4与IPv6
现在的网络简直大部分仍是依据IPv4
版别,但一同大部分运用程序也开端支撑IPv6
,IPv6
是“Internet Protocol Version 6
(互联网协议第6版)”的缩写,是用于替代IPv4
的下一代IP
协议,也便是下一代互联网的协议。
IPv6
相较于IPv4
而言,首要不同点在于:
- ①地址空间不同,
IPv4
地址选用32
位长度,IPv6
的地址则选用128
位长度。 - ②
IPv6
的路由表会比IPv4
更小、更精细。 -
IPv6
的组播支撑以及对流的支撑要强于IPv4
。 -
IPv6
的安全性更高,运用IPv6
的用户可对网络层数据进行加密。 - 协议扩大不同,
IPv6
答应协议进行扩大,而IPv4
不答应。
前述的IP
协议剖析都是依据IPv4
版别而言的,由于现在干流的网络版别仍是IPv4
,但如今也逐步向IPv6
过渡。
3.2、“面向衔接”的TCP牢靠传输协议
TCP(Transmission Control Protocol)
传输操控协议是面向衔接的牢靠传输协议,是坐落传输层的中心协议之一,在不牢靠的互联网络上,IP
协议只供给了简略不牢靠的包交换,但网络中不同主机之间经常需求一种牢靠的、类似于管道相同的衔接、流机制,去稳定传输一些数据,如视频、音频、图片等大文件数据。
因而TCP
应运而生,TCP
协议是为了在不牢靠的互联网络上供给牢靠的端到端之间,字节省传输而专门规划的一个传输协议,TCP
中选用字节省传输数据。
3.2.1、TCP协议简介
先来看看TCP
的报文头结构:
TCP
报文头结构中的各字段释义如下:
- ①源端口/意图端口:指数据发送方的运用进程端口号及接纳方的进程端口号。
- ②序号:
TCP
为了确保数据的牢靠传输,会对分段数据标注序号,勇于拼装和承认数据的正确性。 - ③承认序号:当接纳方收到接纳到本次数据时,下次需求发送的数据段序号。
- ④首部:表明
TCP
报文头的长度,由于TCP
头长度可变性,因而需求在头信息中声明每个头的长度。 - ⑤保存位:预留一些空间给未来拓展时运用。
- ⑥
URG
:表明本次发送的报文数据中是否紧迫数据。 - ⑦
ACK
:承认信号,当报文中ACK=1
的时分表明正确或赞同。 - ⑧
PSH
:表明接纳方应该尽快将这个报文交给运用层,为后续数据腾出空间,不要停留在缓冲区。 - ⑨
RST
:假如收到RST=1
的报文,说明与主机的衔接呈现严重过错(如主机崩溃),有必要开释衔接,然后从头树立衔接。 - ⑩
SYN
:树立一个新衔接,SYN=1
表明这是一个恳求树立衔接的报文段。 - ⑪
FIN
:断开一个衔接,FIN=1
表明告知告知对方本段要封闭衔接了。 - ⑫窗口巨细:表明现在答应发送的数据量,当抵达此值,需求
ACK
承认后才能继续发送数据。 - ⑬效验和: 经过
CRC
算法供给额定的牢靠性,用于效验数据正确性。 - ⑭紧迫指针:标记紧迫数据在数据字节省中的位置。
- ⑮选项:这块归于动态的可挑选参数。首要选项如下:
- 最大报文段长度、窗口扩展、时刻戳。
- 数据:报文段传输的数据内容(不归于
TCP
报文头的范畴内)。
当运用层向传输层传递数据时,TCP
会首要对数据流进行分段,将大的数据拆分成一个个的数据报文段,然后会将封装好的数据包传递给网络层的IP
层。一同,为了防止数据在网络传输中丢包,TCP
也会对每个数据包分配一个序号,当接纳方成功收到发送的数据后,会回来一个ACK
承认,假如发送方在规则的合理时刻(RTT
)内未收到接纳方的ACK
,那么对应的数据包会被认定为已丢掉,发送方会将该段数据从头传输。
当数据接纳完结后,
TCP
会用校验和函数来查验数据是否正确,在发送方和接纳方都需求核算该值,发送方核算后会将该值放在TCP
头中携带发送,接纳方接纳到数据后,也会再次核算该值,再与报文头中的值进行比对,承认数据的正确性。
3.2.2、衔接办理机制 – 三次握手与四次挥手
由于TCP
是依据管道衔接式通讯的协议,因而在数据传递之前,有必要要先树立衔接,当数据传输结束后,也有必要要封闭衔接。因而,这就引出了面试进程中人尽皆知的问题:“为什么TCP
是三次握手,四次挥手!”
想要了解清楚这个问题的答案,那么得先了解
TCP
树立与封闭衔接的进程。
TCP的三次握手
所谓的TCP
三次握手,其实是指TCP
树立衔接的进程,由于TCP
归于牢靠性的传输协议,因而在发送数据前有必要要先确保发送/接纳数据的两边状况正常,因而需求经过“三次握手”的进程,详细如下:
- ①客户端向服务端发送树立衔接的数据包
SYN=1,seq=x
,然后进入syn-send
等候承认衔接状况。-
SYN=1
:代表恳求树立衔接。 -
seq=x
:当时数据包的序号。
-
- ②服务端接纳到恳求树立衔接的数据包后,答应树立衔接的状况下,会回来呼应报文
SYN=1,ACK=1,seq=y,ack=x+1
给客户端。-
SYN=1
:TCP
是双全工协议,因而服务端也需向客户端发送SYN=1
信号。 -
ACK=1
:承认客户端树立衔接的恳求。 -
seq=y
:表明当时服务端回来给客户端的序号。 -
ack=x+1
:承认客户端序号x
之前的恳求都已收到。
-
- ③由于是双全工协议,衔接是双向的,因而客户端也需承认一下服务端的衔接恳求,收到服务端的
SYN=1
后,也需回来ACK=1,seq=x+1,ack=y+1
的数据包。-
ACK=1
:表明承认服务端的衔接树立恳求。 -
seq=x+1
:当时数据包的恳求序号。 -
ack=y+1
:承认服务端序号y
之前的数据都已成功接纳。
-
经过如上三个步骤,客户端和服务端两边之间承认恳求后,衔接会成功树立,紧接着两边都会处于estab-lishen
状况,数据能够正常传输。
当然,这个进程稍微有些难了解,换个日常日子的例子来快速了解一遍!
- ①特种兵-竹子:我是竹子,熊猫收到请答复!收到请答复!
- ②指挥部-熊猫:熊猫收到,我是熊猫,竹子能收到吗?收到请答复!
- ③特种兵-竹子:竹子收到!竹子收到!
- 通话开端………
TCP的四次挥手
当“三次握手”完结后,客户端和服务端之间会成功树立衔接,从此开启两边端到端之间的数据传输,当一方数据传输完结后,会尝试中止衔接,因而又会阅历“四次挥手”的进程,如下:
- ①客户端完结数据传输后,会宣布
FIN=1,seq=u
封闭衔接的报文,然后等候服务端呼应。-
FIN=1
:代表恳求封闭衔接。 -
seq=u
:恳求序号。
-
- ②服务端收到客户端的“封闭”恳求后,会给客户端回来承认封闭的报文:
ACK=1,seq=v,ack=u+1
。-
ACK=1
:承认客户端“封闭衔接”的恳求。 -
seq=v
:恳求序号。 -
ack=u+1
:承认客户端序号u
及其以前的数据都已成功接纳。 - 客户端传输完结数据后,会告知服务端自己要封闭衔接了;
- 但服务端或许数据还未传输完结,因而会继续传输自己的数据,直至自身的数据也传输完结后,也会告知客户端:自己也要封闭衔接了。
-
- ③服务端传输完结自己的数据后,向客户端发送封闭衔接的报文:
FIN=1,ACK=1,seq=w,ack=u+1
。-
FIN=1
:表明自己也要“封闭衔接”了。 -
ACK=1
:承认收到了之前的数据。 -
seq=w
:恳求序号。 -
ack=u+1
:承认客户端序号u
之前的数据都已成功接纳。
-
- ④客户端接纳到服务端“封闭衔接”的恳求后,给服务端呼应承认报文:
ACK=1,seq=u+1,ack=w+1
。-
ACK=1
:承认服务端“封闭衔接”的恳求。 -
seq=u+1
:恳求序号。 -
ack=w+1
:承认服务端序号w
之前的数据都已成功接纳。
-
前面提及过,由于TCP
是双全工的协议,因而两边都能够自动开释衔接,在TCP
中,当一方数据传输完结后,就会自动封闭衔接,也就会阅历“挥手”的进程,同样咱们也能够举个浅显一些的例子来认识这个进程:
- ①特种兵-竹子:竹子报告结束,请指示!
- ②指挥部-熊猫:指挥部收到!
..&*/?..!^...
继续说完自己要交代的使命。 - ③指挥部-熊猫:这里是熊猫,使命已指示结束!
- ④特种兵-竹子:竹子收到!
- 中止通话………
三次握手是指TCP
树立衔接需求发送三个数据包,首要意图是在于:为了承认两边的接纳才能和发送才能是否正常、指定自己的初始化序列号为后边的牢靠性传送做预备。
四次挥手是指TCP
封闭衔接时需求发送四个数据包,首要意图在于:当客户端发送完数据后,给服务端发送“我要封闭衔接了”的恳求,然后服务端告知客户端收到了“封闭恳求”,但此刻服务端会继续向客户端传输未发送的数据,客户端也照常能够接纳服务端的数据,直到服务端的数据传输完结后,服务端也会宣布“封闭衔接”的恳求,客户端赞同后,终究才会断开衔接,然后确保数据正常牢靠的交互。
本质上“三次握手与四次挥手”便是在指
TCP
树立与封闭衔接的进程,搞了解树立和封闭衔接的进程后再来看看最开端的问题:“为什么TCP
是三次握手,四次挥手!”
为什么TCP是三次握手,四次挥手
由于树立衔接“握手”时,当服务端接纳到“客户端想与服务端树立衔接”的恳求后,能够立马回来“赞同+与客户端树立衔接”报文,客户端也承认树立衔接后,就能够称为“握手完结”。
但封闭衔接时的“挥手”,由于一方数据传输完结后就会提出封闭衔接,不过另外一方或许还依旧存在数据未发送完结,因而服务端就不能在“承认封闭”衔接的时分,也一同宣布“封闭衔接”的恳求,由于自己的数据还没发送完结呢,所以会等到自身的数据悉数传输后,再自意向客户端建议一次“封闭衔接”的恳求,等候客户端“承认封闭”后,然后完结整个“挥手”动作。
3.2.3、TCP中的沾包问题
要了解“TCP沾包”问题之前,首要要了解TCP
传输数据的方法。TCP
在传输数据时,会给每个切开后的报文段分配一个序号,接纳方在收到数据后,会按照序号排好,然后将其放置在TCP
缓冲区中。一同TCP
为了进步传输速度,若接连几次发送的数据都很少,TCP
会依据优化算法把多个数据兼并成一个包宣布。
沾包问题:多个数据包在一块儿,无法确认每个数据包之间的切开鸿沟,因而从运用层的视点看来,就好像多个数据包“沾”在了一同。
关于TCP
传输层而言,发送方和接纳方都有或许造成数据沾包问题。
发送发导致的数据沾包问题:TCP
为了优化传输速度,往往会等收集到足够多的数据后才发送一包数据,因而发送发传输的数据就呈现了沾包问题。
还有一种状况则是:当需求发送的数据大于MSS
规则,那么TCP
就会对数据包进行拆包,一个数据包会被分隔传输,终究导致数据呈现沾包问题。
接纳方导致的数据沾包问题:TCP
中,假如数据被接纳后,运用程序没有及时读取缓冲区中的数据报文,就会导致缓冲区中堆积许多的报文数据。这种状况下,站在TCP
层的视点而言,看到的是一个个的数据报文顺次排列着,但关于运用层的程序来说,看到的便是一串接连的字节省数据,运用程序无法知道每个数据包之间的切开鸿沟,站在运用层的视点来看,一切的数据包就好像都“沾”在一同了相同,运用程序依据预先设定好的巨细从缓冲区中接纳数据,终究会一次性读取到多包数据。
沾包问题处理计划
- ①当运用
TCP
短衔接时,不必考虑沾包问题。 - ②当发送无结构数据,如文件传输时,也不需求考虑沾包问题,由于这类数据只管发送和接纳保存即可。
- ③假如运用长衔接,那么则需求考虑沾包问题:
- 假如发送的报文都是相同的结构,那么能够在首部中增加数据长度,接纳方依据首部中记载的数据巨细读取数据。
- 将每个数据包封装成固定长度,不行的用
0
补齐,接纳方每次按照固定巨细读取数据即可。 - 在数据之间设置鸿沟,比方增加特别符号,这样接纳方收到数据时,依据特别符号切开数据即可。
3.2.4、TCP协议中的其他中心概念
由于TCP
既要确保牢靠性,一同又要尽或许进步传输功用,所以整个TCP
规划的尤为杂乱,牵扯出的概念也许多,比方为了确保数据的牢靠传输,TCP
中供给的机制:
- 效验和:数据接纳完结后进行效验。
- 序列号:数据按次序传输和接纳。
- 承认应对:收到数据之后回来
ACK
应对。 - 超时重试:超出规则时刻后,发送方未收到
ACK
应对,则会从头再次发送数据。 - 衔接办理:树立和办理衔接时,都会阅历三次握手、四次挥手确保数据牢靠传递。
- 流量操控:
TCP
依据接纳端的处理才能, 来决议发送端的发送速度,防止丢包。 - 拥塞机制:
TCP
选用慢发动机制,由于网络拥塞状况不确认,刚树立衔接时会先发送少量数据的包,“摸清楚”网络拥塞程度后,再优化成适宜的数据包巨细传输。
在确保了数据牢靠传输的一同,TCP
也供给了一堆机制尽或许进步数据传输功用:
- 滑动窗口:由于接纳一条数据,回来一个
ACK
这种应对机制大大影响了传输功率,因而TCP
中引入了一个新概念:窗口,窗口巨细是指无需等候ACK
就可继续发送数据的最大值,当收到榜首个ACK
承认应对后,窗口向后移动,发送后续的数据,由于这个窗口不断向后滑动,所以叫做滑动窗口。 - 快速重传:结合上述的滑动窗口机制,当某个数据呈现丢包时,接纳方会继续向发送方传输相同的
ACK
应对序号,当发送方接连三次接纳到相同的应对序号时,就会对该序号的数据报进行重发。 - 推迟应对:接纳方应对速度越快,那么窗口会越小,而推迟应对便是指:接纳端稍等一会儿后再发送应对信号,应对速度越慢,窗口越大,网络吞吐量就越大,传输功率就越高(但受到数量和时刻的约束)。
- 捎带应对:在一般数据的传输进程中,大大都状况下都是一发一收的进程,因而
ACK
应对能够“搭数据的顺风车”,和接纳方回应的数据报文一同回来,如三次握手中的第2次握手,选用的便是捎带应对机制,ACK
应对信号和树立衔接的数据报一同发送给了客户端。
一同,TCP
协议中,每树立一条衔接都会保持九个定时器,能够恰当了解:
- 超时重传定时器:超出规则时刻规模后,未收到应对信息,对数据进行重发。
- 保活定时器:假如已树立的衔接超出规则时刻后还没有数据交互,则保活定时器超时,向对端发送保活勘探包,依据客户端的反馈决议是否继续保持衔接,如客户端正常则重置定时器时刻,如客户端异常则封闭
TCP
衔接。 - 继续定时器:也被称为零窗口勘探定时器,当接纳方缓冲区数据满了之后,会在应对报文中告知发送方将窗口置
0
,阻挠发送方继续发送数据。当缓冲区数据被读取后,会再向发送方宣布一个ACK
,告知发送方能够继续传输数据,但为了防止该ACK
丢掉导致死锁现象呈现,发送方也会发动零窗口勘探定时器,每隔一段时刻,发送方会自动发送勘探包,迫使接纳端呼应,然后得知其接纳窗口有无打开。 -
ACK
推迟定时器:延时应对的定时器,和超市重传定时器功用类似。 -
SYNACK
定时器:新建衔接时等候ACK
应对的定时器,超出时刻后会封闭衔接。 -
FIN_WAIT2
定时器:封闭衔接时等候ACK
的定时器,超时后会撤销“封闭衔接”。 -
ER
推迟定时器、PTO
定时器、TIME_WAIT
定时器:这三玩意儿没研讨过。
3.3、“面向无衔接”的UDP不牢靠传输协议
UDP(User Datagram Protocol)
协议是传输层的一个不牢靠传输协议,它为运用程序供给了一种无需树立衔接就能够发送封装的IP
数据包的方法。在传输层中,与TCP
协议互补,UDP
除了给运用层供给了发送数据包的功用外,简直没有做任何其他工作。而面向衔接的TCP
恰恰相反,简直做了一切的工作。
刚刚提到过,UDP
仅为运用层供给了发送数据报的功用,首要便是指UDP
对IP
协议的扩大:
- ①树立在
IP
协议的根底上,扩展出端口号,可使数据分发到详细的运用程序。 - ②树立在
IP
协议的根底上,扩展出数据传输进程中的数据过失效验机制。
接下来先看看UDP
的报文头结构。
3.3.1、UDP的报文头
对比TCP
杂乱的报文头结构,UDP
的头部就显得比较简略了,整个头共8
字节:
- ①源端口/意图端口:指数据发送方的运用进程端口号及接纳方的进程端口号。
- ②报文长度:
Header+Data
的总长度,由于UDP
头为8
字节,所以该值最小为8
。 - 效验和:检测UDP数据报在传输中是否有错,有则丢掉(
UDP
查验和并非有必要的),就算效验时检测犯过错,也仅仅仅丢掉数据包,不会对数据进行纠正,也便是不会重发数据报。
3.3.2、UDP中心流程
UDP
是一个无衔接的协议,因而选用UDP
传输协议的程序,在传递数据时,不会存在树立/开释衔接的进程。当数据需求传输时,会关于运用层的数据简略的封装,也便是加上自己的UDP
头后,直接会将数据丢给IP
层,然后交由链路传输。
正由于如上特性,因而
UDP
的传输速度仅受到数据生成的速度、核算机算力和传输带宽的约束。
在接纳端,UDP
会把每个音讯段放在队列/缓冲区中,程序每次从队列中读一个音讯段。当然,接纳端收到数据后,也会对数据做效验,但效验完结后,如若数据存在过失,那UDP
只会单纯的丢掉该数据包,不会要求发送端重发数据。
由于由于
UDP
高效的传输功用,因而常备运用在播送告知、音频通话、视频传输等多媒体数据流业务,而且这类业务中,假如有一个数据包丢掉,在很短的时刻内就会有另一个新的数据就会替换它,因而就算数据传输不牢靠也无关紧要。
3.3.3、UDP中的丢包问题
由于UDP
的不牢靠传输,因而数据呈现丢包是很常见的工作,一般UDP
中造成数据丢包的原因首要如下:
- ①接纳端处理数据时刻过长,导致不同包之间的数据处理间隔时刻过长,造成丢包。
- ②
UDP
单个数据包过大,导致缓冲区快速被填满,接纳端程序来不及处理造成丢包。 - ③发送端数据发送频率过快,接纳端处理速度跟不上,然后导致数据丢包。
- ④发/收两边之间存在网络不稳定,导致数据无法正常分发,然后导致丢包。
- 一般来说,丢包的原因很简略,要么是网络问题,要么便是接纳方处理速度跟不上导致的。
丢包问题处理计划
- ①假如是数据包过大造成丢包,那么则能够切开数据后分批次发送。
- ②假如是发送频率过高导致丢包,能够恰当操控频率/减小流量,或调大缓冲区。
- ③如是缓冲区最大了,仍是由于处理不过来导致数据丢包,那么能够在程序内再完结一个缓存区,先读取数据到程序中缓存,然后进步接纳端的吞吐量。
- ④假如程序中关于丢包容忍率很低,那么能够自己完结重发机制,或直接切换
TCP
完结。
3.3.4、TCP与UDP之间的差异
TCP | UDP |
---|---|
面向衔接 | 面向无衔接 |
牢靠信息传输 | 不牢靠信息传输 |
字节省传输 | 报文传输 |
传输速度慢 | 传输速度快 |
仅支撑点对点通讯 | 支撑一对一、一对多、多对多通讯 |
具有拥塞机制和流量操控 | 不具有拥塞机制和流量操控 |
TCP首部至少20 个字节 |
UDP首部仅8 个字节 |
四、腾讯QQ通讯原理剖析
腾讯QQ、微信两运用是国内交际通讯软件中名副其实的“霸主”,其间的QQ是一个依据TCP/UDP
两个协议相结合的通讯软件。其间谈天首要选用UDP
打洞方法,其次考虑TCP
通讯,当然,关于文件传输、表情包发送、QQ空间等是选用TCP
传输。
4.1、登录原理
曾经的老版QQ是能够自己挑选登录方法的,也便是用户自己能够选TCP
或UDP
方法登录,如下:
但现在的新版QQ中,都是选用依据TCP
协议的HTTP
方法登录,即与咱们自身做的登录原理大致相同,先经过调用后端接口获取令牌信息,然后认证…..,最后登录完结后,QQ会坚持一条TCP
衔接来保持在线状况。
4.2、通讯原理
QQ的首要通讯方法是依据UDP
打洞技能,经过服务器中转方法完结的信息传输,这听起来是不是很不可思议?QQ作为“顶级”的谈天软件,怎么能够选用这样的不牢靠方法来传输音讯呢?
这里边牵扯到许多原因,有前史原因,也综合考虑了服务器负载、网络杂乱度、服务器数量/网络带宽本钱问题、完结难度等多方面因素导致的。
由于UDP
传输不牢靠,因而腾讯选用了上层协议来确保牢靠传输:假如客户端运用UDP
协议宣布音讯后,服务器收到该包,需求运用UDP
协议发回一个应对包,经过这种方法来确保音讯无遗漏的传输。
不过有时分之所以会看到“音讯发送失利的赤色感叹号”,但对方又收到了这个音讯的状况,便是由于客户端宣布的音讯,服务器现已收到并转发成功,但客户端由于网络原因没有收到服务器的应对包引起的。
也包含网络比较差的状况下,UDP
无序导致的。
4.3、文件传输原理
当A
想要向B
传输一个文件时,A
首要会向服务器宣布一个文件传输的恳求,服务器接纳到该恳求后,会将其转发给B
,一同会将A
的临时IP
发送给B
,假如A、B
两个客户端在同一内网,那么B
会直接尝试衔接A
,然后抵达文件传输的意图。
但如若A、B
并不在同一个局域网,那么A
的文件传输操作就会由服务器进行文件中转,由于服务器具有公网IP
,因而A、B
两个客户端都能够衔接到服务器,于是A、B
终究就经过这种中转的方法顺利达成文件传输的意图。
4.4、音/视频通话原理
前面提到过,QQ的文字谈天简直都是经过服务器中转的方法工作的,由于这种方式一方面能够确保“记载同步到云端”,另一方面也方便“刑事侦办”。
但音/视频通话,数据传输全经过服务器中转,关于服务器是一个沉重的担负,所以QQ的音/视频通话本质上是经过NAT
穿透+P2P
对等通讯完结的,当然,在P2P
直接通讯失利时,会退而求次,服务器介入处理,经过中转形式完结传输。
大约进程如下:
-
A
打算与B
进行视频通话,那会在“发动时”向服务器发送一个“通话恳求”。 - 服务器接纳到恳求后,会先获取通话两边的
IP/Prot
,然后将其彼此交换。 - 服务器协助穿透
NAT
,A、B
两边依据服务器分发的地址树立衔接。 -
A、B
两边衔接对端地址,然后彼此传递数据,然后抵达通话数据传输的意图。
从如上进程中能够得出:QQ客户端之间“通话”,假如能够直接P2P
通讯,则服务器把他们各自的公网IP、端口号分发给彼此,这样他们的流量数据能够P2P
传输,服务器在其间只分发QQ客户端IP
、端口号信息,不会担负太大。但假如P2P
通讯失利,服务器会介入,选用服务器中转方法完结。
假如
NAT
无法穿透,那则无法进行P2P
通讯,无法穿透的原因也或许由于地理位置、网络类型约束等多方面因素导致。
P2P
通讯翻译过来也便是端到端通讯,在P2P
模型中,服务器只作为客户端地址的中转站存在,不需求承当昂扬的流量本钱。
4.5、腾讯QQ原理剖析小结
在上述进程中,咱们只能大约剖析QQ通讯其间的原理,并不能确保这是腾讯内部详细的完结计划,由于细致的详细进程只要腾讯自己了解。也包含其详细完结定然杂乱千百万倍,并非片言只语之间就可论说清楚,因而关于QQ通讯原理的剖析部分,大约了解其原理即可。
五、核算机网络根底与网络传输协议总结
在本章中,关于核算机网络的根底内容进行了全面论说,从开端的核算机网络起源开端,到常见的网络系统、网络分层结构、IP
网络协议、TCP
牢靠传输协议、UDP
不牢靠传输协议以及腾讯QQ
软件原理剖析等多块内容进行了剖析,本章旨在先为后续华章打下网络编程的根底,方便后续撰写其他内容时做好预备。