互联网协议
本文只为了自己记录,加深理解,原文请看阮一峰老师的http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
N层通信模型
我在北京发了一条QQ消息,为何隔了半个地球,在洛杉矶朋友能够收到,这就是互联网通信.对于我和洛杉矶的朋友来说,我们接触到的只是QQ这个应用程序,但是真实的数据是转化成0101发出去/接收到的,这就是应用-->二进制-->通信-->二进制-->应用的传输过程.
相比osi7层模型,tcp/ip 4层模型,我更喜欢阮一峰老师的五层模型图:
第一层 - 物理层
它就是把电脑连接起来的物理手段,作用是负责传送0和1的电信号。例如:光纤,电缆
这就叫做"物理层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
第二层 - 数据链路层 - mac地址到mac地址
1.为何需要这层
单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?一种叫做"以太网"(Ethernet)的协议规定,一组电信号构成一个数据包,叫做"帧"(Frame)。
这就是"数据链路层"的功能,它在"物理层"的上方,确定了0和1的分组方式。
2.帧的具体构成
每一帧分成两个部分:标头(Head)和数据(Data)。
"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。
"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
3.mac地址(网卡地址)
A.mac地址用来作为接受/发送数据的唯一标识
以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址
0和1组成的电信号分组,通过mac地址到mac地址的方式传输
B.mac地址
每块网卡出厂的时候,都有一个全世界独一无二(同一个厂商才唯一)的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。
PS:MAC地址可不是世界上独一无二的,只是其散列足够大,使得在同一个子网中MAC地址碰巧相同的两块网卡几率很小很小而已。
4.怎么发送数据出去--广播
首先,需要知道对方的mac地址才能向对方发送数据包,这由ARP协议来解决
Q : 知道了地址之后,怎么发送给对方
A : 用广播的方式发给所有网络里的网卡(mac地址),接收方根据帧的head里面标识的接收方mac地址是否等于自己来判断,一致就接收数据,不一致就抛掉数据
比如,1号给2,3,4,5都发了数据,但是帧head的接收方mac地址和2一致,所以3,4,5都抛弃了,只有2接受并处理了数据.这个就叫广播
新方法 缓存MAC地址
老式的的集线器(市面上已经不存在了)才是这种广播模式,现在交换机会记录并缓存各个交换机端口连接的设备的MAC地址,转发包时会按缓存的地址表转发到特定的交换机端口,除非地址表里面没有目的MAC地址,不然不会广播包的。
第三层 - 网络层 - IP到IP
1.网络层的由来
原因
mac地址能过广播的方式,给当前同一个子网络下的所有计算机发送了数据包,但是缺点是每一台计算机都会收到一次包,并且广播不能传播到其他子网络去,否则互联网上每一台计算机都会收到所有包,那会引起灾难。
作用
网络层的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址".
MAC地址 + 网址
每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。
2.IP协议
规定网络地址的协议,叫做IP协议。作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络(通过子网掩码)。
它所定义的地址,就被称为IP地址。
IPv4
目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。
IPv6 的诞生
(1)更大的地址空间
IPv4中规定IP地址长度为32,即有232-1个地址,也就是最多有2的32次方的电脑可以联到Internet上;而IPv6中IP地址的长度为128,即有2128-1个地`址。整个地球的每平方米面积上仍可分配1000多个地址
(2)更小的路由表
IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。 增强的组播(Multicast)支持以及对流的支持(Flow-control)。
(3)对DHCP协议的改进和扩展
使得网络(尤其是局域网)的管理更加方便和快捷.
(4)更高的安全性
在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,这极大的增强了网络安全
子网掩码
子网掩码,就是表示子网络特征的一个参数。就是掩去主机部分,保留网络部分
它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0
知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
IP地址与子网掩码进行“按位与”运算,得到网络地址。
例如:
第一个IP地址的网络地址:172.16.254.233
换算成二进制格式: 10101100 00010000 11111110 11101001
掩码地址255.255.255.0 换算成二进制格式: 11111111 11111111 11111111 00000000
你把它们逐位进行&运算, 就可以将最后的8位全部变为0, 而前24位数字不变. 得到10101100 00010000 11111110 00000000, 即172.16.254.0
第二个IP地址的网络地址:172. 16.254.233& 255.255.255.0 = 172. 16.254.0
一致,所以是同一个子网络
3.IP数据包
以太网协议每一个数据包包含"标头"和data,ip数据包则是将以太网数据包的data进一步分成"标头"和data.
"标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。
4.ARP协议
也就是在同一个子网络中发一个特殊包,该包包含目的IP地址,所有子网络下的计算机收到包后,拿出其中的ip和本机ip对比,一致的话就将自己的mac地址包成一个包,发给询问计算机.不一致就抛弃.
所以有了IP地址,可以将数据发给同一个网络的任何一台计算机.
第四层 - 传输层 - 端口到端口
1.由来
Q : 同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?
A : 通过监听不同端口
端口
端口是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。任何一个应用程序都会随机选用一个端口,然后与服务器的相应端口联系。
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。
socket
Unix系统就把主机+端口,叫做"套接字"(socket)。
2.UDP协议
现在,我们必须在数据包中加入端口信息,UDP数据包,也是由"标头"和"数据"两部分组成。
"标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,这时整个数据包如下
3.TCP协议
UDP协议的缺点是不知道对方是否收到了数据,为了提高准确性,诞生了TCP。
这个协议可以近似认为,它就是有确认机制的UDP协议,但是过程复杂、实现困难、消耗较多的资源,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
第五层 - 应用层 - 应用程序到应用程序
"应用层"的作用,就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议
就构成了应用层
。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。