一、什么是互联网协议及为何要有互联网协议
问题引入
我们已经知道,一台电脑安装好必要的硬件,在装上操作系统后就可以使用,但是我们生活在互联网时代,我们还需要连接互联网才能与整个世界交流。那么,什么是互联网,我们又该怎样连接互联网呢?在中国,有很多很多种方言,要想无障碍的与其他人交流,就需要使用我国的标准语言,汉语。同样要想与世界上的其他人无障碍的交流,就要用到世界统一的标准语言,英语。在互联网中,世界统一的通信标准也是英语。连接电脑与电脑之间的互联网就是一系列统一的标准,这些标准就称之为互联网协议。互联网的本质就是一系列协议,它定义了计算机如何接入Internet,以及计算机接入Internet的计算机通信标准。
二、osi五层模型
互联网协议按照功能不同分为osi七层或者tcp/ip五层或者tcp/ip四层
我们平时使用的应用程序,是在应用层面上,这几层的关系上,每一层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件,自上而下每一层都依赖于下一层。我们从最下一层即物理层开始切入。
物理层
物理层主要是基于电器特性发送高低电压(电信号),高电压对应二进制的1,低电压对应二进制的0。常见的运行于物理层的设备有中继器、集线器、双绞线、光缆。
数据链路层
单纯的电信号0和1没有任何意义,数据链路层就定义了电信号的分组方式,规定电信号多少位一组,每组表示什么意思。
以太网协议
早期每个公司都有自己的分组方式,后来为了统一标准,形成了以太网协议Ethernet
Ethernet规定
1.一组电信号构成一个数据包,称为“帧”。
2.每一“帧”包括head头部和数据data两部分。
3.head头部包含固定的18个字节,其中发送者/源地址占6个字节;接受者/目标地址占6个字节;数据类型占6个字节。
4.data包含最短46字节,最长1500字节
5.整个数据包的长度最短64字节,最长1518字节,如果超过最大限制就分片发送。
mac地址
ethernet规定接入Internet的设备都必须具备网卡,而head中包含的源地址和目标地址就是网卡的地址,也就是mac地址。每块网卡出厂时都被烧制上了一个世界唯一的 mac地址,长度为48位2进制数,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
广播
有了mac地址,处于同一子网络中的两台主机就可以通信了,ethernet采用最原始的广播的方式进行通信,发送者以广播的方式发送数据包给目标电脑,但是广播的方式会使处于同一子网络中的所有电脑都收到该数据包,拆开后发现mac地址是自己的就响应,如果不是自己的就丢弃。过程模拟如图
网络层
处在一个子网络中的两台计算机可以用广播的方式发送数据包,但是如果是全世界范围内的两台电脑通信,就不能采用这种方式了,否则如果每一个数据包都被全世界所有的电脑收到,就变成一种灾难了。所以还必须要有一种方式来区分世界上这些子网络,如果处在一个广播域就采用广播的方式,如果不在一个广播域,就要采用路由的方式(向不同的子网发送数据包的方式)。这就是网络层存在的意义,引入网络地址来区分不同的子网或广播域。
ip协议
网络地址的协议叫ip协议,它定义的地址称为ip地址,ipv4规定网络地址由32位2进制数表示,ipv6扩展了路由和寻址的能力,规定网络地址由128位2进制数表示。我们主要以ipv4为例介绍ip地址。它的范围是0.0.0.0~255.255.255.255,通常写成四段十进制数,如192.168.1.0
ip地址分为标识子网的网络部分和标识主机的主机部分,从网络部分或者主机部分都不能辨识一个ip所处的子网。
子网掩码
子网掩码是表示子网特征的一个参数,跟ip地址的形式类似,也是由32位的二进制数构成,规定它的网络部分全为1,主机部分全为0。对于一个ip地址,如果已知网络部分是前16位,主机部分是后16位,那么子网掩码就是11111111.11111111.00000000.00000000,写成十进制就是255.255.0.0。
有了子网掩码,我们就能判断两个ip地址是否处于同一个子网络中。方法是将两个ip地址和子网掩码分别进行“与运算”(两个数都为1,结果为1,否则为0),如果结果相同,表明他们在一个子网络中,否则不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
ip协议的作用就是为每一台计算机分配一个ip地址,另一个作用就是确定哪些地址在同一个子网络中。
ip数据包
IP数据包也分为head和data部分,放入以太网包的data部分。其中head的长度是20-60字节,data最长为65515字节。但是以太网数据包的数据部分最长只有1500字节,所以如果ip数据包超过了1500字节,就需要分割成几个以太网数据包分开发送。
ARP协议(地址解析协议)
通信是基于mac地址的广播实现的,计算机获取自身的mac地址是很容易的,但是如果需要获取目标计算机的mac地址,就需要通过ARP协议。
协议的工作方式如下:
首先通过IP地址和子网掩码区分出自己所处的子网,如果处在同一子网,则数据包的地址是目标主机的mac地址和目标主机的ip;如果没有处在同一子网,则数据包的地址是网关的mac地址和目标主机的ip。此时会发出一个ARP request广播包,请求具有该ip地址的主机报告它的mac地址。
传输层
计算机之间的通讯,实际是软件与软件之间的通讯,ip地址帮我们找到了目标电脑所处的子网,以太网的mac地址帮我们找到了主机的具体位置,但是我们还需要知道软件的具体位置,这时就需要端口(port),端口即应用程序网卡关联的编号,端口的范围是0-65535,其中0-1023为系统占用的端口。传输层的功能就是建立端口到端口的通信。mac+ip+port确定一个独一无二的位置。
tcp和udp的区别
tcp是可靠传输,没有长度限制(为了保证网络的效率,通常tcp数据包的长度不会超过ip数据包的长度)而udp是不可靠传输,“报头”部分一共只有8个字节,总长度不超过65535字节。tcp协议存在确认信息,而udp协议没有。下图是tcp数据包示例。
tcp的三次握手和四次挥手
应用层
应用层规定了程序的数据格式,包括dns,ftp,http等
网络通信流程
想实现网络通信,每台主机需具备四要素
- 本机的IP地址
- 子网掩码
- 网关的IP地址
- DNS的IP地址
获取这四要素分两种方式
1.静态获取
即手动配置
2.动态获取
通过dhcp获取
以太网头 | ip头 | udp头 | dhcp数据包 |
(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
(3)最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。
这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。
接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。