网络OSI七层模型
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
- 数据链路层:在这一层工作的设备是交换机,数据通过换换机来传输。
- 网络层:在这一层工作的设备是路由器,常把这一层的数据叫做数据包。
- 传输层:常见的协议udp,tcp等等
- 应用层:常见的协议DNS,FTP,http,https等等
TCP和UDP的区别
- TCP面向连接,UDP面向无连接
- TCP提供可靠服务,UDP只关注尽可能的交付
- TCP面向字节流,UDP面向报文传输
- TCP连接只支持点对点,UDP支持广播和多播
- TCP头部20个字节,UDP头部8个字节
TCP三次握手和四次挥手
三次握手
- 握手前:服务端和客户端的状态都为CLOSED,服务端创建socket后开始监听,变为LISTEN状态
- 第一次握手:客户端向服务端发送TCP连接请求报文,报文中包含序列号seq(随机生成的x),SYN字段置为1,表示需要建立TCP连接。(客户端进入SYN_SENT状态)
- 第二次握手:服务端回复客户端的TCP连接请求报文,报文包含seq(随机生成的y),SYN置为1,ACK字段为x+1,表示和这个客户端建立连接(服务端进入SYN_RCVD状态)
- 第三次握手:客户端再发送一个报文给服务端,seq=x+1,ACK=y+1,SYN=1。(客户端变成ESTABLISHED)服务端收到ACK后变成ESTABLISHED状态
为什么不是两次?
因为两次握手的话,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
四次挥手
-
第一次挥手,客户端发出连接释放syn包(FIN=1,seq=u)到服务器端,并且停止再发送数据,主动关闭连接,进入FIN-WAIT-1状态,等待服务器端确认。
-
第二次挥手,服务器端收到客户端发送的连接释放syn包后,即发出确认syn包(ACK=1,seq=v,ack=u+1)到客户端,进入CLOSE-WAIT状态,此时TCP处于半关闭状态。客户端收到服务器端确认后,进入FIN-WAIT-2状态,等待服务器端发出的连接释放syn包。
-
第三次挥手,当服务器端数据传送完毕后,服务器端发送连接释放syn包(FIN=1,ACK=1,seq=w,ack=u+1),服务器端进入LAST-ACK状态,等待客户端最后确认。
-
第四次挥手,当客户端收到服务器端连接释放syn包后,客户端发出确认syn包(ACK=1,seq=u+1,ack=w+1),客户端进入TIME-WAIT状态。此时TCP未释放,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。 服务器端只要收到客户端发出的确认,立即进入CLOSED状态,由此完成四次挥手。
DNS解析过程
- 1.浏览器先在本地host文件找有没有这个ip地址缓存
- 2.如果1.没有就在浏览器缓存->操作系统缓存->路由器缓存->ISP DNS缓存中找
- 3.如果2.没有,就会向本地DNS服务器发起请求,一般这个本地DNS服务器会在我们所处的城市的某个角落,性能会很好,解析过的域名都会缓存下来,所以百分之八十点域名解析到这里就结束了
- 4.如果3.没有,本地DNS服务器就会向网络上的根DNS服务器发起请求,根DNS服务器就会根据url去查询域服务器,直到找到就返回这个域服务器的ip地址给本地DNS服务器,本地DNS服务器再向它发起请求
url从输入到页面返回的一次成功的流程是怎样的?
- 1.url解析:首先判断你输入的是一个合法的 URL还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作。
- 2.DNS缓存解析
- 3.TCP连接:三次握手建立连接
- 4.服务器收到浏览器发送的请求页面信息,返回一个响应头和一个响应体
- 5.浏览器收到服务器返回的响应头和响应体,进行页面的渲染
- 6.tcp四次挥手释放连接
http响应状态码
1xx:指示信息 2xx:成功 3xx:重定向 4xx:客户端错误 5xx:服务端错误
get和post的区别
-
从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
-
从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。
-
就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
-
从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的, google是8000字节的限制
http和https的区别
- http明文传输,https加密传输,所以http简单但不安全,https安全但相对复杂
- http端口号80,https端口号443
- https需要一点经济开销,因为要花钱申请ca证书
对称加密算法和非对称加密算法
-
对称加密是指加密和解密使用了同一个密钥 优点是:速度快,加解密的速度快,能在一分钟内把1G揭秘 缺点是不安全,需要双方共享密钥,私钥一旦泄漏,数据就会不安全(常用算法:AES,DES,3DES)
-
非对称加密:加密和解密所使用的密钥是一对密钥(公钥和私钥), 优点是:安全,只需要将数据用公钥进行加密,用私钥进行解密,私钥不需要分享出去,可以保证安全。 缺点:速度慢,算法的加解密速度很慢,如果在网站中大量地使用非对称加密进行数据传输,那么速度很慢,并且消耗服务器或者浏览器的系统资源(常用算法:RSA,DSA,ECDH)
https为什么更安全?
第一点:https的传输过程用了非对称加密验证身份,对称加密算法传输数据。过程如下:
- 1.浏览器向网站发送https请求
- 2.网站返回自己的证书,证书里包含这个网站的公钥和网站的信息
- 3.浏览器收到后验证网站的身份,如果安全,或者用户接受了不受信的网站,则生成一串随机数也就是密钥,用网站的公钥对密钥进行加密,给网站传回去
- 4.网站收到后,用自己的私钥解密拿出密钥,至此双方都有了这个密钥,以后的传输都通过这个密钥进行加密
第二点:除了第一点外,还存在的问题是有可能数据在传输的过程会被篡改,https的做法是加了一个数字签名,对数据摘要消息进行加密,比如MD5,和数据一起发送,接收端对数字签名解密,如果和得到的数据一致,那就说明数据是真的
第三点:如果公钥也被替换仍然可以伪造数据,https的做法就是再加上一个数字证书,数字证书是有第三方证书颁发机构颁发的,保证了里面的公钥是真的