网络互连的目的是进行网络通信,也就是网络数据传输,更具体一点,是网络主机中的不同进程间基于网络来传输数据。
IP地址:端口号
概念
ip地址表示了主机在网络上的地址,类似于收发快递时的收件人地址和发件人地址。
端口号表示了主机中某一个进程,使用网络的进程在启动时系统会分配一个端口号。做服务端需要主动申请端口号,做客户端则是被动分配端口号。
127.0.0.1这个IP表示的是本机的环回网卡的IP,每台计算机都一样,表示本机。
内网IP在当前内网中不能重复,但在不同的内网中可以重复; 公网IP在整个公网中都不能重复。
内网范围:
A类网段:10.0.0.0 - 10.255.255.255
B类网段:172.16.0.0 - 172.31.255.255
C类网段:192.168.0.0 - 192.168.255.255
格式
IP地址本质上是一个32位的整型,每八位做了分隔,0-255。表示的最大范围为:255.255.255.255,这是一种点分十进制表示方式(IPV4)。由于IPV4协议表示的IP地址共42亿个,地址个数不够用,目前国内大力推IPV6。
端口号的范围是1-65535, 但是 1-124是已经被明确的程序占用,我们自定义的程序一般不使用这个范围内的端口,可以在1025-65535之间任意选择一个没有占用的。
协议
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从
的一组约定、规则。比如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互
通信交流。
五元组
综合以上概念,提出了一个网络通信中五元组的概念。
1.源IP: 标识源主机,相当于发件地址
2.源端口: 标识源主机中此时通信发送数据的应用程序,相当于发件人
3.目标IP: 标识目标主机,相当于收件地址
4.目标端口: 标识目标主要是此次通信接收数据的应用程序相当于收件人
5.协议号: 标识发送进程与接收进程中双方约定的数据格式
通过五元组就可以明确表示出网络中哪台主机向哪台主机发送了什么数据,对于现实生活中快递的例子,发送方向接收方发了哪个快递。
协议分层
对于普通用户而言,只关注消息本身,并不关注消息时如何在网络上传输的,基于这样的场景,消息在网络上的传输过程就被分成了很多层。
TCP/IP五层模型
把OSI七层网络模型中的上面三层合一,就成了TCP/IP中的应用层。
应用层: 要开发程序之前,如果涉及到网络通信,都会预先定义好协议。这个协议就是程序在发送和接受过程中的编解码格式。我们的网络编程主要就是针对应用层。
传输层: 主要向应用程序提供API,完成数据的发送与接收。比如socket API。操系统工作在这一层,主要确定程序的端口号。
网络层: 规划出一条端到端之间的路径,包括其中要经过的其他网络设备。比如发送一个快递,从西安到上海,包括途中的中转站。发送方IP、接收方IP。五元组到这一层就确定下来了。
数据链路层: 解决的是点到点的传输。比如:快递小哥从我家取走快递-- >西安机场集散中心;西安机场集散中心 --> 上海机场集散中心;上海机场集散中心-> 收件人附近的营业部;收件人附近的营业部 --> 收件人地址。
物理层: 相当于网线及其他网络设备(交换机,路由器)。对于物流来说就相当于公路、铁路等基础设施。
TCP/IP四层模型不包含物理层。
封装和分用
1.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
3.首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
以QQ发送消息为例,模拟消息在网络中的封装和分用过程。
1.应用层
对于应用层协议的定义,双方要按照相同的规则去组织与解析数据。应用层会把消息组织好,统一发送给操作系统的API(传输层) socket api。
2.传输层
在传输层中有几个非常著名的协议,TCP,UDP。以TCP为例,会在消息前面加入TCP头。原始应用层传来的消息就称为载荷。在这里,系统操作可以确认下来端口号。
3.网络层
在这一层确定下来源IP和目标IP。
4.数据链路层
帧头中主要是MAC地址,每个MAC地址都不相同,每个硬件厂商都会被分配一段地址,生产出的设备都在这个范围中。帧尾是校验和,CRC校验就是把每个BYTE做累加操作,最终会得到一个值。接收方也会同样的操作累加值,如果得到的值与校验和相等,那么就证明数据本身没有被该过。过程中可能会出现溢出,溢出就溢出。
5.物理层
把以下的内容转换成光信号、电信号在网络设备上传输。光纤:光信号;网线:电信号。
到此消息体就在网络上开始传输。
6.物理层
把光信号和电信号还原成数据链路层可以解析的格式。
7.数据链路层
帧头的MAC地址可以找到对应的主机,帧尾校验和来校验数据的有效性。然后脱掉帧头帧尾把载荷交给网络层。
8.网络层
IP协议头中可以找到目标主机的IP。脱掉IP协议头,将数据交给传输层。
9.传输层
这时已经进入了操作系统中,通过TCP中的目标端口确认应用程序(进程)。
10.应用层
应用层拿到的是脱去了TCP头的数据,此时到了QQ.exe。应用程序按照自定义的协议格式来解析消息体,完成通信。
在网络传输的过程中,每个网络节点都会进行封装和分用,最终才到达目标。文章来源:https://www.toymoban.com/news/detail-507731.html
继续加油~
文章来源地址https://www.toymoban.com/news/detail-507731.html
到了这里,关于【Java】网络通信基础、协议分层及封装分用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!