传输层的协议-TCP/UDP
传输层协议
既然了解了 IP协议 的内容,上一篇通篇没有说到数据的安全性,因为 IP协议 只负责将数据运输到对应的计算机而已,不会对数据做任何操作,也不会验证数据是否完整到达或者有没有被破坏,或者交给哪个程序进行处理。而这些操作,是由 传输层协议 来做保证的。
传输层目前我们最流行的协议应该是 TCP 和 UDP 了吧。前者是有连接的情况下传输数据,而后者则不会考虑数据是否完整到达,但是效率会比 TCP 略胜一筹。当然两者都有合适的使用场景。TCP 很多时候会用于设备之间的连接和数据传递,比如仓库 PDA 的使用。而 UDP 则多用于通话、视频方面的应用,还有我们熟知的 微信QQ,也是使用 UDP 作为传输协议的,他利用了 UDP 的效率,然后在 应用层 适配了数据完整性的校验。所以很多时候我们会有这种场景,我这边发送的消息显示个红色的❌,但是其实对方已经接受到刚刚发送的消息了,但是我们以为没有接收到又重新发了一次。还有直播类型的 应用层协议 多用 UDP协议。
那,既然 IP协议 已经将数据传送到当前服务器了,服务器就应该具有一定的程序进行处理,要不然服务器也会懵逼。这个过程就通过解开客户端发送的数据,里面包含了一个参数称为 端口号,服务器系统就会交给监听这个 端口 对应的应用程序进行处理。依然是拿快递行业做类比,我们知道我们的地址一般会写到家里或者附近的地方,IP协议 就是负责将这个件送给对应的这个区域而已,但是这个区域有那么多人,根本不知道要交给谁,所以这时候快递员就需要用电话联系快递单号上的收件人电话,然后将件交给收件人。那么这个 收件人电话 就相当于端口号了。
这些服务端处理的 程序,将会监听着服务器系统上的 空闲端口。当这些端口有数据进来的时候,自然他们就可以接收到数据进行处理。当然如果这个 端口 被占用的话,程序是会启动失败的。但是不同的协议是可以监听同一个端口的,比方说当前有个 Tomcat 程序监听着 8080,我们还可以用另外一个程序,以 UDP 的协议继续监听这个 端口。
一般来说,0 ~ 1023 留给一些知名程序进行处理(比如 sshd HTTP),如果我们需要占用端口,一般从 1024 开始,最大的端口号是 65535。当然这些端口也可能被我们启动的某些比较有名的程序占用,比如 Redis 占用 6379,Tomcat 占用 8080 等等。但是通常如果不需要这些程序的话,我们是可以使用这些端口的。