TCP与UDP区别
-
TCP面向连接,UDP面向无连接 -
TCP面向报文,UDP面向字节流 -
TCP是一对一的两点服务,即一条连接只有两个端点 UDP支持一对一,一对多,多对多的交互通信 -
TCP提供可靠传输服务(数据顺序、正确性),UDP传输不可靠 -
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。 UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。 -
TCP协议对系统资源要求多(头部开销大),UDP协议要求少
TCP三次握手
首先服务端和客户端都处于close状态,先是服务端主动监听某个端口,处于listen状态。
客户端会随机初始化一个序列号,将此序列号置于TCP首部的“序列号”字段中,同时把SYN标志位置为1,表示SYN报文。接着把第一个SYN报文发送到服务端,表示向服务端发起连接。
服务端收到SYN报文后也会随机初始化一个序列号,将此序列置于TCP首部的“序列号”字段中,其次把TCP首部的’‘确认应答号”字段填入“SYN报文序列号+1“,接着把SYN和ACK标志位置为1.最后把该报文发给客户端。
客户端受到服务端报文后,要回应最后一个应答报文,首先将应答报文TCP首部ACK标志位置为1,其次“确认应答号”填入“服务端报文序列号+1”,最后把报文发送给服务端,之后客户端处于已建立连接状态,服务端收到报文后也会进入已建立连接状态、
三次握手的原因
三次握手才可以阻止重复历史连接的初始化(主要原因) 三次握手才可以同步双方的初始序列号 三次握手才可以避免资源浪费
不使用「两次握手」和「四次握手」的原因:
「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号; 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
TCP四次挥手
客户端打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,即FIN报文
服务端收到该报文后,就向客户端发送ACK应答报文进入等待状态,客户端收到ACK应答报文后也进入等待状态
等待服务端处理完数据后,也向客户端发送FIN报文
客户端收到服务端的FIN报文后,回一个ACK应答报文,进入Time_Wait状态
服务端收到ACK报文后,就进入关闭状态了,服务端完成了连接的关闭
客户端在经过2MSL时间后,也自动进入关闭状态,完成了连接的关闭
为什么需要 TIME_WAIT 状态?
「主动发起关闭连接」的一方,才会有 TIME-WAIT 状态。
需要 TIME-WAIT 状态,主要是两个原因:
MSL
Maximum Segment Lifetime,报文最大生存时间
HTTP是什么?
超文本传输协议
GET 和 POST 的区别?
Get 方法的含义是请求从服务器获取资源
POST 方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 body 里
操作方式 | 数据位置 | 明文密文 | 数据安全 | 长度限制 | 应用场景 |
---|
GET | HTTP包头 | 明文 | 不安全 | 长度较小 | 查询数据 | POST | HTTP正文 | 可明可密 | 安全 | 支持较大数据传输 | 修改数据 |
HTTP 与 HTTPS 有哪些区别?
- HTTP 是超文本传输协议,信息是明文传输,存在安全?险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
- 使用 TCP ?连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
- HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- HTTP 的端口号是 80,HTTPS 的端口号是 443。
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTP/2.0与HTTP/1.1区别?
-
HTTP/2.0采用二进制格式而非文本格式 -
HTTP/2.0是完全多路复用,是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应,只需要一个连接就可以实现并行 -
HTTP/2.0使用报头压缩,降低了开销 -
服务不再是被动地响应,也可以主动向客户端发送消息。
DNS协议
域名解析,能够使用户更方便的访问互联网,而不用记住能够被机器直接读取的ip地址
DNS协议运行在UDP协议之上,使用端口号53
|