当前位置:网站首页>网络的拓扑结构
网络的拓扑结构
2022-06-12 11:11:00 【Diligent_wu】
网络的拓扑结构
最初计算机的不同主机之间是不能通信的,只能处理各自独立的数据,但当需要三个不同数据需要合并时,三台主机之间就必须建立通信,交换机将不同的主机连接起来,这时就有了数据交换的能力。
随着主机的增多,就有了局域网的雏形。
当不同的局域网之间需要数据连通时,路由器将不同的局域网连接起来,就组成了覆盖范围更广的城域网或广域网
局域网(覆盖范围1km以内)
城域网(覆盖范围20km以内)
广域网(覆盖访问20km以上)
IP协议
IP地址:
ipv4: uint_32_t
--DHCP 动态地址分配
谁用给谁分配
--NAT 网络地址转换
给多台主机组织一个私网,私网中的主机使用私网的IP地址,对外通信时使用唯一的IP地址
ipv6: uint_8_t[16]
用于在网络中唯一标识一台主机
端口号:
unit16_t
在一台主机上唯一标识一个网络通信的进程。
网络中的每条数据都带有两条信息:源端端口号/对端端口号
IP地址和端口号搭配使用,表示一台主机上的哪一条数据,要发送到哪一台主机的哪一个进程上去。
TCP/IP模型:
通信协议:数据格式约定
通过网络中服务不同,使用的协议不同,划分了不同的协议分层。
协议分层:OSI/TCP/IP
OSI七层模型:应用层/表示层/会话层/传输层/网络层/链路层/物理层
TCP/IP五层模型:应用层/传输层/网络层/链路层/物理层
对于层状结构,尽管我们知道各层之前联系要依靠很多设备间接通信,但是由于这样的解耦合,我们仍然可以认为各层之间是直接沟通的:
应用层:负责应用程序之间的沟通 --- HTTP/FTP/DNS/DHCP....
传输层:负责端与端(两个节点)之间的数据传输 --- TCP/UDP
应用层和传输层没有对饮的设备,只在通信双方的计算机中存在,甚至有的路由器中就包含了
网络层:负责地址管理与路由选择 --- 主机IP地址的描述 --- IP --- 路由器
链路层:负责相邻设备之间的数据传输 --- 网卡硬件地址的描述(mac地址的描述) --- 以太网协议 /令牌环网--- 交换机
物理层:负责物理光电信号的传输 --- 以太网协议 --- 网线、同轴电缆、光纤、wifi无线网使用的电磁波、调制解调器(猫)集线器
关键名词:
集线器:光电信号在传输过程中是会衰减的,如果有这样一个设备可以对光电信号进行加强,使得光电信号可以传输的更远,
就可以实现远距离数据传输。这个设备就是集线器
以太网:以太网的名字来源于20世纪20年代的物理学假说:“以太假说”,物理学家认为,光的传输是需要媒介的,
太阳照到地球有八分钟的路程,那么是不是宇宙中充满了像“以太”这样的物质呢?当然这个假说被推翻了。
但是当时参与演讲的还有两个计算机工程师,既然在物理学中不存在,但是在我们的局域网里是存在的呀,所以就命名了“以太网”作为互联网的网络标准。
层状结构的网络通信
在一台计算机主机中,从上到下由用户层、系统调用层、内核层、驱动、硬件组成,负责网卡驱动的部分就是网络通信,也叫网络协议栈(应用层、传输层、网络层、链路层)。网络通信时,两台主机之间的通信,是由两台主机的网络协议栈完成的,所以可以理解为,就是两个网络协议栈的通信。
在网络通信中,网络层负责将数据发送到哪里的问题,传输层负责数据真正的传输过程,这就好比一个武士,练就了一身武艺(传输层)他要杀人,也知道要杀谁(网络层),但是他可以保证一定能杀死吗?
这时候它就需要一把宝刀,可以保证他可以杀死对手并或者回来(传输层:负责处理数据传输过程中遇到的问题,保证数据安全可靠)
但是他为什么要啥人呢?他是一个刺客,客户要他杀谁,他就得去(应用层)
这样的层状结构,当网络通信出现问题时,可以根据问题快速找出错误位置,所以层状结构的本质就是:
1.软件工程上的解耦合,层与层之间只有接口的相互调用关系
2.增加代码的可维护性和可扩展性
局域网(物理层)通信:
在局域网通信中,本质是,所有的主机都收到了任何数据,只不过应该筛选提交上来了,收到发给自己的数据。
1.局域网中,网络本身的特性是要求,同一时刻只能有一个机器进行发送数据。
2.如果网络中的数据发生了“碰撞”,当前主机是可以检测到的
3.所有的主机都要进行“避免碰撞算法”(就是等一下再发)
MAC地址:
MAC地址就是局域网地址,也叫以太网地址或物理地址,顾名思义,就是局域网中数据传输的地址。用于在网络中标识一个网卡的位置,是全球唯一的。
MAC数据帧:
在数据经过链路层时,会对数据进程封包,封包的内容就包括源端的mac地址和对端的mac地址。组成的数据就是mac数据帧。
链路层封包完成之后,就会将数据扔进局域网中,所有的主机都收到了这个mac数据帧,
单项数据发送:若这个数据帧dest_src等于某一个主机(假设B)的src_mac,那么所有的主机经过解析之后,B知道,这是发给自己的,就向上层交付,其他主机知道这不是发给自己的,就丢弃。
广播发送数据:若这个数据帧的dest_mac等于FFFF……FFFF,即发送给全部主机,所有的主机都知道这是发送给自己的,就像上层交付。
网络通信中的数据封装与分用流程:

