1 OSI、TCP/IP和五层协议的体系结构
OSI分层:开放系统互联,共7层,物理层、数据链路层、网络层、运输层、会话层、表示层、应用层
TCP/IP分层:传输控制协议/因特网互联协议,共4层,网络接口层、网际层、运输层、应用层
五层协议:共5曾,物理层、数据链路层、网络层、运输层、应用层
2 每一层的协议
物理层:RJ45、CLOCK、IEEE802.3(中继器、集线器、网卡)
数据链路层:PPP、FR、HDLC、VLAN、MAC(网桥、交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器)
运输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、telnet、SMTP、HTTP、WWW、NFS
3 每一层的作用
物理层:通过传输媒体传输比特,确定机械和电器规范(比特bit)
数据链路层:将比特组装成帧和点到点的传递(帧frame)
网络层:负责子网间数据包的路由选择,实现拥塞控制、网际互联(包packet)
运输层:提供端到端的可靠的报文传递,差错控制和流量控制(段segment)
会话层:建立、管理和终止进程之间的会话(会话协议数据单元SPDU)
表示层:对上层数据进行转换保证一个主机的应用层信息可被另一个主机的应用程序理解,数据转换包括对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:为操作系统或网络应用程序提供访问网络服务的接口(应用协议数据单元APDU)
4 IP地址的分类
A类地址:以0开头,第一个字节范围:0~127(1.0.0.0~127.255.255.255),默认网络掩码:255.0.0.0,通常分配给拥有大量主机的网络,如一些大公司和因特网主干网络
(注意:数字0和127不作为A类地址,数字0表示该地址是本地宿主机,数字127保留给内部回送函数)
B类地址:以10开头,第一个字节范围:128~191(128.0.0.0~191.255.255.255),默认网络掩码:255.255.0.0,通常分配给节点比较多的网络,如区域网
C类地址:以110开头,第一个字节范围:192~223(192.0.0.0~223.255.255.255),默认网络掩码:255.255.255.0,通常分配给节点比较少的网络,如校园网
D类地址:以1110开头,第一个字节范围:224~239(224.0.0.0~239.255.255.255),用于组播
E类地址:以11110开头,第一个字节范围:240~255(240.0.0.0~255.255.255.255),保留未用
5 ARP协议的工作原理
ARP是地址解析协议。广播发送ARP请求,单播发送ARP响应。
首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系;
当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址。若有,则直接发送数据;否则向本网段的所有主机发送ARP数据包,该数据包包括:源主机IP地址、源主机MAC地址、目的主机IP地址;
当本网络的所有主机收到该ARP数据包时,首先检查数据包中的目的IP地址是否是自己的IP地址。若不是,则忽略该数据包;否则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中。若已存在,则覆盖,再将自己的MAC地址写入ARP响应包中,告诉源主机自己是目的MAC地址。
源主机收到ARP响应包后,将目的主机的IP和MAC地址写入ARP列表中,并利用此信息发送数据。若源主机一直没有收到ARP响应包,表示ARP查询失败。
6 路由设备与相关层
物理层:集线器、中继器
数据链路层:交换机
网络层:路由器
网络层以上:网关
7 常见路由选择协议及其区别
RIP协议:底层是贝尔曼福特算法,它选择路由的度量标准是跳数,最大跳数是15跳,若大于15,会丢弃数据包;
OSPF协议:底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是贷款。
8 TCP和UDP的区别
TCP是面向连接的,可靠的字节流服务,传输单位是TCP报文段,注重数据安全性;
UDP是面向无连接的,不可靠的数据流服务,传输单位是用户数据报,数据传输块,但安全性一般。
9 如何TCP的可靠性?
通过顺序编号和确认(ACK)实现。
10 TCP三次握手和四次挥手的全过程
三次握手:
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISH状态,完成三次握手。
握手过程中传送的包不包含数据,三次握手完,客户端与服务器才正式开始传送数据。理想状态下,TCP链接一旦建立,在通信双方中的任何一方主动关闭连接前,TCP链接都将被一直保持下去。
四次挥手:
第一次挥手:主动关闭方发送一个FIN,用以关闭主动方到被动方关闭方的数据传送,即主动关闭方告诉被动关闭方不再发送数据,但主动关闭方还可接收数据;
第二次挥手:被动关闭方收到FIN后,发送一个ACK给主动关闭方,确认序号为收到序号+1;
第三次挥手:被动关闭方发送一个FIN,用以关闭被动关闭方到主动关闭方的数据传送,即被动关闭方告诉主动关闭方不再发送数据;
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,完成四次挥手。
11 在浏览器中输入www.baidu.com后执行的全过程
首先,浏览器发起DNS查询请求,过程如下:依次查找浏览器缓存(浏览器缓存DNS记录)、系统缓存(若在浏览器中没有找到,浏览器做系统调用)、路由器缓存(之前的查询请求发向路由器,一般有自己的DNS缓存)、ISP DNS缓存(ISP缓存DNS服务器,一般都能找到相应的缓存记录)、根域名服务器;
其次,域名服务器向浏览器返回查询结果,完成域名到IP地址的转换;
再次,浏览器向web服务器发起TCP连接请求,通过TCP三次握手建立连接后,将HTTP请求数据发送至web服务器;
通常一个HTTP请求格式如下:
GET http://www.cricode.com/ HTTP/1.1 Host: www.cricode.com Connection: keep-alive Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8
然后,web服务器通常通过监听80端口(默认端口号),获取客户端的HTTP请求,通过HTTP解码,把接收到的网络数据中解析出请求url信息以及其他诸如Accepot-Encoding、Accept-Language等信息;web服务器根据HTTP请求头的信息,得到响应数据并返回给浏览器。
HTTP/1.1 200 OK Date: Fri, 24 Oct 2014 13:55:18 GMT Server: Apache X-Powered-By: PHP/5.4.32 Keep-Alive: timeout=5, max=10000 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 a0f6 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=10,IE=9,IE=8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"> <title>快课网— 程序员的自我修养!</title> <body class="home blog"> 。。。。。。。 。。。。。。。 </body> </html>
最后,浏览器解析网页内容,由于网页可能有重定向,或嵌入图片、AJAX、其他子网页等,以上几步可能反复执行才能将最终页面显示。
从另一个方面讲解数据包在各层的传输:
应用层:要发送的数据内容,形成应用层的报文数据;
运输层:报文数据加上传输头的包头,包括端口号、TCP或UDP的各种控制信息,形成segment;
网络层:加上网络层的包头,包括源及目的IP地址,形成packet;
数据链路层:加上MAC地址即数据链路层的控制信息,完成相邻节点间的数据传输,建立连接控制传输速度,形成frame;
物理层:将数据以bit为单位从主机传输到下一目的地。