【计算机网络】⼀台计算机是如何把数据发送给另⼀台计算机?

计算机网络

⼀台计算机是如何把数据发送给另⼀台计算机?

网络参考模型-------->TCP/IP五层模型
在这里插入图片描述

1.物理层

⼀台计算机与另⼀台计算机要进⾏通信,第⼀件要做的事是什么?当然是要把这台计算机与另外的其他
计算机连起来啊,这样,我们才能把数据传输过去。例如可以通过光纤啊,电缆啊,双绞线啊等介质把
他们连接起来,然后才能进⾏通信。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4OGDQtEK-1641965031164)(img_1.png)]

物理层负责把两台计算机连起来,然后在计算机之间通过⾼低电频来传送0,1这样的电信

2.数据链路层

物理层只是负责将计算机连接起来,并且在计算机中之间传输0,1这样的电信号。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zm7Ois3m-1641965031165)(img_2.png)]

我们需要制定⼀套规则来进⾏0,1的传送。例如多少个电信号为⼀组啊,每⼀组信号应该如何标
识才能让计算机读懂啊等等。
于是,有了以太网协议

2.1 以太网协议

以太⽹协议规定,⼀组电信号构成⼀个数据包,我们把这个数据包称之为帧。每⼀个桢由标头(Head)和数据(Data)两部分组成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWqXja2J-1641965031165)(img_3.png)]

帧的⼤⼩⼀般为 64 - 1518 个字节。假如需要传送的数据很⼤的话,就分成多个桢来进⾏传送。
标头部分主要是⼀些说明数据,例如发送者,接收者等信息。⽽数据部分则是这个数据包具体的,想给接收者的内容。

⼀个桢的⻓度是 64~1518 个字节,也就是说桢的⻓度不是固定的,那你觉得标头部
分的字节⻓度是固定的吗?它当然是固定的啊,假如不是固定的,每个桢都是单独发的,那计算机怎么知道标头是⼏个字节,数据是⼏个字节呢。所以标头部分的字节是固定的,并且固定为18个字节。

如何区分数据到底是发送给哪个计算机的,所以每个计算机都得有一个唯一的标识地址,所以MAC地址出现了。

2.2 MAC地址

连⼊⽹络的每⼀个计算机都会有⽹卡接⼝,每⼀个⽹卡都会有⼀个唯⼀的地址,这个地址就叫做 MAC 地址。计算机之间的数据传送,就是通过MAC地址来唯⼀寻找、传送的。

2.3 广播和APR协议

(1). 广播
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhoWaPOo-1641965031165)(img_4.png)]

如图,假如计算机A知道了计算机B的MAC地址,然后计算机 A想要给计算机B传送数据,虽然计算
机A知道了计算机B的MAC地址,可是它要怎么给它传送数据呢?计算机A不仅连着计算机B,⽽且
计算机A也还连着其他的计算机。虽然计算机A知道计算机B的MAC地址,可是计算机A却不知道
知道计算机B是分布在哪边路线上,为了解决这个问题,于是,有了⼴播的出现。

在同⼀个⼦⽹中,计算机A要向计算机B发送⼀个数据包,这个数据包会包含接收者的MAC地址。当
发送时,计算机A是通过⼴播的⽅式发送的,这时同⼀个⼦⽹中的计算机C, D也会收到这个数据包的,然后收到这个数据包的计算机,会把数据包的MAC地址取出来,与⾃身的MAC地址对⽐,如果两者相同,则接受这个数据包,否则就丢弃这个数据包。
这种发送⽅式我们称之为⼴播,就像我们平时在⼴场上通过⼴播的形式呼叫某个⼈⼀样,如果这个名字是你,你就理会⼀下,如果不是你,你就当作听不⻅。

(2). ARP协议

那么问题来了,计算机A是如何知道计算机B的MAC 地址的呢?这个时候就得由ARP协议这个家伙来解决了,不过ARP协议会涉及到IP地址,我们下⾯才会扯到IP地址。因此我们先放着,就当作是有这么⼀个ARP协议,通过ARP协议我们可以知道⼦⽹中其他计算机的MAC地址。

3.网络层

上面我们说到子网的关键词,实际上我们所处的网络,是由无数个子网络组成的。
只有同为一个子网下的计算机才可以收到广播。

那么如何区分计算机是否是用一个子网下的呢,如果是,那就用广播的方式把数据传送给对方,如果不是就将数据发给网关,网关进行转发。
为了解决这个问题,于是,IP协议出现了

3.1 IP协议

IP协议,他所定义的弟子,我们称为IP地址。IP协议有两种版本,一种是IPv4,另一种是IPv6。主要讨论IPv4。
这个IP地址由32位的二进制组成,我们一般把它分成4段的十进制表示,地址范围为0.0.0.0~255.255.255.255

每一台想要联网的计算机都会有一个IP地址。这个IP地址被分为两部分,前面一部分代表网络部分,后面的为主机部分,并且网络部分和主机部分所占用的二进制位数是不固定的。
如果两台计算机的网络部分是一样的,我们就说着两台计算机是处于同一个子网中。

例如192.168.43.1和192.168.43.2,假如这两个IP地址的网络部分为24位,主机部分8位,那么他们的网络部分都为192.168.43,所以他们都处于同一个子网中。
但是网络部分和主机部分是不固定的,我们不清楚网络部分和主机部分各占几位,也就是说单凭IP地址是无法判断是否处于同一个子网中,所以子网掩码出现了。

  1. 子网掩码

