网络编程osi五层协议(一)

五层协议:
应用层:每个软件对于数据都有不同的自定义协议

传输层:建立端口到端口的通信
端口:确定软件的位置
每个软件都有固定的端口
端口范围:0-65535 0-1024为系统占用端口
端口 + ip + mac + 广播 能确定世界上任何一个计算机软件的位置

网络层:找到对方局域网的位置
根据ip协议寻找对方局域网的位置
ip + mac +广播就能确定世界上任何一台计算机的位置了

数据链路层:
定义了电信号的分组方式,主要是对数据进行分组
封包:源地址,目标地址
早期每个公司都有不同的标准,后来统一标准:以太网协议
规定数据分为两个部分:
数据头 | 数据
head | date
数据头规定固定字节:18个字节
数据头部分 :
源地址:6个字节
目标地址:6个字节
数据类型:6个字节
将数据分为组的形式:一组电信号:数据报 也叫一帧
head长度+data长度= 最短64字节 最长1518字节,超过最大限制就分片发送
data长度也就是数据包的内容
网卡中的mac的地址:每个网卡出厂的时候都会被烧上独一无二的mac地址
12位16进制数组成:
前六位是厂商编号 后六位:流水线号 40-8D-5C-93-F1-DE
计算机的通信方式: 广播
mac+广播的理论上可以跟所有的计算机进行通信,
但是实际上会产生广播风暴,效率低,工作量太大
所有mac+广播的形式仅限于局域网内

物理层:
基于电器特性发送高低电平 0101011 高电压对应数字1 低电平对象数字0

例子:
给对方送一个消息'今晚吃鸡'
软件部分:
应用层:将消息封装成数据类型譬如字典{msg:'今晚吃鸡'}
操作系统部分:
传输层:确定端口,确定计算机中软件的位置8000 | {msg:'今晚吃鸡'}
网络层:ip:192.168.16.1 | 8000 | {msg:'今晚吃鸡'}
确定计算机在哪个局域网
数据链路层:源mac地址 目标mac地址 | ip:192.168.16.1 | 8000 | {msg:'今晚吃鸡'}
确定计算接在局域网的哪个位置
物理层:网线将数据以电信号的形式发出去

细节补充:
原则上同一个局域网就是通过源mac地址+目标mac地址+数据+广播 可以将数据传输
这里有一个交换机mac的地址自主学习功能,交换机有一个mac与网口的对照表
交换节第一次链接电脑的时候:
在已知对方ip的情况下,网口进行连接的计算机发送一个数据.发送给目标mac,第一次的时候不知道目标的mac的地址
但是 ip地址 +ARP协议 可以计算出对方的mac地址
例子:
第一次发送给ip地址为192.168.11.1
通过广播:在同一局域网内广播一个数据
(源mac地址40-8D-5C-93-F1-DE ,对方mac FF-FF-FF-FF-FF-FF)(源ip :192.168.10.22 对方ip 192.168.10.24)
找到符合的ip:
回传一个数据:
(源mac地址40-8D-5C-92-F1-DE ,对方mac FF-FF-FF-FF-FF-FF)(源ip :192.168.10.22 对方ip 192.168.10.24)
交换节会记住回传的mac地址

同一局域网内:
第一次发送数据需要用广播的形式,根据ip获得对方的mac地址,将mac地址与网口写入交换机的对照表
第二次发送数据(计算机和网口没更换):不用广播,直接从mac对照表寻找mac地址

如何确定局域网的位置:
网络层:通过ip协议确定局域网的位置
怎么通过ip协议确定局域网的位置:
同一局域网内的所有计算机的ip地址绝对不同
ip+子网掩码才能确定是否在同一网段
如果前提都是c类的子网掩码:最多能有253个ip
0 不能用 255不能用 254不能用 有253个ip

ip + mac + 广播 能获取世界上任何一台电脑的位置


总结:
通过计算机发送数据, 我要先获取对方的ip和子网掩码:
去判断是不是同一个局域网
如果是同一个局域网: 通过IP ,ARP协议获取mac发送数据.
如果不是同一个局域网: 网关(路由协议)一层一层的发送.
原文地址:https://www.cnblogs.com/shicongcong0910/p/10396518.html