1,两种参考模型
OSI参考模型,七层
Open System Interconnect
* 应用层
* 表示层
* 会话层
* 传输层
* 网络层
* 数据链路层
* 物理层
TCP/IP参考模型,四层。(一般按照这个模型来)
Transmission Control Protocol/Internet Protocol
* 应用层,处理特定应用程序细节。FTP,E-MAIL,Telnet。
* 传输层,为两台主机上的应用程序提供端到端的服务。TCP,UDP。
* 网络层,处理分组在网络中的活动,点到点。IP,ICMP,IGMP。路由器就在这一层。
* 链路层,处理与传输媒介的物理接口细节。ARP,RARP,设备驱动程序,接口卡。网桥,交换机在这一层。
TCP/IP协议族:一组不同的协议组合在一起构成的协议族。
- 路由器工作在网络层,IP。
- 网桥工作在链路层。
互联网的两个名词
* internet
* Internet
2,传输层的UDP,TCP
UDP,用户数据报协议,无连接,不可靠,数据报模式。使用UDP的应用层协议:视频,语音广播,DNS,TFTP等对速度要求高的。
TCP,传输控制协议,有连接,可靠,流模式。使用TCP的应用层协议:HTTP,Telnet,FTP等对可靠性要求高的。
在TCP的连接中,数据流必须以正确的顺序送达对方。TCP的可靠性是通过顺序编号和确认(ACK)来实现的。
TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列之中,同时启动时钟。其后,如果收到了接受端对该段的ACK信息,就将该段从队列中删去。如果在时钟规定的时间内,ACK未返回,那么就从发送队列中再次送出这个段。
3,传输层TCP的三次握手和四次挥手
三次握手:
- 第一次:Client将标识的SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server。
- 第二次:Server收到数据包后由SYN=1知道Client要请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client已确认连接请求,Server进入SYN_RCVD状态。
- 第三次:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ACK是否为1,ack是否为K+1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
四次挥手:
- 第一次挥手:Client将标识的FIN设置为1,随机产生一个值seq=M,并将该数据包发送给Server,Client进入FIN_WAIT_1状态。
- Server收到FIN后,发送一个ACK给Client,确认序号为seq=M+1,Server进入CLOSE_WAIT状态。
- 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
- 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
**为什么建立连接是三次握手,而关闭连接却是四次挥手呢? **
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
4,网络层的IP地址的划分
IPV4地址,32位,4*8
例如:192.168.0.1
- A类地址:
0*******.********.********.********
,从0.0.0.0 到127.255.255.255;- 默认子网掩码为255.0.0.0。7位网络号,24位主机号。
- 第一个八位字节指明网络,后三个八位字节指明网络上的主机。
- 第一个八位字节若为127和0,不作为A类网络地址。网络号127保留作为本机软件回路测试之用,如127.0.0.1是环回测试用的固定的特殊IP。全0的IP地址是保留地址意思为“本网络”,代表当前设备的IP。
- 后三个八位字节全1,全0不作为主机地址,1个A类网络可以提供2^24-2个主机地址。主机号全为“1”的网络地址用于向同一子网所有主机发送报文,叫做广播地址。主机号全部为“0”的地址是代表该子网的网络地址。
- B类地址:
10******.********.********.********
,从128.0.0.0到191.255.255.255;- 默认子网掩码为255.255.0.0。14位网络号,16位主机号。
- C类地址:
110*****.********.********.********
,从192.0.0.0到223.255.255.255;- 默认子网掩码为255.255.255.0。21位网络号,8位主机号。
- D类地址:
1110****.********.********.********
,从224.0.0.0到239.255.255.255;- 28位多播组号,广播地址!
- E类地址:
11110***.********.********.********
,从240.0.0.0到255.255.255.255;- 27位留待后用,保留地址!
IPV6地址,128位,8*16
例如:FFED:0:0:0:0:BA98:3210:4562
- 27位留待后用,保留地址!
5,网络层IP路由选择
- RIP协议,Routing information Protocol,路由信息协议
底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。 - OSPF协议,Open Shortest Path First,开放式最短路径优先
底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。
6,网络层ICMP
ICMP,Internet Control Message Protocol,Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
ping命令,发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。
7,链路层ARP协议
ARP,地址解析协议,提供IP地址到MAC地址之间的动态映射。
- 32位IP地址-----ARP----->48位MAC地址
- 32位IP地址<-----RARP----48位MAC地址
8,在浏览器中输入www.baidu.com后
简化版本:
- 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址。
- 解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接。
- 浏览器发出HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器。
- 服务器给出响应,把对应的html文本发送给浏览器。
- 释放TCP连接。
- 浏览器渲染网页。
详细版本:
应用层
- 1,在浏览器中输入www.baidu.com,浏览器运行应用层的HTTP超文本传输协议。
- 2,浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48。若地址不含端口,则根据协议默认确定一个,HTTP默认端口80。
- 3,浏览器产生HTTP包,向上一步确定的IP和端口号发起网络连接HTTP。
传输层
- 4,浏览器把HTTP会话请求分成报文段,添加源和目的端口,交给TCP,TCP的主要功能是与百度服务器的TCP程序进行连接并建立会话。
网络层
- 5,TCP将TCP信息包转发给IP层。IP层的重要功能是寻址和路由,IP将自己的信息加到原有的数据包上,形成新的IP数据包。
链路层
- 6,数据包将由IP层交到链路层,通过ARP协议找到MAC地址。这个层定义了通过物理网络输出数据所需的协议与硬件要求。电脑这个时候将IP数据加上以太网帧头和帧尾打包成以太网帧。
物理层
- 7, 这个时候,电脑就可以传输以太网帧的物理数据了,使用真正的电信号走网线传输了
服务器端
- 8,服务器一层层向上去除头部解析处理请求。
- 9,服务器解析请求,将数据返回浏览器。
客户端
- 10,若返回的内容有外链URL,例如图片网址,则按照以上相似步骤获取。
- 11,浏览器渲染网页。
9, 简介DNS,什么是DNS劫持?
DNS(Domain Name System)服务,可以使用域名代替复杂的IP地址来访问网络服务器,使得网络服务的访问更加简单,而且可以完美地实现与Internet的融合,对于一个网站的推广发布起到极其重要的作用。
查询过程:
- 第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
- 第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
- 第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
- 第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 第五步:重复第四步,直到找到正确的纪录。
- 第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
本地服务器和客户端之间是迭代查询,本地服务器和其他域名服务器之间可以是迭代查询,也可以是递归查询。
DNS劫持:是互联网攻击的一种方式,通过攻击DNS服务器,或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。