在一个局域网中,A端想要发送一个“你好”给B端,经历了TCP/IP的五层协议的封装与分用,每经过一层,对应的协议就会给有效数据添加报头,这个报头其实就是一个结构体,添加在缓冲区中数据的前面。
当报头添加完毕之后,可以进行传输了,根据IP协议的ip和port就可以找到对应的B端主机,将封装好的数据发送给B端。
B端收到数据之后,就会自下而上对数据进行解包,分用。
那么当前层是如何得知报头和有效载荷之间的分割呢?
1.报头定长
2.自定义描述字段
怎么知道,将有效载荷交付给哪个上层呢?
每个报头结构体中都包含了一个type字段,可以确定有效载荷会交给谁
也是因为 这一点,我们可以认为,服务端的某一层和客户端的某一层直接联系
这就是所有协议的共性:
广域网(互联网)通信
局域网链路层的网络不只是有以太网,还有令牌环网。
两者的区别就是,针对在网线中发生碰撞的处理方法不用,令牌环网是谁拿到令牌谁就发送数据。
其上层的方式相同,但是下层的组网方式是不同的。这就意味着,当局域网和局域网之前通信时,还要经过一些必要的过程。
当以太网的数据帧传输到路由器,路由器的物理层收到数据帧,向上交付给路由器的链路层,链路层完成解包,再讲有效载波交付到路由器的网络层。
网络层查看到数据的IP信息,就知道要发送给哪个局域网中的哪台主机,但是不是直接交给这台主机的网络层呢?
答案是绝对不是!
如果数据横跨两种不同组网方式的网络,那么还要使数据要能被对方网卡的驱动程序识别,所以路由器还必须向下层封包交付,再放入其网线碰撞域。
这个局域网的所有主机就开始识别,(以太网识别以太网,令牌环网识别令牌环网),最后收到数据,按照各自的格式向上交付。
这样的过程,保证了上层数据的完全一致,虽然下面的数据是不同的,但上层数据的交流完全不需要关心下层的不同。
IP地址:
上面的过程中,IP地址起着重要的作用:就是虚拟化了底层网络的差异(虚拟地址空间和一切皆文件也有这样的思想)
这样的虚拟化使得,上层交流不需要考虑下层的差异,使得通信变得方便起来。
上层只需要负责通信的内容,下层只需要构建好通信的方式,上层和上层之间的通信甚至不需要考虑下层。
网络字节序:
主机字节序:
字节序:cpu对内存中数据的存取顺序
主机字节序的分类:
大端字节序(低地址存高位)
小端字节序(低地址存低位)
主机字节序对网络通信的影响:造成数据二义
如下图,如果小端主机要发送一个整形1给一个大端主机,会按照小端字节顺序发送给大端主机,大端主机在收到数据之后,却会按照大端的字节序存入数据,这样一来小端主机发送的的整形1就变成了一个很大的数字。
网络字节序:
单单按照主机字节序的方式传输数据,一旦主机的大小端不同,就会造成数据二义,那么我们就需要制定一种数据传输的协议,避免这种事情的发生。
网络字节序:网络通信中的字节序标准(将自己的数据的字节序转换为标准的字节序之后再进行传输),避免因为主机字节序不同造成的数据二义。
网络字节序的标准——大端字节序
复习:
字节序针对的数据类型:存储单元大于一个字节的数据类型,short,int,long,float,double这种的。
char buf[]字符串是不需要考虑字节序的。
编写代码判断主机大小端:
Ⅰ
int a = 1; char* b = (char*)&a; if(b == 1){小端}
(b[0] 就是低地址,b[3]就是高地址)--- 地址一般用下标来说
(0x00 00 00 01 从左到右就是比特位的从高到低)
Ⅱ
union{int a,char b;}tmp_t tmp_t tmp; tmp.a = 1; if(tmp.b == 1) {小端}
union联合体成员共用同一个空间,如果a值为1,在空间中存储为:01 00 00 00(小端)或 00 00 00 01(大端),
而b是一个char类型,只获取一个字节大小,所以如果b,是01就是小端,b是00就是大端。
TCP和UDP
在网络通信协议分层中,我们应用层由程序员自己订立或选择,往下的各层由系统搞定。
在传输层我们说到两个协议:TCP和UDP
经常会被问到的问题是:在网络通信程序编程时,到底在传输层使用TCP协议好还是UDP协议好?
其实是不分好坏的,存在即合理。
tcp协议 是传输控制协议,它是面向连接,面向字节流,是可靠传输。
udp协议 是用户数据报协议,它是无连接的,面向数据报,是不可靠传输。
tcp保证可靠传输,但是速度没有udp快。
tcp应用于安全性要求高于实时性的场景,udp适用于实时性要求高于安全性的场景
边栏推荐
- A simple understanding of b+ tree
- Php中redis的keys问题
- 【CF1392D】D. Omkar and Bed Wars(环形与后效性dp)
- Immer source code reading
- PHP Apple internal purchase callback processing
- AcWing 131. 直方图中最大的矩形(单调栈经典运用 模板)
- (37) How bee uses different data source instances at the same time
- Building 64 bit wampserver and DVWA in win7 virtual machine
- The difference between meta universe chain games and traditional games
- MCUXpresso开发NXP RT1060(3)——移植LVGL到NXP RT1060
猜你喜欢

