Http,Socket,Tcp,Udp,Ip原理区别

转载:https://blog.csdn.net/qq_17190231/article/details/89358321

https://www.cnblogs.com/evan-blog/p/9867561.html(部分内容)

SSL/TLS 与TCP HTTP

HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。

TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。

Http,Socket,Tcp,Udp,Ip原理区别_第1张图片

HTTP与HTTPS的区别

区别如下:

  1. HTTPS是加密传输协议,HTTP是名文传输协议;
  2. HTTPS需要用到SSL证书,而HTTP不用;
  3. HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO【参考:(1)为保护用户隐私安全,谷歌优先索引HTTPS网页、(2)百度开放收录https站点,https全网化势不可挡】;
  4. HTTPS标准端口443,HTTP标准端口80;
  5. HTTPS基于传输层,HTTP基于应用层;
  6. HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
  7. Http,Socket,Tcp,Udp,Ip原理区别_第2张图片

TLS/SSL工作原理

HTTPS协议的主要功能基本都依赖于TLS/SSL协议,本节分析TLS/SSL协议工作原理。

TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

Http,Socket,Tcp,Udp,Ip原理区别_第3张图片

​​​​​

Http,Socket,Tcp,Udp,Ip原理区别_第4张图片

Http,Socket,Tcp,Udp,Ip原理区别_第5张图片

Http,Socket,Tcp,Udp,Ip原理区别_第6张图片

Http,Socket,Tcp,Udp,Ip原理区别_第7张图片

TCP UDP IP


TCP是传输层的协议,UDP也是传输层的协议,IP是网络层的协议。

IP:是用来找到目标计算机。如A向B发送数据,那么要找到对方B的计算机,找到后就确定了网络间的通道,A - B。也就是说IP是来确定网络间的路径的。

TCP:是用来实现通信的,它是一个全双工的协议(后面会说明)。在IP实现了网络间路径后,TCP提供了这个路径的全双工通信的能力。这个链接的建立要经历三次握手,断开链接要四次挥手(后面会说明)。

UDP: 是和TCP相似的,也是提供了通信能力。不过和TCP有区别。TCP是点对点的通讯,UDP支持一对多,多对一,一对一等。UDP不需要链接,直接发数据,相对来说速度更快,但是不保证数据一定会到达,适合广播。

全双工半双工与单工
全双工: 表示A可以给B发送数据的同时,B也可以给A发送数据。

半双工:表示A给B发送数据的时候,B不能给A发送数据。当B给A发送数据的时候,A不能给B发送数据。

单工: 表示要么是A只可以给B发送数据,或者B只能给A发送数据。数据是单向发送的不是双向的。

TCP三次握手


TCP建立连接需要三次握手,断开链接需要四次挥手。以下例子中A为客户端,B为服务器,来说明三次握手与四次挥手过程。

注意:TCP是一个全双工的协议,所以下边建立连接时候SYN=1发送两遍,A要向B建立连接发送SYN=1。B也要向A建立连接也要发送SYN=1。同理四次挥手时候也要发送两遍FIN=1。

第一次握手: 客户端A发送SYN=1(代表要向B建立连接),seq=a(A发送数据的一个序列号)到服务器。
第二次握手:服务器B收到数据后,向客户端A发送ACK=1(代表应答收到),SYN=1(代表要向A建立连接),seq=b(B发送数据的一个序列号),ack=a+1(等于收到数据时候的seq+1,代表确认码)。

第三次握手:客户端A收到数据后先看下ack是不是上次发的seq+1=a+1。确保没问题后会向服务器B发送ACK=1(代表应答收到),seq=a+1(A发送数据的下一个序列号),ack=b+1(等于收到数据时候的seq+1,代表确认码)。

å¨è¿éæå¥å¾çæè¿°
TCP四次挥手


第一次挥手: 客户端A向服务器B发送FIN=1(A请求断开服务器连接),seq=a(本次数据序列号)。

