一、简介
1、相关概念
TCP:传送控制协议(Transmission Control Protocol)
UDP:用户数据报协议 (UDP:User Datagram Protocol)
HTTP:全称是HyperText Transfer Protocal,即:超文本传输协议,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
HTTPS:安全超文本传输协议 它是一个安全通信通道(Secure Hypertext Transfer Protocol)
Socket:只是一种连接模式,不是协议,Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
2、TCP、UDP和HTTP三者的关系
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层
(1)在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
(2)在传输层中有TCP协议与UDP协议。
(3)在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
TCP和UDP的区别:
TCP | UDP | |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
引用场合 | 传输大量数据,对可靠性要求较高的场合 | 传输少量数据,对可靠性要求不高的场景 |
速度 | 慢 | 快 |
TCP三次握手(建立连接)和四次握手(释放连接):
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:
(1)建立连接的过程
TCP连接的三次握手:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。也正由于上面的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
(2)断开连接的过程
断开连接端可以是Client端,也可以是Server端。假设Client端发起中断连接请求:
第一次握手:就先发送FIN报文,等待Server端确认。
第二次握手:Server端接到FIN报文后,但是如果还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以服务器端先发送ACK,告诉Client端:请求已经收到了,但是我还没准备好,请继续等待停止的消息。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
第三次握手:当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端:服务器这边数据发完了,准备好关闭连接了。
第四次握手:Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,所以发送ACK后进入TIME_WAIT状态, Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,最后,Client端也可以关闭连接了至此,TCP连接就已经完全关闭了!
关闭连接的过程如下图所示:
3、HTTP和HTTPS的关系
(1)HTTPS通信原理
HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS:
SSL (Secure Socket Layer,安全套接字层,SSL使用40 位关键字作为RC4流加密算法)
TLS (Transport Layer Security,传输层安全协议)
(2)HTTPS的作用
-
内容加密 建立一个信息安全通道,来保证数据传输的安全;
-
身份认证 确认网站的真实性
-
数据完整性 防止内容被第三方冒充或者篡改
(3)HTTPS与HTTP的区别
- https协议需要到CA申请证书。
- http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
4、Socket
想要实现网络中进程之间的通信,首要解决的问题是如何唯一标识一个进程?在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。
在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯 一标识网络通讯中的 一个进程,所以“IP地址+端口号”就称为socket。 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。 TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socket API。如下图所示:
总结
在ISO/OSI网络体系结构中,网络由下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
IP 协议对应于网络层,TCP协议对应于传输层,HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用。
可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
关于OSI七层模型和TCP/IP四层网络模型的分别请参见百度经验:https://jingyan.baidu.com/article/00a07f387b7e0682d028dce2.html