网络知识

指引:java


重点:数据库

  1. [HTTP 系列] 第 1 篇 —— 从 TCP/UDP 到 DNS 解析


1、五层协议的体系结构


1)应用层( dns,http )  DNS解析域名为IP并发送http地址  json

在应用层有: 包括 FTP、HTTP、TELNET、SMTP等协议

2)传输层( tcp,udp )  创建tcp链接(三次握手) 跨域

在传输层中有 TCP协议 与 UDP协议。UDP包括DNS、TFTP等协议浏览器

 3)网络层( IP,ARP )  IP寻址 安全

在网络层有: IP协议、ICMP协议、和BOOTP协议。

 4)数据链路层(PPP)  封装成帧 服务器

  • 在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。
  • ARP协议、RARP协议
  • ARP协议的基本功能就是经过目标设备的IP地址,查询目标设备的MAC地址,以保证通讯的顺利进行

 5)物理层 
网络


一、mac地址在数据链路层

MAC地址就是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。MAC地址与网络无关,也即不管将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,都有相同的MAC地址,它由厂商写在网卡的BIOS里。
并发

MAC地址一般表示为12个16进制数,每2个16进制数之间用冒号隔开,如: 08:00:20:0A:8C:6D 就是一个MAC地址,其中前6位16进制数 08:00:20 表明网络硬件制造商的编号,它由IEEE机构分配,然后3位16进制数 0A:8C:6D 表明该制造商所制造的某个网络产品(如网卡)的系列号。每一个网络制造商必须确保它所制造的每一个以太网设备都具备相同的前三字节以及不一样的后三个字节。这样就可保证世界上每一个以太网设备都具备惟一的MAC地址。

ARP (Address Resolution Protocol) 是一种用来解析地址的协议,它能够根据 IP 地址反查出对应的 MAC 地址。
app

二、UDP

用户数据报协议 (User Datagram Protocol),是一个简单的面向数据报的传输协议。