⼦⽹掩码和IP地址⼀样也是 32 位⼆进制数,不过它的
⽹络部分规定全部为 1,主机部分规定全部为 0.也就是说,假如上⾯那两个IP地址的⽹络部分为 24
位,主机部分为 8 位的话,那他们的⼦⽹掩码都为 11111111.11111111.11111111.00000000,即
255.255.255.0。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fSRL7FkL-1641965031166)(img_7.png)]

有了⼦⽹掩码,如何来判端IP地址是否处于同⼀个⼦⽹中呢。显然,知道了⼦⽹掩码,相当于我们知道了⽹络部分是⼏位,主机部分是⼏位。我们只需要把 IP 地址与它的⼦⽹掩码做与(and)运算,然后把各⾃的结果进⾏⽐较就⾏了,如果⽐较的结果相同,则代表是同⼀个⼦⽹,否则不是同⼀个⼦⽹。

例如,192.168.43.1和192.168.43.2的⼦码掩码都为255.255.255.0,把IP与⼦码掩码相与,可以得到他们都为192.168.43.0,进⽽他们处于同⼀个⼦⽹中。

  1. ARP协议

上面粗略的提到了ARP协议,有了IP协议的知识,我们再来看一下ARP协议。
有了两台计算机的IP地址和子网掩码,我们就可以判断出它们是否处于同一个子网中了。

假如他们处于同一子网中,计算机要给计算机B发送数据时。可以通过ARP协议来得到计算机B的MAC地址。

ARP协议也是通过广播的形式给同一个子网中的每台电脑发送一个数据包(数据包中会包含接收方的IP地址)。对方接收到数据包后,会判断拿到的IP地址与自身的IP地址对比。
如果相同,则把自己的MAC地址回复给对方,否则就丢弃这个数据包。这样,计算机A就能知道计算机B的MAC地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yFsUNF2-1641965031166)(img_8.png)]

  1. DNS服务器

我们之前了解过ARP协议,如果说ARP协议是将IP地址转换为MAC地址,那么DNS协议则是将域名转换为IP地址(也可将IP地址转换为相应的域名地址)

3.2 DNS理论知识

1.域名的层次结构

域名系统必须要保持唯一性。
为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:

  1. 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成
  2. 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)
  3. 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。
  4. 级别最低的域名写在左边,级别最高的域名写在右边。

域名服务主要是基于UDP实现的,服务器的端口号为53。

2.域名的分级

域名可以划分为各个子域,子域还可以划分为子域的子域,这样就形成了顶级域、二级域、三级域等。

国家顶级域名中国:cn,美国:us,英国uk...
通用顶级域名公司企业:com,教育:edu,政府:gov,国际:int,军事:mil,网络:net,非盈利组织:org...
反向域名arpa,用于PTR查询(IP地址转换为域名)

域名服务器

域名是分层结构,域名服务器也是对应的层级结构。

有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。

分类作用
根域名服务器最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助
顶级域名服务器负责管理在该顶级域名服务器下注册的二级域名
权限域名服务器负责一个区的域名解析工作
本地域名服务器当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区 我们需要注意的是:
  1. 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器
  2. 每一级域名服务器都知道下级域名服务器的IP地址
  3. 为了容灾, 每一级至少设置两个或以上的域名服务器

域名解析过程

域名解析总体可分为以下过程:
1.输入域名后,先查找本地域名服务器,域名服务器先查找自己的数据库中的数据

2.如果没有,就向上级域名服务器进行查找,以此类推

3.最多回溯到根域名服务器,肯定能找到这个域名的IP地址

4.域名服务器自身也会进行一些缓存,把曾经访问过的域名和对应的IP地址缓存起来,可以加速查找过程

具体如下:

1.主机先向本地域名服务器进行递归查询

2.本地域名服务器采用迭代查询,向一个根域名服务器进行查询

3.根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址

4.本地域名服务器告诉本地域名服务器进行查询

5.顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址

6.本地域名服务器向权限服务器进行查询

7.权限服务器告诉本地域名服务器所查询的主机的IP地址

8.本地域名服务器最后把查询结果告诉主机

上述提到两个概念:递归查询和迭代查询

1.递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机

2.迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。
迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。

因此,网络层的功能就是让我们在茫茫人海中,能够找到另一台计算机再哪,是否属于同一个子网等。

传输层

通过物理层、数据链路层以及⽹络层的互相帮助,我们已经把数据成功从计算机A传送到计算机B了,可是,计算机B⾥⾯有各种各样的应⽤程序,计算机该如何知道这些数据是给谁的呢?

这个时候,**端⼝(Port)**这个家伙就上场了,也就是说,我们在从计算机A传数据给计算表B的时候,还得指定⼀个端⼝,以供特定的应⽤程序来接受处理。

也就是说,传输层的功能就是建⽴端⼝到端⼝的通信。相⽐⽹络层的功能是建⽴主机到主机的通信。

也就是说,只有有了IP和端⼝,我们才能进⾏准确着通信。这个时候可能有⼈会说,我输⼊IP地址的时候并没有指定⼀个端⼝啊。其实呢,对于有些传输协议,已经有设定了⼀些默认端⼝了。例如http的传输默认端⼝是80,这些端⼝信息也会包含在数据包⾥的。

传输层最常⻅的两⼤协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最⼤的不同就是 TCP 提供可靠的传输,⽽ UDP 提供的是不可靠传输.

应用层

虽然我们收到了传输层传来的数据,可是这些传过来的数据五花⼋⻔,有html格式的,有mp4格式的,各种各样。你确定你能看的懂?

因此我们需要指定这些数据的格式规则,收到后才好解读渲染。例如我们最常⻅的 Http 数据包中,就
会指定该数据包是 什么格式的⽂件了

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值