网络基础:HTTP/HTTPS, Scoket, Tcp/ip,TCP/UDP

网络由下往上分为物理层、数据链路层、网络层( IP协议)、传输层( TCP协议)、会话层、表示层和应用层(HTTP协议)

接下来我来说说个人理解其中的TCP/IP、Http、Socket的区别

一、网络4/7层模型

TCP/IP协议族四层网络模型
从协议的角度对网络传输做出的模型分类,是基于网络7层模型的。

  • 数据链路层 :代表协议ARP,可解析IP为MAC地址

  • 网络层:代表协议IP,32位ip地址

  • 传输层:代表协议TCP/UDP,建立网络连接,进行数据传输

  • 应用层:代表协议FTP文件传输协议/DNS域名系统/HTTP网络数据

7层模型

  1. 物理层 :负责最后将信息编码成电流脉冲或其它信号用于网上传输。

  2. 数据链路层:ATM,FDDI等协议。数据链路层通过物理网络链路提供可靠的数据传输

  3. 网络层:IP,IPX协议等。这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。

  4. 传输层:TCP,UDP,SPX协议等。:传输层向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。
    数据完整校验(数据重发)等

  5. 会话层:RPC,SQL等。:会话层建立、管理和终止表示层与实体之间的通信会话。通信会话包括发生在不同网络应用层之间的服务请求和服务应答,这些请求与应答通过会话层的协议实现。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。

  6. 表示层:FTP,加密。这一层的主要功能是定义数据格式及加密。

  7. 应用层:http


二、HTTP, Scoket, Tcp/ip, TCP/UDP

  • http是应用层的传输协议。scoket是基于 网络传输层和应用层之间的抽象出来的一套API,它也是tcp/ip协议的封装。

  • TCP为什么安全可靠

  • 1 重传机制
  • 2 流量控制(滑动窗口)
  • 3 拥塞控制
  • TCP/UDP

TCP首部开销20字节;UDP的首部开销小,只有8个字节

TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
视屏,直播可以用UDP,因为快,数据不完整可以接受,其他用tcp,


三、HTTP和HTTPS

https不是应用层的新协议,只是http通信接口部分用ssl/tls协议代替而已。通常http直接和tcp通信,当使用ssl时则演变成先和ssl通信,再由ssl和tcp通信。

SSL/TLS
SSL(Secure Sockets Layer)中文叫做“安全套接层”。它是网景公司在上世纪90年代中期设计的。到了1999年,IETF 就把 SSL 标准化之后的名称改为 TLS(Transport Layer Security),中文叫做“传输层安全协议”。所以ssl/tls这两者其实就是同一种协议,只不过是不同叫法。

SSL协议位于TCP/IP协议与各种应用层协议之间的一种协议;

SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加***等。

1:HTTPS连接过程

  1. 客户端向服务端发起HTTPS请求
  2. 服务端收到请求
    HTTPS协议服务器必须要有一套数字证书,可以自己制作,也可以向证书机构申请(自己颁发的证书需要客户端验证通过,才可以继续访问,而使用证书机构的证书则不会弹出提示页面)。
  3. 服务端->客户端 传送证书
    这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
  4. 客户端收到并解析证书
    解析证书是由客户端的SSL/TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间,如果发现异常,会弹出一个警告框,提示证书存在问题。
    (1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
    (2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
    (3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
    (4)如果找到,那么浏览器就会从操作系统中取出颁发者CA 的公钥(多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开**),然后对服务器发来的证书里面的签名进行解密
    (5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
    (6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
    (7)此时浏览器就可以读取证书中的公钥,用于后续加密了
  5. 客户端->服务端 传送加密信息
    这部分传送的是用证书加密后的随机值(私钥),目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
  6. 服务端解密信息
    服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密
  7. 服务端->客户端 传输加密后的信息
    这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
  8. 客户端解密信息
    客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也是加密后的数据。

网络基础:HTTP/HTTPS, Scoket, Tcp/ip,TCP/UDP

SSL协议就放在应用层和传输层之间。如果一定要对应,那就在应用层

2:HTTP连接过程

HTTP是基于TCP连接的,HTTP连接过程实际上是TCP的连接

TCP三次握手

第一次握手

建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence
Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手

服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment
Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence
Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手

客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment
Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

为什么要三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

假设系统规定SYN发送后,等待1s没有收到服务端的ACK,然后重传SYN,直到超时或者重传次数达到5(假设上限5次),系统抛弃这个连接。
这时client发出的第一SYN接请求报文,在网络中某个结点滞留了6秒,client系统就丢弃了这次连接,但是第6秒后,该报文到达了服务端,服务端就认为这是一次连接请求,给客户端响ACK。如果没有三次握手,这时服务端已经建立了一个连接。殊不知,客户端这次连接已经挂了,服务端还在等待客户端发来数据。因此造成资源浪费。如果有三次握手,那么服务端等不到客户端的ACK(第三次握手),也会释放该连接

TCP三次挥手

第一次挥手

主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次挥手

主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

第三次挥手

主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

第四次挥手

主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

为什么要四次分手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。而且TCP是全双工通信模式。发送FIN报文请求后只表示该端不在发送数据了,但是还可以接收数据。

因此服务端收到客户端的FIN后,先关闭接收通道,并发送一次ACK,但是此时可能还有数据发送完,等到数据发送完了,再给客户端发送一个FIN,客户端收到FIN后关闭接收通道,并发送一次ACK给服务端。