计算机网络之初识网络

836 阅读13分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情


⭐️前面的话⭐️

本篇文章将介绍计算机网络部分的知识,这是关于计算机网络的第一篇文章,主要介绍什么是网络以及网络协议是如何分层的,数据是如何传输的。

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创!
📆掘金首发时间:🌴2022年5月29日🌴
✉️坚持和努力一定能换来诗与远方!
💭参考书籍:📚《计算机网络》,📚《图解TCP/IP》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


🍋1.什么是网络?

起初,计算机以单机模式被广泛使用(这种方式也叫独立模式(指计算机未连接到网络,各自独立使用的方式。) )。然而随着计算机的不断发展,人们已不再局限于单机模式,而是将一个个计算机连接在一起,形成一个计算机网络。连接多台计算机可以实现信息共享,同时还能在两台物理位置较远的机器之间即时传递信息。

随着科技的发展与时代的进步,计算机网络的体系越来越庞大越来越复杂,我记得我小时候,那时候想要联系到一个远在天边的人特别不方便,常常使用书信,公共电话,短信来联系交流,不像现在,人手一个手机,想要联系一个人太容易了,打开手机轻轻点几下,你想要发送的消息就传出去了,而且现在的联系方式多元化,你可以使用短信电话交流,你也可以通过QQ、微信交流,甚至可以通过视频,直播的方式面对面地交流,科技改变了我们的生活,或者说是网络改变我们的生活。

所谓网络就是将许许多多台“计算机”都连接起来,每台“计算机”都能相互通信,而网络主要分为两类,一类是广域网WAN,说白了就是全世界所有的计算机建立起来的网络连接,全世界最大的广域网就是因特网,缩小一点范围,一个城市组成的网络,就叫做城域网MAN,再小一点,你家里面连接同一个路由器的几个设备组成了局域网LAN,其实这三者并没有一个明确的界限。 局域网 广域网

那网络是通过什么连接的?最简单的方式就是直接使用网线和网口来进行连接,但是这种方式明显是不可取的,毕竟世界上这么多的设备,太费网线与网口了,所以后来又有了交换机,将所有的电脑都连接到这一台交换机上就能实现计算机之间的通信,连接交换机的这些设备就组成了一个局域网,生活中更常见的是通过路由器进行组网,路由器上有LAN口与WAN口,插在LAN口的设备组成了一个局域网,路由器再通过WAN口连接广域网,实现网络通信。

示意图

一个网络

在计算机网络常常会听到什么IP地址,端口号啊什么的,下面我们就来了解了解计算机网络中常见的名词概念。

IP地址: 这个很好理解,其实就是相当于我们平常的住址,地址啥的,就是描述主机的位置在哪里,本质上就是一个32位的整数,为了方便人类的记忆,把这串32位的二进制数字使用“点分十进制”来表示,比如218.85.118.211这一串数字,有一个特殊的IP地址,叫做环回IP127.0.0.1,这个IP地址表示自己这个主机。

端口号: 你的设备上有那么多运行的程序,仅仅确定了IP(也就是你的设备在哪里)是不足以通信的,可以理解为找到了你住哪一栋楼,但是不知道你具体住在那一层或者那一间房子,所以引出了端口号,相当于你房间的门牌号,一台主机上都有唯一的一个端口号对应与一个应用程序,如果你把IP地址比作收件地址,那么端口号就是收件号码。端口号本质上就是一个2字节的整数,范围是0-65535,一般服务器的端口号需要自己指定,如果随机分配的话,你的客户端要怎么访问你的服务器呢?毕竟客户端才是主动的一方,知道服务器在哪里才能与它“约会”嘛!

协议: 想要进行有效的通信,前提需要明确两者间的协议,毕竟你和动物交流是做不到的嘛!协议本质上就是对数据发送的格式做出要求,然后你和接收方约定好按照你的要求去解析这个数据。网络通信本质传输的是电信号与光信号,通过光信号的频率来决定电平到底是0还是1协议

网络通信的过程是一个非常复杂的过程,一个协议往往是不足以支撑起庞大的网络通信的,所以更好的办法就是把一个复杂的协议给拆分成多个小的协议,每个协议负责一小部分的工作,将这些协议进行分层,毕竟三个臭皮匠赛过一个诸葛亮。

这样有几个好处,一是该层协议不必关心其他层协议的细节,更好地做到了封装,二是能够把对应层的协议转换成其他层的协议,这样就能更好地解耦合。 这样打电话的人不必知道电话的工作原理(封装),打电话的人可以使用有线电话,也可以使用无线电话(解耦合)。 协议分层

接下来我们就来了解了解协议分层。

🍋2.计算机网络分层

🍒2.1协议分层模型

教科书上面的协议分层模型,OSI七层模型,从硬件到软件分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

OSI 🍇各层协议的工作如下(来源图解TCP/IP):

  • 应用层 为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、 远程登录(虚拟终端)等协议。
  • 表示层 将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能 够处理的格式。因此它主要负责数据格式的转换。 具体来说,就是将设备固有的数据格式转换为网络标准传输格式。不同设备对同一比 特流解释的结果可能会不同。因此,使它们保持一致是这一层的主要作用。
  • 会话层 负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关 的管理。
  • 传输层 起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。
  • 网络层 将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地 址。因此这一层主要负责寻址和路由选择。
  • 数据链路层 负责物理层面上互连的、节点之间的通信传输。例如与1个以太网相连的2个节点之间 的通信。 将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收)。
  • 物理层 负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。

