对tcp/udp、http/https的理解

735 阅读3分钟

前言

作为前端开发人员,了解传输层中tcp/udp协议的原理是十分有必要的,接下来我们来探讨一下这两种协议的区别。

正文

tcp协议是基于连接的,可以实现在不可靠的信道上建立可靠的连接,但占用的cpu资源比较大,适用的场景,例如传输文件、发送邮件等等。

udp协议是非连接的,只是简单包装一下数据包,再通过网卡发送出去,虽然稳定性和安全性比不上tcp协议,但占用资源比较少,适用的场景,例如视频通话、语音电话、视频直播等等

tcp有三次握手和四次挥手的过程。

三次握手

简单来说就是客户端先向服务端发送一个syn包,服务端在接受完syn包之后,给客户端发送syn包+ack包,客户端在收到服务端发送syn包+ack包后,再次发送ack包。

这时肯定会有人有疑问,明明两次握手也可以啊,为什么要三次呢?我个人觉得是假如第一次发送的syn 包由于网络堵塞的原因发送不出去,客户端在接收不到服务端的回应之后会重新发送syn包,万一刚才阻塞的syn包突然可以发送了,这会让服务端以为这是两个连接,导致连接建立失败。

四次挥手

由于tcp连接是双工的,假设客户端向服务端发起关闭请求,客户端会先向服务端发送fin 包,服务端在收到fin包之后向客户端发送ack包,进入关闭等待状态,在这时客户端和服务端都能正常传输内容,然后服务端再发送fin包给客户端,进入关闭确认状态,客户端在收到fin包之后,再向服务端发送ack包,进入超时等待状态,服务端在接收到ack包之后立刻断掉连接。

这时肯定会有人有疑问,为什么客户端需要有等待超时这一步,是因为,我们并不知道最后一步发送的 ack包会不会丢失,假如ack包丢失的话,客户端这边又关闭了连接,服务端会因为接收不到ack 包而一直处于关闭确认状态。如果有超时等待这一步,服务端在长时间接收不到客户端发送过来的ack 包,可以重新发送fin包给客户端,客户端再重新计时。

http/https

首先,http/https都是基于tcp协议的。

其次 http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全。