Building 64 bit wampserver and DVWA in win7 virtual machine

How to upload the video on the computer to the mobile phone without network

k52.第一章 基于kubeadm安装kubernetes v1.22 -- 集群部署

M-Arch(番外11)GD32L233评测-PWM驱动有源蜂鸣器

logrotate日志轮转方式create和copytruncate原理

Stream as a return value in WCF - who disposes of it- Stream as a return value in WCF - who disposes it?

Common methods of string class

M-Arch(番外10)GD32L233评测-SPI驱动DS1302
![[machine learning] practice of logistic regression classification based on Iris data set](/img/c6/0233545d917691b8336f30707e4636.png)
[machine learning] practice of logistic regression classification based on Iris data set

M-Arch(番外13)GD32L233评测-来点音乐
随机推荐
NFT数字藏品的可验证性和稀缺性
LVS基于应用层的健康状态检测
Malicious code analysis practice - lab03-01 Exe basic dynamic analysis
Grid layout
Verifiability and scarcity of NFT Digital Collections
AI - face
卡鱼刺别再喝醋吞米饭了!教你2招,让鱼刺安全“跑出来”
AcWing 1986. 镜子(模拟,环图)
^34作用域面试题
Common port description
蓝桥杯2015年CA省赛(填坑中)
Vite Basics
Class. Forname connection MySQL driver keeps throwing classnotfoundexception exception solution
Common tools download address
基于QT的旅行查询与模拟系统
DS18B20 digital thermometer (I) electrical characteristics, parasitic power supply mode and remote wiring
The difference between meta universe chain games and traditional games
Don't swallow rice with vinegar! Teach you 2 moves to make the fish bones "run out" safely
分布式存储探索
file_ get_ Contents() JSON after reading_ Decode cannot be converted to array