以前面试 http 方面死的很惨,我要痛定思痛补(chong)充(xue)一下 http 知识。html
每一层都是为了完成一种功能,越下面的层,越靠近硬件;越上面的层,越靠近用户。为了实现这些功能,就须要你们都遵照共同的规则。你们都遵照的规则,就叫作"协议"(protocol)。面试
互联网的每一层,都定义了不少协议。这些协议的总称,就叫作"互联网协议"(Internet Protocol Suite)。服务器
物理层规定:为传输数据所须要的物理链路建立、维持、拆除,而提供具备机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各类物理媒体上传输。网络
数据链路层在物理层提供的服务的基础上向网络层提供服务,最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。架构
以太网协议socket
以太网规定,一组电信号构成一个数据包,叫作"帧"(Frame)。每一帧分红两个部分:标头(Head)和数据(Data)。ui
以太网采用广播方式发送数据包,全部成员人手一"包",不只效率低,并且局限在发送者所在的子网络。也就是说,若是两台计算机不在同一个子网络,广播是传不过去的。cdn
MAC地址htm
以太网规定,连入网络的全部设备,都必须具备"网卡"接口。数据包必须是从一块网卡,传送到另外一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫作MAC地址。blog
广播
1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,而后与自身的MAC地址相比较,若是二者相同,就接受这个包,作进一步处理,不然就丢弃这个包。这种发送方式就叫作"广播"(broadcasting)。
网络层在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通讯,将数据设法从源端通过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务。
网络层引进一套新的地址,使得咱们可以区分不一样的计算机是否属于同一个子网络。这套地址就叫作"网络地址",简称"网址"。
"网络层"出现之后,每台计算机有了两种地址,一种是MAC地址,另外一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一块儿。
网络地址帮助咱们肯定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。所以,从逻辑上能够推断,一定是先处理网络地址,而后再处理MAC地址。
IP协议
IP协议的做用主要有两个,一个是为每一台计算机分配IP地址,另外一个是肯定哪些地址在同一个子网络。目前,普遍采用的是IP协议第四版,简称IPv4。
网络地址由32个二进制位组成。互联网上的每一台计算机,都会分配到一个IP地址。这个地址分红两个部分,前一部分表明网络,后一部分表明主机。习惯上,咱们用分红四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。
子网掩码就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分所有为1,主机部分所有为0。好比,IP地址172.16.254.1,若是已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。知道"子网掩码",咱们就能判断,任意两个IP地址是否处在同一个子网络。
将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,不然为0),而后比较结果是否相同,若是是的话,就代表它们在同一个子网络中,不然就不是。好比,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?二者与子网掩码分别进行AND运算,结果都是172.16.254.0,所以它们在同一个子网络。
IP数据包
根据IP协议发送的数据,就叫作IP数据包。
ARP协议
由于IP数据包是放在以太网数据包里发送的,因此咱们必须同时知道两个地址,一个是对方的MAC地址,另外一个是对方的IP地址。一般状况下,对方的IP地址是已知的(后文会解释),可是咱们不知道它的MAC地址。这里又能够分红两种状况。
第一种状况,若是两台主机不在同一个子网络,那么事实上没有办法获得对方的MAC地址,只能把数据包传送到两个子网络链接处的"网关"(gateway),让网关去处理。
第二种状况,若是两台主机在同一个子网络,那么咱们能够用ARP协议,获得对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。若是二者相同,都作出回复,向对方报告本身的MAC地址,不然就丢弃这个包。
传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通讯提供服务。
有了MAC地址和IP地址,咱们已经能够在互联网上任意两台主机上创建通讯。咱们还须要一个参数,表示这个数据包到底供哪一个程序(进程)使用。这个参数就叫作"端口"(port),它实际上是每个使用网卡的程序的编号。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不论是浏览网页仍是在线聊天,应用程序会随机选用一个端口,而后与服务器的相应端口联系。
"传输层"的功能,就是创建"端口到端口"的通讯。相比之下,"网络层"的功能是创建"主机到主机"的通讯。只要肯定主机和端口,咱们就能实现程序之间的交流。所以,Unix系统就把主机+端口,叫作"套接字"(socket)。有了它,就能够进行网络应用程序开发了。
UDP协议
最简单的实现叫作UDP协议,它的格式几乎就是在数据前面,加上端口号。UDP数据包,也是由"标头"和"数据"两部分组成。"标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。而后,把整个UDP数据包放入IP数据包的"数据"部分。
UDP协议的优势是比较简单,容易实现,可是缺点是可靠性较差,一旦数据包发出,没法知道对方是否收到。
TCP协议
TPC协议很是复杂,但能够近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。若是有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。TCP协议可以确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
TCP数据包和UDP数据包同样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上能够无限长,可是为了保证网络的效率,一般TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包没必要再分割。
应用层直接和应用程序接口并提供常见的网络应用服务。
应用程序收到"传输层"的数据,接下来就要进行解读。因为互联网是开放架构,数据来源五花八门,必须事先规定好格式,不然根本没法解读。"应用层"的做用,就是规定应用程序的数据格式。
举例来讲,TCP协议能够为各类各样的程序传递数据,好比Email、WWW、FTP等等。那么,必须有不一样协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。
www.ruanyifeng.com/blog/2012/0…
改天再好好写一遍太jier无聊了啊啊啊啊!!!!!!!!!!!!