经过学习:阮一峰(很全很详细)html
互联网的核心是“一系列协议”,这些协议对电脑如何链接和组网,作出了详细的规定。只要把这些协议搞懂了,就很好理解互联网的原理了。服务器
1、概述网络
1.1五层模型socket
用户接触的是最上面一层学习
实体层-->链路层-->网络层-->传输层-->应用层ui
越往下越靠近硬件,越往上越靠近用户spa
1.2层与协议设计
每一层都须要完成相应的功能,可是必须遵照某种规则,这个规则就称之为“协议(protocol)”3d
每一层都有许多协议,这些协议的总称“互联网协议”(Internet Protocol Suite)htm
接下来就介绍每一层的功能,主要就是介绍每一层的主要协议
2、实体层
首先将电脑链接起来,采用电缆、光缆、无线电波、双绞线
用物理手段将电脑链接起来,规定了网络的一些电气特性,做用是传送0或1的电信号
3、链路层
3.1单纯的0或1的电信号没有意义,必须规定解读方式:多少个电信号一组?每一个信号位表明什么意义?
这就是链路层的功能,在“实体层”上规定了0和1分组方式
3.2“以太网协议”
开始每一个公司都有本身的分组方式,逐渐一个“以太网”协议占据了主导地位。
“以太网协议”规定一组电信号组成一个数据包称之为“帧(Frame)”.每个帧有两部分组成:头(Head)和数据(Data)
“标头”包含了一些信息 (发送者、接受者、数据类型等)
“数据”就是发送的内容
“标头”的长度默认是18字节。“数据”最短为46字节,最长1500字节,所以帧的最短为64字节,最长1518。若是发送的数据过长,就须要拆分红好几帧来发送
3.3MAC地址
上边提到“标头”中包含着发送者和接受者的信息,那么如何标识发送者和接受者的呢
“以太网协议”规定接入网络的全部设备必须就有“网卡”接口。数据包是从一个网卡接口发送至另外一个网卡接口。网卡的地址就是发送和接收的地址,称之为MAC地址
每个网卡都有世界上独一无二的MAC地址,长度是48个二进制,一般用12个十六进制表示
前六个是厂商编号,后六位是该厂商网卡的流水号
3.4广播
定义只是第一步,一个网卡是如何得知另外一个网卡的MAC地址的呢
ARP协议能够解决这个问题,具体的后边在学习
可是知道了另外一个网卡的MAC地址,如何准确的吧数据包送达呢
这里,“以太网”采用了的最原始的方法,向本网络下的全部计算机发送数据包,而后在判断是不是接收方
在上图中,计算机1要向计算机2发送数据,须要将数据包发送到计算机2/3/4/5,而后2/3/4/4在读取数据包中MAC地址和自身比较,若是相同,做进一步的处理;若是不一样,就丢弃这个数据包;这就叫作“广播”
有了数据包的定义、网卡的MAC地址和广播的发送方式,“链路层”就能够在多个计算机之间发送数据包了
四:网络层
4.1网络层的由来
以太网协议,依靠MAC地址来传输数据。理论上,单单靠MAC地址,上海的网卡是能找获得洛杉矶的网卡(MAC地址惟一性)。
可是这样也有巨大的缺点,以太网依靠广播的方式发送数据包。全部成员人手一份包,效率过低,并且局限于一个子网络,也就是说两台计算机不在一个子网络,广播是过不去的,这样的设计也是合理的,想一想一发送数据,互联网的人人手一包,会引起灾难的。
互联网是由无数个子网络组成的巨型网络,上海的计算机和洛杉矶的计算机不可能在同一个子网络。
所以,能不能区分是否在同一个子网络,若是同一个子网络,直接广播;若是不在同一个子网络,就得“路由”。Mac只与厂商有关,与网络无关。这就致使了网络层的出现,引进了新的地址,称之为网络地址
4.2IP协议
规定网络地址的协议叫作IP协议。网络地址叫作IP地址
如今普遍应用的是IP协议第四版,简称IPv4。
这个版本规定32个二进制组成,从0-255.255.255.255
每一台主机都会有一个IP地址,IP地址惟一,不然会发生IP地址冲突。,IP地址由两部分组成,前一部分表明网络,后一部分表明主机。
好比172.16.254.1,假设前24位表明网络,后8位则表明主机;两个出于同一子网络下的网络部分相同,好比172.16.254.3和172.16.254.7处于同一个子网下;
可是单单从IP地址看不出来,由于你不知道是前16位仍是前24位甚至前28位表明网络部分;这个时候子网掩码就出来了
子网掩码和IP地址同样,网络部分全为1主机部分为零.好比172.16.254.1,假设前24位表明网络,后8位则表明主机;那么他的子网掩码就是255.255.255.0
只要知道了子网掩码就能够判断两个IP是否在同一个子网络,将两个IP地址和子网掩码进行and操做,是否相等。
IP地址的做用是:1.为每个计算机安排一个地址 2.判断是否在同一个子网络下
4.3IP数据包
直接将IP数据包放进以太网数据包中,不须要增长新的栏位,这就是互联网分层的好处。
“IP数据包”包括标头和数据
标头部分包括版本、长度、IP地址,“数据”部分是IP数据包的具体内容,放进以太数据包中就变成了
IP数据包的标头长度20字节到60字节,整个数据包的长度是65535,所以“数据部分”最长65515字节;以太网数据包的“数据部分”最长为1500字节。所以若是IP数据包超过了1500字节,那么就要分割为几个以太网数据包,分开发送
4.4ARP协议
网络层,IP数据包放在以太网数据包中,所以咱们必须须要知道两个地址,一是Mac地址一个是IP地址。一般,对方的IP地址是已知的,可是不知道Mac地址
因此,须要一种机制,能从IP地址得知Mac地址
这里分为两种状况
一:两个没有在同一个子网络下,只能是吧数据包发送到两个子网络相连的网关,须要网关去处理
二:在同一个子网络下,能够用ARP协议,获得Mac地址。ARP协议也是发送一个数据包,包含在以太网数据包,其中包含他要访问的IP地址,在对方的Mac地址这一栏,填的是FF.FF.FF.FF,表示这是一个“广播”地址。在该子网络中的每一个主机都会收到这个数据包,从中取出IP地址与本身比较,若是相等,作出回复,告诉对方本身的Mac地址;若是不相等,丢弃这个包
5、传输层
有了Mac地址和IP地址以后,咱们就能够实如今任一两个主机之间创建联系
可是,在同一个主机上,有不少进程在使用到网络,好比一边浏览网页,一边和朋友聊天,当接收到个数据包时须要判断是表示谁的内容
所以,咱们还须要一个“参数”表示接收到的数据包供哪一个进程使用,这个“参数”就是“端口”(port),其实就是每一个进程使用网卡的编号。每一个数据包发送到特定的端口,每一个进程到特定的端口取数据包
端口号是0-65535,16个二进制,0-1023的端口被系统占用,所以用户只能选择大于1023的端口。
不论是聊天仍是浏览网页,都会随机选择一个端口号和服务器相连
“传输层”的做用就是肯定端口到端口,“网络层”肯定的是主机到主机;只要肯定了主机和端口就能实现程序之间的交流。所以Unix把主机+端口成为“套接字”(socket)。
有了它,就能够实现网络应用程序开发
5.2UDP协议
在数据包中加入端口信息,就须要新的协议,最简单的实现就是UDP协议,就是在数据前边加上端口号
标头中是发送端口和接收端口,数据部分就是具体的内容;而后把UDP数据包中放入IP数据包中
UDP数据包很是简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
5.3TCP协议
UDP有一个缺陷就是发送出去不能肯定是否接受到了
为了解决这一问题,TCP协议就出来了,能够近似认为他是有确认机制的UDP协议,每发送一个数据包,都须要一个确认;若是数据包丢失没有接收到确认那么就知道数据包丢失,须要从新发送
TCP数据包理论上无限长,可是为了保证网络的效率,通常不会超过IP数据包的长度,以确保单个TCP数据包不被分割
6、应用层
应用程序接受到了数据包,接下来就是解读。TCP协议传输的数据五花八门,好比Email、WWW、FTP,那么就须要不一样协议来规定电子邮件、网页、FTP的格式,这些应用程序协议就构成了应用层。
至此,整个互联网的五层结构,自下而上所有讲完了。
下一篇主要回顾TCP协议