网络复习篇——网络基础(一)

目录

一.同一数据链路发送数据

二.网络协议栈与操作系统的关系

三.封装,解包,分用

四.IP协议的屏蔽作用

[五.IP地址 VS Mac地址](#五.IP地址 VS Mac地址)


在看完《图解http》和《图解TCP/IP》之后我又把C++的网络课进行二刷,加深自己的理解。

一.同一数据链路发送数据

当我们向同一数据链路中的另一台主机发送数据时,我们的数据会广播到这个数据链路中的所有主机中。每个主机的数据链路层检查报文中的目的Mac地址与自己的是不是一样,不一样则丢弃,一样则向上传递到网络层,进而贯穿操作系统到应用层。

当同一数据链路中的两台主机同时发送数据时会发送数据碰撞,因为在网线中的数据都是电信号或者光信号。为了避免碰撞,有碰撞避免算法,该算法下,同一数据链路中的主机会生成随机数,在这个随机数时间后再发送这个数据到网线中,由于每个主机生成的随机数极大概率不一样,所以碰撞的概率就很小了。

令牌环网有令牌环算法,它将一个令牌依次分发给该数据链路中的主机,持有令牌的主机则可以向数据链路中发送数据,这个就如同多线程中的加锁,是一个道理。

交换机可用于划分碰撞域,进一步减小碰撞的可能性。

二.网络协议栈与操作系统的关系

应用层就是操作系统的上层应用,也就是用户态。

传输层和网络层则是操作系统内核提供的,主流的TCP/IP协议栈几乎在所有的操作系统中都支持。我们在socket编程时调用的接口就是在传输层上的。开发网络工具时还会用到网络层和数据链路层的接口。

数据链路层就对应操作系统中的驱动程序。因为硬件的接口是非常张牙舞爪的,所以驱动程序对硬件接口进行封装和对操作系统提供服务。网络中的数据链路层同样是网卡驱动在管理网卡。

物理层就对应操作系统管理的硬件了,在网络中是网卡设备。

网络通信的本质就是在贯穿协议栈,同时也在贯穿操作系统。

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
  • 对于一台路由器,它实现了从网络层到物理层;
  • 对于一台交换机,它实现了从数据链路层到物理层;
  • 对于集线器,它只实现了物理层。

可以说,一台主机可以有路由器,交换机,集线器的功能;一个路由器可以有交换机和集线器的功能。

但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)。

三.封装,解包,分用

网络通信的过程,本质就是发送端逐层封装 、接收端逐层解包的过程。

  1. 几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力。
  2. 几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议的能力。

四.IP协议的屏蔽作用

在跨子网传输时,我们要通过路由器进行路由选择,此时用到的是ip协议。在路由器中的ip协议这一层会将接收到的Mac帧报头被解包的数据,路由选择之后会再将数据链路的报头加上,如果以太网协议就加上以太网报头,如果是令牌环网就加上令牌环网协议报头。也就是IP协议屏蔽了底层网络的差异化,靠的就是工作在IP层的路由器。IP实现了全球主机的软件虚拟层,一切皆是IP报文!

五.IP地址 VS Mac地址

ip地址,尤其是目的IP,一般都是不会改变的,协助我们进行路径选择。

Mac地址,出局域网之后,原地址和目的地址都要重写 / 替换 ,让路由器重新封装数据链路报头

ipv4的IP地址4字节,ipv6的IP地址16字节。Mac地址6字节。

相关推荐
炸膛坦客13 分钟前
单片机/C/C++八股:(十九)栈和堆的区别?
c语言·开发语言·c++
不只会拍照的程序猿23 分钟前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python
2401_831824961 小时前
代码性能剖析工具
开发语言·c++·算法
是wzoi的一名用户啊~1 小时前
【C++小游戏】2048
开发语言·c++
源远流长jerry2 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
Sunshine for you2 小时前
C++中的职责链模式实战
开发语言·c++·算法
qq_416018722 小时前
C++中的状态模式
开发语言·c++·算法
2401_884563242 小时前
模板代码生成工具
开发语言·c++·算法
2401_831920742 小时前
C++代码国际化支持
开发语言·c++·算法
m0_672703313 小时前
上机练习第51天
数据结构·c++·算法