每层运行常见设备:
计算机之间需要用光缆、电缆、双绞线、无线电波等连接,完成组网,才能通讯
物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应 1,低电压对应 0
单纯的电信号 0 和 1 没有任何意义,必须规定电信号多少位一组,每组什么意思
数据链路层功能:定义传输数据的分组方式,数据格式
以太网协议
早期时各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议(ethernet)
规定:
一组点消耗构成一个数据包,叫做 帧
每一数据帧分成:报头 head 和数据 data 两部分
head包含(固定 18 个字节)
data包含(最短46个字节,最长1500字节)
head 长度 + data 长度 = 最短 64字节,最长1518字节,超过最大限制就分片发送
mac地址
head 中包含的源和目标地址由来,以太网协议(ethernet)规定接入 Internet 的设备都必须具备网卡,发送端和接收端的地址便是 mac地址,以便能找到发送和接收者。
mac 地址:每块网卡出厂时都有一个唯一的 mac地址,长度为 48 位 2进制,通常由 12 位 16 进制数表示(前六位是厂商编号,后六位是流水线号)
查看mac地址:本地连接 —— 详细信息 —— 物理地址
广播:
有了 mac 地址,同一网络内(同一局域网)的两台主机就可以互相通讯了(一台主机通过 arp 协议获取另一台主机的mac地址),ethernet 采用最原始的方式,广播的方式进行通讯,即计算机基本靠吼
有了 以太网协议、mac 地址、广播的发送方式,理论上世界上的计算机都可以互相通讯了。但是世界上的互联网是由一个个的局域网构成的,如果所有的通讯都是以以太网的广播方式传播,那么一台机器发送,全世界的机器都会收到,这将是一种灾难。
于是就有了网络层,定义了一种协议 —— ip 协议
ip 协议
在现实生活中,我们如果要给对方写信,除了信件内容以外,还需要填写信封地址。信封有两个重要信息。一个是收件地址,一个是收件人。收件地址表示这封信要寄到哪里?收件人表示信要寄给谁?同样的道理,在网络世界中,我们要发信息给别人,也需要知道收件地址、收件人。他们就是MAC地址和IP地址。MAC地址就是收件地址,IP地址就是收件人。
如果把网络比喻为我们生活的城市,那网卡就是城市中的建筑,MAC地址就是这些物理建筑的地址。而IP地址就是这些建筑中的人。
arp 协议
ARP协议(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
通信是基于 mac 的广播方式实现,计算机在发包时,获取自身的mac 是容易的,如何获取目标主机的 mac 地址,就需要通过 arp 协议
一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。
arp 协议功能:获取目标主机的 mac 地址,然后广播的方式发送数据包
如何获取mac地址?通过目标设备的IP获取。
协议工作方式:
每台主机 ip 都是已知的
例如:主机 172.16.10.10/24 访问 172.16.10.11/24
01. 首先通过 ip 地址和子网掩码区分出自己所处的子网
场景 | 数据包地址 |
---|---|
同一子网 | 目标主机mac,目标主机 ip |
不同子网 | 网关 mac,目标主机 ip |
02. 分析172.16.10.10/24 与 172.16.10.11/24 处于同一网络(如果不是,那么下表中目标 ip 为 172.16.10.1 ,通过 arp 协议获取网关的mac,由网关去获取目标的 mac
源 mac | 目标 mac | 源 ip | 目标 ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端 mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 数据 |
03. 这个包含以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标 ip 为自己的,就响应,返回自己 mac
同一局域网内,pc 1 与 pc 2 怎么通讯
pc1 mac FF:FF:FF:FF:FF:FF 192.168.11.10/24 192.168.11.11/24
首先以上述格式发包,通过交换机广播,所有 pc 拆包,然后根据 ip 来区分是否是自己的包,当符合时,回包:
pc2 mac pc1 mac 192.168.11.11/24 192.168.11.10/24
这样,pc 1 就获得了 pc 2的 mac 地址
pc1 mac pc2 mac 192.168.11.10/24 192.168.11.11/24 数据
不在同一局域网内,pc1 与 pc4 通讯
# 获取 网关 1 mac
pc1 mac FF:FF:FF:FF:FF:FF 192.168.11.10/24 192.168.11.1/24(网关)
再将数据发给网关 1,由网关1 转发给网关 2
# 将数据发给网关1,这里的目标 ip 是 pc4,而不是网关1
pc1 mac 网关1 mac 192.168.11.10/24 172.16.45.10/24 数据
注意:网关之间是通过路由传输
网络层的 ip 区分子网,以太网的 mac 找到目标 主机,但是实际使用的是 应用程序,那么要实现应用程序之间的通讯,是通过 端口来标识应用程序的,即应用程序与网卡光联的编号。
传输层的功能:建立端口到端口的通信
补充:端口范围:0 - 65535 , 0 -1023 为系统占用端口
tcp协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
以太网头 | ip 头 | tcp头 | 数据 |
---|---|---|---|
udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头 | ip头 | udp头 | 数据 |
---|---|---|---|
用户使用的应用程序,工作于应用层
应用层功能:规定应用程序的数据格式
例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
两个进程需要进行通讯,最基本的一个前提是能够唯一的标识一个进程,在本地进程中我们可以使用 PID 来唯一标识一个进程,但 PID 只在本地唯一,网络中的两个进程 PID 冲突的几率很大。这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程 。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。