2004年,小明因为给他爹打电话(座机)费用太贵,所以约定一种信号,响一次是报平安,响两次是要钱,响三次才需要接通。
协议:是一种约定,这种约定可以减少通信成本。
A向B发送信息,距离很远,必须要经过设备的中转,才能到达B端电脑。
网络协议就是解决:网络通信中因为距离变远而出现的新问题。
每个层次或模块负责特定的功能,并通过定义良好的接口与其他层次或模块进行交互。
好处:层与层之间是松耦合的,可以随时替换和方便维护。
OSI七层模型
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
因为有了用户层,用户会自己实现会话层,表示层。而平常也不说物理层,所以最常是四层。
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆
(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决
定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测
到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太
网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规
划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标
主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问
协议(Telnet)等. 我们的网络编程主要就是针对应用层.
因为TCP 和 IP 是OS内部实现的,网络也属于操作系统源代码的一部分。
所以只要遵守TCP IP协议,不同的OS系统都能够通信。
而双方想看到相同的数据类型,所以就得在网络传输上约定好,所以协议就是struct结构体。
每个网络有自己的Mac地址,在局域网中所有人都能收到消息,但根据要送达的地址发现自己不同,就丢弃了数据。
MAC地址是物理网卡硬件地址,在出厂时就会设定,不能修改,它的大小是6字节,一台计算机可以绑定多个网卡,进而可以拥有多个MAC地址。
因为C一直给局域网发数据,和我A发的数据就会进行碰撞,此时都要停下来。
所以:局域网本质是个临界资源,只不过是在事后(发信息后拦截)处理的。
碰撞检测:比如令牌环网就是持有令牌才能够上网。
如何黑掉一个局域网? 只需要给它一直发送垃圾数据进行碰撞,就可以使得另一主机无法上网。
自己电脑的Mac地址:Xshell下 ifconfig命令可以看到 ether: xxxx
以太:物理上没有的介质,但网络上可以有的数据传输的介质。
每向下发一层,就多一层协议报头,而每一层新加的报头是协议报头,上面所有层的报头+数据 变为有效载荷。
理解:“报头” = 协议报文 + 有效载荷,报文在不同层有不同的名字。
应用层 —— request / response 传输层 —— 数据段 网络层 —— 数据报 链路层 —— 数据帧
而到另一台主机上,就要自底向上进行解包和分用
1.解包 : 将报头和有效载荷进行分离
2.分用 : 将自己的有效载荷交付给上一层的协议。
看图:主机A 要发送数据到 主机 B,但是两个主机不在一个网络中,而中间的路由器,又同时存在于两个网络,那就可以让A把数据发给路由器了。那问题是发给路由器后,还怎么把数据传给主机 B呢?
上图:两套地址 : 源头 和 目的地(IP地址) 上一站 和 下一站(MAC地址)。
主机A 到 路由器 :
先自顶向下进行封装,通过以太网通信到路由器(因为MAC地址只在同一局域网中有效,所以访问不到B的,只能访问到路由器的MAC地址),传输到路由器的底层,还是得自底向上进行解包和分用,到达路由器(只剩IP地址,和有效载荷)。
路由器 到 主机 B:
还是得自顶向下做封装,MAC地址的dest变为MACB,通过令牌环网通信到主机B底层,再解包和分用直至最上层拿到”你好“。
看图:在IP层网上,两个主机对应的协议没有差别(我发的就是你收的),而底层一个是以太网的报头,一个是令牌环网的报头,但在IP层就已经是一个东西了。(一切皆IP)