OSI分层协议的分工 在实际实现的时候,并不会使用OSI七层协议,因为太麻烦了,而开发中用的最多的就是TCP/IP五层协议,或者说是四层协议,因为物理层是硬件,我们程序员不必去关心。 两种分层模型 🍇各层的作用:

物理层:针对硬件设备间的协议,保证所有的主机和网络设备之间都是相互匹配的。
数据链路层:完成两个相邻设备间的通信。
网络层:负责网络中任意两点之间的通信,为这两点的通信规划出一条“最佳”路径。
传输层:负责端与端之间的通信,只关注结果(数据有没有收到),不关心过程。
应用层:和应用程序密切相关,关注所传输的数据是用来干什么的。

对于主机实现了物理层到应用层五层,对于路由器实现了物理层到网络层三层。对于交换机实现了物理层到数据链路层两层。上面的路由器和交换机只是针对传统意义上的路由器与交换机,现在的路由器与交换机的界限越来越模糊了(就是现在的路由器有交换机的功能,交换机有路由器的功能)。

下面我们以QQ发送消息的过程来解释数据是怎么传输的。

🍒2.2数据在各个层的传输过程

在应用层,会将用户需要发送的数据进行封装构造成一个应用层协议报文。
这个应用层的协议是程序员来设计的,不同应用程序的应用层协议是不同的,假设有用户A在QQ上发送了一句消息Hello给用户B,发送时间为2022-04-20 12:22:22,我们来模拟该数据发送的过程。

假设应用层的报文如下: 应用层

应用层会调用操作系统锁提供的API,将应用层数据交给传输层。

传输层常用的协议有UDP与TCP,以TCP为例,传输层会基于应用层的数据来构造一个传输层的报文。该报文由协议报头加上数据载荷构成。
传输层 接下来传输层会将传输层的数据转交给网络层。

网络层常用的协议有IP协议,会将TCP数据报继续封装成IP数据报,也是在原来数据的基础上加上一个IP协议报头,新的网络层IP数据报是由IP协议报头加上数据载荷组成。

网络层

然后,网络层会将封装的数据交给数据链路层,数据链路层会在IP协议数据报的基础上,加上帧头与帧尾,封装构造成数据链路层数据帧(以太网数据帧)。 数据链路层 最后,数据链路层的数据交给物理层,物理层会将以太网数据帧(本质就是二进制数据),物理层会将二进制数据转换成高低电平通过网线或者无线的形式发送出去。

上面从应用层到物理层数据的转变过程称为封装,当接收方收到数据时会将已经封装好的数据进行拆分,这个过程叫做分用。 数据传输过程 当用户B的主机接收到用户A发送的数据后,就会从物理层开始,逐级向应用层进行对应层协议的解析,这个过程就是分用,它是封装的逆过程。

但是在实际的过程中,并不是直接从A的主机到达B的主机,而是在这两点的过程中会经历许许多多的“中转站”,这个中转站最常见的就是路由器,交换机等类似的设备,在数据到达一个路由器时会先将数据分用,也就是从物理层解析至网络层,然后在重新封装重新发送,任意一台设备接收到数据时都会先进行分用,分用获取到相关传输信息后再决定是继续发送还是直接使用,但是数据的发送次数是有限制的,每经历一个设备(路由器/交换机)发送次数都会减一,当次数为0时,转发设备就会丢弃这个数据,为什么要这么做呢?因为可能存在发送的目的地地址根本不存在,总不能一直转发浪费资源吧!一般来说这个转发最大限制次数是可以配置的,配置时都会设置一个只有地址无效时才会超过的转发次数。

数据传输过程 🍇几个专有名词:包、帧、数据报、段、消息 以上五个述语都用来表述数据的单位,大致区分如下:
包可以说是全能性述语。帧用于表示数据链路层中包的单位。而数据报(包)是IP和UDP等网络层以上的分层中包的单位。段则表示TCP数据流中的信息(传输层的数据包的单位)。最后,消息是指应用协议中数据的单位。

🍒2.3TCP与UDP

对于网络编程,操作系统提供了一组API,叫做socket,可以视为应用层与传输层之间的通信桥梁,而传输层中有两个非常重要的协议,那就是TCP与UDP。

TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。
TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。
然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费。 此外,为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。

UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

总的来说,TCP是有连接,可靠传输,面向字节流,全双工,而UDP是无连接,不可靠传输,面向数据报,全双工。

这里的可靠与不可靠传输不是指的不是安全,而是指你发送出数据后,能不能判断对方已经收到,如果能够确定对方是否收到则就是可靠传输,否则就是不可靠传输。 全双工是指,一条链路,双向通信,除了全双工还有一个概念叫做半双工,表示一条链路,单向通信。

了解了一些网络知识之后,我们就可以开始学习java中的网络编程了,学习网络编程过程中,你就会很明显感受到TCP与UDP之间的区别,对于网络编程,请听下回分解。