它的特色以下:

  • UDP 缺少可靠性。UDP 自己不提供确认序号,序列号,超时重传等机制。UDP 数据报可能在网络中被复制,被从新排序。即 UDP 不保证数据报会到达其最终目的地,也不保证各个数据报的前后顺序,也不保证每一个数据报只到达一次。

    • UDP 是面向无链接的。UDP 客户端和服务器以前没必要存在长期的关系。UDP 发送数据报以前也不须要通过握手建立链接的过程。

    • UDP 不只支持单播,还支持多播和广播。

    • UDP 头部开销小,它包含如下几个数据:

      • 两个十六位的端口号,分别是源端口和目的端口。

      • 整个数据报文的长度。

      • 整个数据报文的校验和,用于发现头部信息和数据中的错误

    三、TCP

    TCP (Transmission Control Protocol, 传输控制协议) 是一种面向链接的、可靠的、基于字节流服务的传输层通讯协议

  • TCP 提供一种面向链接的、可靠的字节流服务

  • 在一个 TCP 链接中,仅有两方进行彼此通讯。广播和多播不能用于 TCP

  • TCP 使用校验和,确认和重传机制来保证可靠传输

  • TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复

  • TCP 使用滑动窗口机制来实现流量控制,经过动态改变窗口的大小进行拥塞控制



  • 2、http

    一、TCP/IP模型

    引入一个 TCP/IP的概念, TCP处于传输层, IP属于网络层,而这里所探究的 HTTP,实际上就是基于 TCP/IP协议开发的, TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。

    概述HTTP协议为无差错的协议按序传输未分段的数据流,这其实说的就是TCP协议。

    http是基于TCP/IP协议的应用层协议,用于客户端和服务器之间的通讯。HTTP是一个无状态的协议。 

    HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。以下图所示:


    2. 发送一条HTTP请求会发生什么? 

    当你在浏览器输入一个URL的时候,有没有想过这其中发生了什么? 

    • 一、获取主机名,例如:http://www.nowamagic.net/academy/ 
    •  二、经过DNS获取服务器IP 
    •  三、获取端口,默认是80端口 
    •  四、链接到 121.199.24.143:80服务器 
    •  五、经过TCP信道发送一个HTTP请求 
    •  六、服务器读取一个HTTP请求 
    •  七、服务器查找所需资源并经过TCP信道返回资源 
    •  八、关闭TCP链接 


    3.HTTPS = HTTP+加密+认证+完整性保护


    3、跨域

    跨域产生的缘由,是由于受到同源策略的限制。同源策略指的是协议、域名、端口不相同。这里我将介绍两种跨域的方式:JSONP、CORS(跨域资源共享)

    两个方式的比较:
    JSONP只支持GET请求,CORS支持全部类型的HTTP请求。
    JSONP的优点在于支持老式浏览器,以及能够向不支持CORS的网站请求数据。复制代码

    一、 JSONP

    原理:动态插入script标签(由于script标签不受同源策略的限制),经过插入script标签引入一个js文件,这个js文件加载成功以后会执行咱们在url中指定的回调函数,而且会把咱们须要的json数据做为参数传入。

    二、 CORS 

     原理 :服务器在响应头中设置相应的选项,浏览器若是支持这种方法的话就会将这种跨站资源请求视为合法,进而获取资源。

     实现 CORS分为简单请求和复杂请求,

    简单请求指的是: 

    (1)请求方法是如下三种方法之一:HEAD、GET、POST; 
    (2)HTTP的头信息不超出如下几种字段:Accept、Accept-Language、Content-Language、Last-Event-ID、 Content-Type(只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain)。 

     其余状况就是非简单请求了。


    4、长链接与短链接

    一、何时用长链接,短链接?

    长链接多用于操做频繁,点对点的通信,并且链接数不能太多状况,。每一个TCP链接都须要三步握手,这须要时间,若是每一个操做都是先链接,再操做的话那么处理速度会下降不少,因此每一个操做完后都不断开,次处理时直接发送数据包就OK了,不用创建TCP链接。例如:数据库的链接用长链接, 若是用短链接频繁的通讯会形成socket错误,并且频繁的socket 建立也是对资源的浪费。

    而像WEB网站的http服务通常都用短连接,由于长链接对于服务端来讲会耗费必定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的链接用短链接会更省一些资源,若是用长链接,并且同时有成千上万的用户,若是每一个用户都占用一个链接的话,那可想而知吧。因此并发量大,但每一个用户无需频繁操做状况下需用短连好。

    总之,长链接和短链接的选择要视状况而定。

    二、本质

    HTTP的长链接和短链接本质上是TCP长链接和短链接

    HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。

    IP协议主要解决网络路由和寻址问题,
    TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另外一端收到发端发出的全部包,而且顺序与发出顺序一致。TCP有可靠,面向链接的特色。

    3. Http长链接和短链接

    在HTTP/1.0中,默认使用的是短链接。但从 HTTP/1.1起,默认使用长链接。

    长链接: 客户端和服务端创建链接后不进行断开,以后客户端再次访问这个服务器上的内容时,继续使用这一条链接通道。

    • 链接->传输数据->保持链接 -> 传输数据-> 。。。 ->关闭链接。
    • 长链接指创建SOCKET链接后不论是否使用都保持链接,但安全性较差。
    • HTTP也能够创建长链接,使用Connection:keep-alive

    短链接: 客户端和服务端创建链接,发送完数据后立马断开链接。下次要取数据,须要再次创建链接。

    • 链接->传输数据->关闭链接
    • HTTP是无状态的,浏览器和服务器每进行一次HTTP操做,就创建一次链接,但任务结束就中断链接。
    • 也能够这样说:短链接是指SOCKET链接后发送后接收完数据后立刻断开链接。

    4 Http长链接和TCP长链接的区别

    Http长链接 和 TCP长链接的区别在于: TCP 的长链接须要本身去维护一套心跳策略。,而Http只须要在请求头加入keep-alive:true便可实现长链接。



    5、dns域名解析

    详解DNS域名解析全过程