一直对TCP Http 和Socket稀里糊涂的,今天专门的查了下:
TCP/IP是个协议组,它分为网络层,传输层和应用层,
网络层:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
传输层:中有TCP协议与UDP协议。
应用层:FTP、HTTP、TELNET、SMTP、DNS等协议。
TCP 是传输层协议,主要解决数据如何在网络中传输的,TCP连接是长连接
第一次握手:客户端发送请求包到服务器,等待服务器确认
第二次握手:服务器响应客户端请求,同时也发送一个回应包给客户端
第三次握手:客户端收到服务器的回应包后,向服务器发送确认包
1.
握手过程中传送的包里,不包含数据,三次握手完毕后,客户端与服务端才正式的开始传递数据。
TCP一旦连接起来,在客户端和服务端任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
断开连接时,服务器和客户端都可以主动发起断开TCP连接的请求。
HTTP:
HTTP(超文本传输协议)是应用层协议,主要解决怎么包装数据,Http连接是短连接,它是无状态的,浏览器和服务器每进行一次http操作,就建立一次连接,但任务结束就断开连接,HTTP是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议,
socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
HTTPS:
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层
一.HTTPS的工作原理
HTTPS在传输数据前需要客服端(浏览器)与服务器(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息.TLS/SSL协议是一套加密传输协议,使用了非对称加密,对称加密,以及HASH算法.握手过程如下:
1.客服端将自己支持的一套加密规则发送给网站.
2.网站从中选择一组加密算法与哈希算法,并将自己的身份信息以证书(SSL证书)的形式发回给浏览器.证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息.
3,客服端获得网站证书之后浏览器要做以下几件事情:
a) 验证证书的合法性(颁发机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等,验证方法见附1),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则给出证书不受信任的提示.
b)如果证书受信,或者用户选择接受不受信任的证书.浏览器生成一串随机数的密码,并用证书中提供的公钥加密.
)使用约定好的哈希算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站.
4.网站接受浏览器发来的数据之后要做一下的操作:
a)使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的的握手消息,并验证hash值是否与浏览器发来的一直.
b)使用密码加密一段握手消息,发送给浏览器.
5.浏览器解密并计算握手消息的hash,如果与服务端发来的hash一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密.
浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得一致的密码,并且可以正常的加密解密数据,为后续真正的数据传输做一次测试.
二:https协议和http协议的区别:
1. https协议需要到ca申请
2. http传输的信息是明文的,https传输的信息是经过ssl加密
3.http和https使用的是完全不同的连接方式,端口不一样,http端口号80,https端口为443.
4.http连接简单,是无状态的.
5.https协议是有ssl+http协议构建的可进行加密传输//身份认证的网络协议,比http协议安全.
三.tcp协议3次握手,4次挥手
传输层建立连接和断开连接,一个完整的过程.中间可能出现许多例外,都需要有相应的处理方法.
1. 建立连接协议,三次握手
(1).报文1,客服端发送一个带SYN标志的TCP报文到服务器.SYN(synchronous)是TCP/IP建立连接时使用的握手信号。SYN攻击是个比较有意思的事情.
(2).报文2,服务器端回应客服端,报文带ACK和SYN编制.
(3).报文3,客服端在回应一个ack报文.服务器端接受到此ack信号好才启动连接,此时连接才算成立.
为什么需要三次握手:由于各个网路的情况不同,可能会产生报文传输延时,从而变成失效的连接请求.防止失效的连接请求报文段突然友传到了服务端,从而产生错误.解决网络中存在重复分组的问题.
只是传输层为了防止失效的连接请求而设立的机制.
2.连接终止协议,四次挥手
tcp连接是全双工,因此每个方向都必须单独进行关闭.每个方向,当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接.
(1). TCP客服端发送一个FIN,用来关闭客服到服务器的数据传送.
(2).服务器端接收到FIN,响应一个ACK,确认序号,为接收到的序号加1.
(3).服务器关闭客服端的连接,发送一个FIN给客服端.
(4).客服端发回ACK报文确认,并将确认序号设置为序号加1.
4次挥手,为了断开连接.