网络层数
TCP 和 UDP
- 连接:TCP面向连接,通过三次握手建立连接,四次挥手断开连接;UDP是无连接的。
- 可靠性:
- TCP是可靠的通信方式,通过序号字段、累计确认、超时重传(还有冗余ACK重传机制)等方式来确保数据无差错,不丢失,不重复,且按序到达;
- 而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付。
- 报文与字节:TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
- 每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信。
TCP三次握手
-
第一次:客户机向服务器发送一个连接请求报文段。
- 首部
- 同步位 SYN : 1
- 序号 seq:客户机随机选择起始序号 x
- 连接请求报文段不携带数据,但消耗一个序号。
- 首部
-
第二次:服务器收到连接请求报文段后,同意建立连接,向客户机发确认报文段。
- 首部
- 同步位 SYN :1
- 确认位 ACK :1
- 确认号 ack : x + 1
- 序号 seq:服务器随机产生起始序号 y
- 确认报文不携带数据,但也要消耗一个序号。
- 首部
-
第三次:客户机收到确认报文段后,向服务器给出确认。
- 首部:
- 确认位 ACK :1
- 确认号 ack : y + 1
- 序号 seq:x + 1
- 该报文段可以携带数据,若不携带数据则不消耗序号。
- 首部:
TCP四次挥手
-
第一次:客户机向服务器发送连接释放报文段。
- 首部:
- 结束位 FIN :1
- 序号 seq:u. 前面已传送数据的最后一个字节序号加一。
- 首部:
-
第二次:服务器确认。
- 首部:
- 确认位 ACK :1
- 确认号 ack : u + 1
- 序号 seq:v. 前面已传送数据的最后一个字节序号加一。
- 首部:
-
第三次:服务器没有数据发送,向客户机发送连接释放报文段。
- 首部:
- 结束位 FIN :1
- 确认位 ACK :1
- 确认号 ack : u + 1
- 序号 seq:w
- 首部:
-
第四次:客户机收到连接释放报文段,向服务器确认。
- 首部:
- 确认位 ACK :1
- 确认号 ack : w + 1
- 序号 seq:u + 1
- 此时,等待2MSL时间后,TCP连接关闭。
- 首部:
TIME-WAIT
:2MSL(2倍报文最大生存时间)
为什么需要 TIME_WAIT 状态?
TIME-WAIT
作用是等待足够的时间以确保最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。- 如果客户端(主动关闭方)最后一次 ACK 报文(第四次挥手)在网络中丢失了,那么按照 TCP 可靠性原则,服务端(被动关闭方)会重发 FIN 报文。
为什么 TIME_WAIT 等待的时间是 2MSL?
- 网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间。
HTTP 与 HTTPS 有哪些区别?
-
安全性:HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
-
连接建立:HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
-
端口:两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
-
证书:HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTP连接建立过程
HTTP连接的建立是通过TCP三次握手完成:
- 客户端发起连接请求
- 服务器响应请求
- 客户端确认响应
在三次握手完成之后,HTTP连接就建立起来了。
HTTPS连接建立过程
-
TCP 三次握手, SSL/TLS 的握手,才可进入加密报文传输,建立HTTPS连接。
-
SSL/TLS 协议基本流程:
- 客户端向服务器索要并验证服务器的公钥。
- 双方协商生产「会话秘钥」。
- 双方采用「会话秘钥」进行加密通信。
应用层协议
协议 | 底层 | 端口号 |
---|---|---|
HTTP | TCP | HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。 |
FTP | TCP | 控制连接(端口号21),一个是数据连接(端口号20) |
DNS | UDP | 53 |
Telnet | TCP | 23 |