朋友们、伙计们,我们又见面了,本期来给大家带来网络通信相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!
C 语 言 专 栏:C语言:从入门到精通
数据结构专栏:数据结构
个 人 主 页 :stackY、
C + + 专 栏 :C++
Linux 专 栏 :Linux
目录
1. 局域网通信
1.1 Mac地址
MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
同一局域网中,多台主机可以直接通信吗?如何通信呢?
- 同一局域网中,两台主机可以直接通信;
- 原理就是:每一个网卡都有Mac地址
在一个局域网中,会有多台主机,A主机发送的数据其他所有的主机都可以看到,那么此时这些主机就可以通过自己的Mac地址来进行判别接收。
但是需要注意的是,如果同一时间有多个主机在发数据呢?
此时就会造成数据碰撞的问题,在局域网中叫做碰撞域,一旦发生碰撞,数据就失效了,所以就需要执行避免碰撞的算法,所以要正确的发送数据,任何时刻,只允许一台主机在局域网中发送消息!
所以在一个网络中,进行碰撞检测,碰撞避免这种网络方式叫做以太网。
因此局域网就是一块临界资源,碰撞检测和碰撞避免,重发的就是完成互斥访问。
1.2 局域网传输的基本流程
同一个网段内的两台主机进行文件传输:
接下来对上面的图片进行细节处理:
假设这两个主机就传输的是“你好”,那么A主机发送了这个数据,此时数据并不是直接到达B主机,而是要从上向下进行数据的交付,在交付到应用层时,此时就会添加应用层的报头,添加完成之后的数据就是由报头 + 有效载荷构成的了,此时也并不是直接传输到B主机的应用层,而是继续向下交付,到达传输层时,添加传输层的报头,此时也并不是直接传输到B主机的传输层,而是继续向下交付,添加报头,以此类推,这个过程就叫做封装报头,当交付到数据链路层时,添加数据链路层的报头,然后通过以太网传输给B主机的数据链路层,B主机拿到这个数据时,就要对报头进行解包,将报头和有效载荷分离,然后继续向上交付,每一层都解包对应的报头,直到主机B拿到原始数据,这个过程就叫做解包和分用。
我们通常把应用层的报文叫做:request&response
传输层的报文叫做:数据段
网络层的报文叫做:数据报
数据链路层的报文叫做:数据帧
对于封装一定要考虑的是后面解包的问题,每一层协议都要解决的两个问题就是:
① 如何将报文中的报头和有效载荷进行分离;
② 如果将自己的有效载荷交付给上一层。
2. IP地址
IP地址是在IP协议中,用来标识网络中不同主机的地址;
对于IPv4来说,IP地址是一个4字节,32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址,例如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是 0 - 255;
IP地址分为公网ip和内网ip,公网ip用于来标识互联网中唯一的一台主机。
2.1 IP地址和Mac地址
IP地址是一个最终目标,从哪里来,去往哪里,永远不变的;
Mac地址是一个当前目标,上一站从哪里来,下一站去哪里,一直在变的。
IP地址的意义就是进行路径的选择。
3. 跨网络通信
跨网段的主机的文件传输。数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
那么令牌环网:拥有令牌的的主机可以向局域网中发送数据(相当于局域网中的一把锁)
接下来对上面的图片进行细节处理:
- 假设这两个主机就传输的是“你好”,那么A主机发送了这个数据,此时数据并不是直接到达B主机,而是要从上向下进行数据的交付,在交付到应用层时,此时就会添加应用层的报头,添加完成之后的数据就是由报头 + 有效载荷构成的了;
- 此时也并不是直接传输到B主机的应用层,而是继续向下交付,到达传输层时,添加传输层的报头,此时也并不是直接传输到B主机的传输层,而是继续向下交付,添加报头;
- 当交付到IP层时,添加IP层的报头,IP报头中就需要有起始IP和目的IP,但是报文并不能直接传输到对方IP层,继续向下交付;
- 到达链路层时,也需要添加数据链路层报头,数据链路层的报头中有起始Mac地址和目的Mac地址,然后通过以太网传输给中间路由器,路由器是可以识别Mac报头,路由器也是个设备,也要有自己的IP地址和Mac地址,路由器将数据通过令牌换网交付给B主机,并封装令牌环报头;
- 到达主机B的数据链路层,B主机拿到这个数据时,就要对报头进行解包,将报头和有效载荷分离,然后继续向上交付,每一层都解包对应的报头,直到主机B拿到原始数据。
同层协议要发的就是同层协议要接受的;
在发送报文时,Mac报头字段一直在变,IP报头一直不变;
IP层以上:网络报文无差异!所以一切皆IP,网络IP地址屏蔽了底层网络的差异。