第二次挥手:服务器B向客户端A发送ACK=1(应答,收到数据)seq=a+1(代表还有数据没发送)。

第三次挥手:服务器向客户端A发送FIN=1(服务器要断开A的链接),seq=b(本次数据的序列号),ack=a+1(确认码,代表没有数据要发送了)。

第四次挥手:客户端A验证收到的ack是不是等于a+1,确保B没有数据在发送了。然后发送给服务器B,ACK(应答),seq=a+1(本次数据序列号)。

å¨è¿éæå¥å¾çæè¿°
Http


http是应用层的协议,它实现了怎么发数据和怎么收数据,定义了收发的格式,同时定义了是短连接。当一次传输数据结束就断开链接。

特点
只能客户端主动发出请求,服务器被动响应。服务器没办法主动给客户端发数据。
http1.0是个短连接,当一次链接数据传送完毕后,就会断开链接。
http1.1前端和后台可以配置成长链接,默认60s,当一次链接成功,发送完一次数据后,60s内如果前端再一次请求数据那么将复用上一次tcp通道,并且倒计时重新刷新。当60s结束后客户端没进行请求数据,这时候tcp就会断开链接。这个倒计时时间是支持设置的。
请求
请求行
说明了是get方法,还是post方法等等,说明了协议版本http 1.1等,get方法会有URL。这里get方法参数往往要求ASCII码,也就是不能有中文,并且还有长度限制,post没有。其实这里往往是浏览器等作出的限制,而不是post的请求行中就不能放参数。

请求头
包含了User-Agent:浏览器类型,请求数据的来源。
Accept:可以接收的数据类型,这里要和服务器的Content-Type匹配。服务器发送的类型和客户端可以接收的类型要一致。
Accept-Encoding,Accept-Language等等。
Content-Type:发送内容的类型,往往post方法才会有,因为post方法的参数是在请求体里。
请求头部也可以自己添加新字段,比如常见的添加token,userId等。

空行

请求体
一般只有post方法请求体中才会有数据。

响应
状态行
包含协议以及协议的版本,状态码。
1.xxx: 刚开始接收到数据。
2.xxx: 已经接收到数据,可以解析数据。
3.xxx: 重定向。
4.xxx: 客户端的错误。
5.xxx: 服务端错误。
这些都是http的状态码,其实还要后台自己定义的错误码,和这里的状态码不一样。

响应报头
Date: 接收到请求的日期时间。
Content-Type: 响应的数据类型。
Content-Length: 响应数据的内容长度。

空行

响应报文
常见的是返回了html网页内容,或者返回了json数据。

Http请求过程


首先客户端发送http请求连接服务器,tcp协议三次握手建立连接。
客户端开始发送请求数据,服务器例如java会在线程池里拿出来一个线程来接收这次http的请求。
服务器拿到请求后进行资源查找,之后会返回数据给客户端,这个过程就是相应。
客户端拿到服务器返回的数据后保存处理,进行四次挥手断开http链接。 这时候java的那个处理请求的线程将会放回java线程池,等待下次请求。

socket


socket是套接字,是对TCP/IP的封装。它对数据传输的两者提供了一个全双工的管道。
它和http一样,传输数据前要经历三次握手链接也要经历四次挥手断开链接。和http协议的区别在于,socket是一个长链接。http是短连接。socket虽然是长链接,但是由于网络等原因也有可能会断开链接。所以往往会提供一个心跳包,每隔一段时间向服务器发送一个规定好的心跳,如果某一个时间发送没有收到心跳,那代表已经断开链接了。

HTTP长连接和Socket区别
http1.1长连接是为了多次请求服务器可以复用tcp通道,这样就省去了销毁tcp和再次创建tcp通道的时间。
socket目的是为了客户端和服务器之间形成管道,保持两者都可以相互通讯。
http1.1这种长连接在一定程度上提高了请求速度,但是又有别于socket。设计初衷是不一样的。
————————————————
版权声明:本文为CSDN博主「FreeBSFree」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

你可能感兴趣的:(http,tcpip,socket)