协议
协议在我的理解看来其实就是为了让全部计算机做通信而设计出来的一种约定
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式
而制定协议这件事情并不是所有人都能做的,而是有一定领导地位公司或者组织来提出来的。 像iso(国际标准化组织)这种组织,或者泰凌微这种公司
协议分层
当然协议是需要进行分层的,协议分层就是将协议进行分层,这样就可以更好将不同模块进行解耦
iso也制作了一个七层协议,但是呢?这个协议太过复杂了,但是设计得是相当的好的,层层之间是非常的完善的。但是现在市面上主流的还是**TCP/IP的全称是"传输控制协议/网际协议"(Transmission Control Protocol/Internet Protocol)**TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
•物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
• 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线 LAN 等标准. 交换机(Switch)工作在数据链路层.
• 网络层: 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
• 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
• 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
为什么要有 TCP/IP 协议?
• 首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA,IDE,SCSI 等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少。
• 其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议咯。
什么是 TCP/IP 协议?
• TCP/IP 协议的本质是一种解决方案
• TCP/IP 协议能分层,前提是因为问题们本身能分层
TCP/IP 协议与操作系统的关系(宏观上,怎么实现的)
通过这张图其实主要能get到的就是不管我们是什么样的操作系统只要我们有相同的协议,我们就能实现计算机之间的通信。
看这张图主机B为什么能收到A发来的消息呢?
因为双方都有同样的结构体类型 struct protocol。也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有"共识",能够识别对方发来的数据,这不就是约定吗?
关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型。因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
网络传输的流程
MAC 地址
MAC 地址用来识别数据链路层中相连的节点;
• 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
• 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址)
通过ifconfig命令就能查看到(ubuntu系统下)
• 以太网中,任何时刻,只允许一台机器向网络中发送数据
• 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞
• 所有发送数据的主机要进行碰撞检测和碰撞避免
• 没有交换机的情况下,一个以太网就是一个碰撞域
• 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac 地址判定
• 这里可以试着从系统角度来理解局域网通信原理初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程比特
而其中每层都有协议,所以当我进行进行上述传输流程的时候,要进行封装和解包
每一层都有自己的层的报头以及上层传下来的报文
所以报文=报头+有效载荷
通过网络发送数据时都会一层一层加报头,而在另一台等待接收数据的计算机又会一层一层进行解包,如果发现哪一层的报头不匹配就会将数据丢弃,反之就是到了需要接收数据的计算机了。
IP 地址
IP 协议有两个版本, IPv4 和 IPv6. 我们整个的课程, 凡是提到 IP 协议, 没有特殊说明的,默认都是指 IPv4
• IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;
• 对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;
• 我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点
分割的每一个数字表示一个字节, 范围是 0 - 255;跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
为什么又有IP地址这个东西呢?他和mac地址的区别是什么呢?
举个栗子:有个上海人想去洪崖洞
作为主机在网络中的唯一表示ip就像是我们出发地到达最终的目的地他是不会变的,而mac地址就像中转地址一样,上海到洪崖洞首先得从上海到达重庆对吧,再从重庆去到洪崖洞。所以在网络中,发送消息的计算机先将报文传输到路由,路由就是通过mac地址来确认的,路由再将报文发出去,最终到达目的ip地址计算机。
然后结合封装与解包,体现路由器解包和重新封装的特点
对比 IP 地址和 Mac 地址的区别
• IP 地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正)
• Mac 地址一直在变
• 目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依据,mac 地址是局域网转发的重要依据