初始计算机网络

局域网与广域网

局域网:Local Area Network 简称LAN,局域网内的主机能相互进行网络通信,又被称为内网,如果一个局域网和另一个局域网之间没有连接的情况的话,是无法进行网络通信的。

网络通信实质是指网络数据传输,即计算机通过网络进行数据传输,实现数据共享。

如何组建网络,第一种方式就是主机与主机直接通过网线进行连接:

你会发现主机的接口是有限的,一台主机能连接的主机数量是有限的,于是有了集线器,让主机连接到同一个集线器上就可以进行网络通信了。这就是第二种方式:通过集线器来搭建一个局域网。

当然集线器已经很难见到了,交换机替代了集线器,所以使用交换机也可以搭建网络。

第三种方式也是现代我们大规模使用的方式,通过交换机和路由器来组建网络:

交换机的功能就是将一台台主机连接到一起,组建一个小型局域网,路由器的功能就是将这些局域网连接到一起组建更大的网络,一句话简要说明,交换机是用来连接主机的,路由器是用来连接网络的。


广域网:Wide Area Network 简称 WAN

通过多个路由器将多个局域网连接起来,在物理上组建一个很大范围的网络,就形成了广域网。

广域网内部的局域网都属于其子网。

广域网和局域网的区分是相对而言的,如果属于全球化的公共型广域网我们称之为互联网(公网、外网),在我们国内其实访问的到是我们国家自己的内网,相对而言,我国的内网就是局域网,而互联网就是广域网。

在相对而言,每个学校都有自己的内网,相比于我们国家的内网来看,学校的内网就是局域网,国家的内网就是广域网。

IP地址与端口号

我们在进行网络通信的时候,需要发送数据到别的网络设备上,那么我们就要知道发到哪里,这就类似我们的快递物流一样,每份快递都写着收件人的地址信息,便于精准发送到指定的人手中。

IP 地址是用来表示网络主机、其他网络设备(例如路由器)的网络地址。

IP地址主要用来定位主机的网络地址。

IP 地址的格式:IP 地址是一个32位的二进制数 ,通常被分割为 4 个 "8位二进制数"(也就是四个字节),如:01100100.00000100.00000101.00000110

我们使用的时候通过使用 "点分十进制",即 a.b.c.d 的形式来表示(a,b,c,d 都是代指上面提到的四个字节,并且是以无符号的形式来表示的,也就是说它们的范围都是 0 ~ 255 之间)


我们知道物流快递仅仅只是知道收件人的地址是远远不够的,举个例子,你在学校网购了一件商品,你填写了学校的地址,学校有这么多号人,快递即使送到了学校的驿站,你怎么知道哪个快递是你的,物流公司则是通过收件人的手机号发短信通知你要收快递。

我们的端口号也是如此,IP 地址标识了主机的位置,但是数据传输到主机哪个进程呢?是主机的微信还是QQ...

端口号就是用来定位主机的进程的

端口号的范围是 0 ~ 65535 ,在网络通信中,进程可以通过绑定一个端口号来发送和接收网络数据。

协议

我们有了IP 地址和端口号可以定位到网络中唯一的主机内部的唯一的进程来进行网络通信,但是还存在一个问题,网络通信都是基于二进制的数据形式来进行传输的,我们传输的数据有图片、视频、文本等等...

那么我们如何接收和发送这些数据并且让别人知道我们发送的是什么玩意。

这就需要我们规定好双方发送的数据格式了,这只是编码格式。

换一个大的角度,每台主机在发送和接收数据的时候,数据都会贴上一些标识,就想我们的快递贴上了收件人和发件人的信息,我们如何准确识别这些信息?这就需要我们做好一个约定,这里填的是什么数据,你就以什么方式来解析数据。这就是协议。

通过协议来规范我们主机的通信,即使计算机的生产厂商有很多、操作系统的种类也有很多、计算机的网络硬件设备也有很多,但是因为大家都遵守同一个网络通信协议,才使得计算机与计算机之间能畅通地通信。

协议分层

对于网络协议往往被拆分成很多层。

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

在代码中,类似于定义好⼀个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务)

• 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可

• 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

OSI 七层模型

OSI:即Open System Interconnection,开放系统互连

由于OSI 七层模型过于复杂冗余,现代我们网络通信采用的是TCP/IP协议。

TCP/IP五层(四层)模型

OSI 七层模型和 TCP/IP五层模型的对比图:


限制我们来具体介绍TCP/IP 五层模型:

物理层 :固定了网络通信中的一些硬件设备的要求,例如网线、wifi、光纤的接口数量等等...
数据链路层 :实现两个相邻的设备(主机/路由器/交换机,相邻的节点)之间如何进行通信的,例如:通过网线将电脑连接到交换机或者路由器上
网络层 :实现了任意两个设备之间是如何通信的,考虑的是数据该按什么路径来进行传输。
传输层 :实现了两个任意的设备如何进行通信,和网络层不一样的是传输层只考虑起点和终点,类似于你寄件填写的快递信息,你只需要填写收件人和发件人的地址和手机号即可。
应用层:实现数据的包装和解析,你拿到数据包的时候,如何把它解析,或者你发送数据的时候,使用什么格式来进行包装。
为什么TCP/IP 模型还有四层?

因为物理层和数据链路层 都是贴近硬件设备的,所以我们将这两层合并到一层称为网络接口层,本质上和五层模型没有区别。
网络设备所在分层:
我们的电脑(主机)实现了TCP/IP 五层模式,操作系统内核实现了物理层到传输层,应用程序负责应用层

这里我们以传统的路由器和交换机为例:路由器实现了物理层到网络层,交换机实现了物理层到传输层。

现代的路由器和交换机相比之前有了很大的进步,不仅仅局限于这两三层,还有实现了四层等等,这里不展开讲述。
集线器只实现了物理层

每一层对的数据进行了怎样的封装和解析?

我们先从发送方来看:

首先用户发送数据,这个数据会遵守该程序的应用层协议对其进行封装 ,应用层协议往往是开发这个程序的程序员自己定义的


应用层接着调用传输层的接口(socket api),传输层的协议主要有两个:TCP 和 UDP 假设使用TCP 协议,那么在用户传来的数据前面就会加上 TCP 报头

TCP 数据包 = TCP 报头(header) + TCP 载荷(payload)(整个应用层传过来的数据包)

TCP 报头包含很多属性和信息,其中就有源端口号和目的端口号


然后传输层调用网络层的接口,网络层最主要使用的协议是 IP 协议,会将传输层传来的数据前面加上 IP 报头

IP 数据包 = IP 报头 + IP 载荷(整个传输层的数据包)

IP 报头同样也有很多属性和信息,其中包含 源IP 和 目的IP

**>IP 协议和 TCP 协议本身不关系载荷内容是什么,它们只负责在前面添加信息而已

其中五元组之中的协议类型也包含在IP报头和TCP报头里,TCP报头则会记录应用层使用哪个应用层协议(即数据包应该交给哪个应用程序),同理 IP 报头记录了传输层使用了什么协议,每一层的报头也记录着上一次使用了什么协议类型**


接着调用数据链路层的 api,把 IP 数据包交给数据链路层进行进一步加工,在数据链路层中核心协议 就是以太网协议。

以太网数据帧 = 帧头 + 载荷 + 帧尾


最后来到物理层,网卡会把数据链路层传输过来的数据包以 光信号/电信号/电磁波信号 的形式传播出去。自此数据就从主机发送出去了。


现在假设,数据包经过艰难险阻,通过无数交换机和路由器终于来到了收件人的主机上,让我们来看一下收件人的主机是如何解析数据包的。

五元组

上面我们提到我们要规范好数据的传输格式,我们要保存好收件人和寄件人的信息,在TCP/IP 协议中使用五元组来标识一个网络通信

源IP :标识源主机,也就是发件人的IP 地址
源端口号 :标识源主机的通过哪个进程发送数据的。
目的IP :标识目的主机,也就是收件人的IP 地址
目的端口号 :标识目的主机接收数据的进程
协议类型:标识双方之间进行通信所遵守的协议。

相关推荐
菜鸟233号几秒前
力扣513 找树左下角的值 java实现
java·数据结构·算法·leetcode
Neoest1 小时前
【EasyExcel 填坑日记】“Syntax error on token )“: 一次编译错误在逃 Runtime 的灵异事件
java·eclipse·编辑器
自在极意功。1 小时前
Web开发中的分层解耦
java·microsoft·web开发·解耦
是一个Bug1 小时前
ConcurrentHashMap的安全机制详解
java·jvm·安全
断剑zou天涯1 小时前
【算法笔记】bfprt算法
java·笔记·算法
番石榴AI1 小时前
java版的ocr推荐引擎——JiaJiaOCR 2.0重磅升级!纯Java CPU推理,新增手写OCR与表格识别
java·python·ocr
鸽鸽程序猿2 小时前
【项目】【抽奖系统】抽奖
java·spring
txzz88882 小时前
网络应用netstart命令
网络·windows·计算机网络·microsoft
GoogleDocs2 小时前
基于[api-football]数据学习示例
java·学习
卓码软件测评2 小时前
第三方软件验收评测机构【Gatling安装指南:Java环境配置和IDE插件安装】
java·开发语言·ide·测试工具·负载均衡