10分钟理解TCP、UDP 和端口号

PHPer 2020-05-05 1262 0 0

前言

在我们开始学习网络编程的时候,我们发现一些名词出现的频率极其高,比如 TCP/IP、UDP、OSI 七层网络模型等。这肯定不是偶然,因为它们极其重要,才会被人反复提及。尤其在面试的时候,面试官喜欢把它们拿来,当作考察面试者基础功底的重要环节。为了不让文章显得冗余,我们今天只谈网络中的 TCP、UDP 和端口

协议、TCP 和 UDP

在了解 TCP(Transmission Control Protocol 即传输控制协议) 和 UDP(User Datagram Protocol 即用户数据包协议) 之前,我们先要知道一个名词,即协议。它到底是什么?它其实就是一套约定成俗的规则。就像开会的时候,我们达成了一些共识,先开发那个接口,项目什么时候上线等等。

可以毫不夸张地说计算机网络的构建与发展,奠基石就是各种网络协议。它们定义了信息通讯的方式,以及如何收发信息等,比如:

  • IP 协议负责将多个包交换网络连接起来,并管理通讯 IP 源地址和目标地址的协议
  • TCP 和 UDP 协议则是位于应用层和 IP 层之间,负责它们之间信息传输的重要协议

既然是协议,大家都必须遵守,否则,今天张三定一个协议,李四不同意,他明天再定一个协议,这就乱了套。因此,不同的大厂和许多公司就联合起来组成一个组织,将这些协议统一规范起来。你就必须得用这些规定好的协议,否则就无法通信。这才实现了“地球村”的梦想。今天无论用什么设备,在世界的任何角落,用哪种国家的语言,都可以很方便地使用网络进行通信

TCP 和 UDP 的特点

用一个不算严谨的说法总结 TCP 就是,女孩子如果遇到 TCP 这样的男生,就嫁了吧。因为TCP的核心特点就是靠谱。他的特定包括,面向连接、可靠、基于字节流控制的传输,就像一个管道一样将应用层和 IP 层连接起来

而与之相对应的,UDP 就像二十多岁的浪子。他们不够可靠,但却充满热情。一切以效率为先,他们可以马上答应你很多事情,并且愿意立马付出实践。你这一秒说佛珠浪漫,他不管身处何处,立马搭飞机给你去取,下一秒说想去听周杰伦的演唱会,他立马给你订票。当然,人的精力和时间都有限,所以就可能出现不可控的意外,比如根本没有足够的钱买门票等。这和UDP相仿,它提供无连接通信,但不对传送的数据包提供可靠性保证

TCP 和 UDP 的特点总结

ee990ca479_normal.jpg

TCP 和 UDP 的使用场景

不同的人,因性格不同,做事的方式也不一样,你不能说这样就一定好,那样就一定不好,对于 TCP 和 UDP 也是一样,在不同的场景中,他们各有各的妙用

比如在开发一个游戏的的程序是,对于玩家登陆账号,因为我们要确保不同的玩家能登陆到自己的账号,这个时候就要应用 TCP 协议。而对于控制游戏中角色的移动,我们只需根据玩家鼠标的点击移动角色,如果因为小概率的网络问题,对于玩家来说,再次进行角色移动操作即可,成本和风险在可控范围内,因此就可以使用 UDP 协议

我们从以上可以看出,如果是基础服务功能,则最好使用 TCP 协议,保证服务的可靠性。以确保过程中,每一个网络包能够正确抵达目的地。而相较于 UDP ,程序员则需要自己去进一步做丢包情况和字节传输顺序的处理

可不要因此就觉得 UDP 非常难用,正相反,其实有大量的服务是基于 UDP 协议的。比如 DNS 解析服务。每一台电脑访问外网网页,都需要通过 DNS 服务解析域名,从中找到对应的 IP 地址。这个时候如果 DNS 出了问题,我们其实只需要再一次进行 DNS 寻址查询即可。唯一的副作用,可能就是有一丁点儿延迟罢了

bd95bd3e63_normal.jpg

另一个 UDP 的应用就是 IP 电话, 我们常把它称作 VoIP(Voice over IP),它的原理可以简化的理解为,把拨打电话从以往的电话通讯,转移到网络通讯上,类似于我们现在的微信通话。当你和某人通话的时候,用的就是 UDP ,想象一下,其实我们这个时候需要的并不是可靠性,而是实时性。如果不幸中间有一点信息损失了,比如你妈说:“过年给我把对象带回来,不然就别回来了”。由于信息损失一部分,像这样——“过年给 把对象带 来,不然 别回 了”,其实我们是可以理解一整句话的意思的。而如果用 TCP,我们可能说一句话,别人 30 秒之后才能听到,这显然是不能忍受的...

立即注册

更新于:2020-05-05 12:04:46
    您需要登录后才可以评论。 立即注册
    相关内容

    常用的网络协议学习整理

    HTTP/1.1 302 Found(PHP的get_headers()函数验证链接是否有效)

    HTTP/1.0 200 OK(PHP的get_headers()函数验证链接是否有效)

    (实测:超不省心,这个方法太陈旧了) 超省心游戏加速:Wireguard+udp加速...

    wireguard+udpspeeder+udp2raw多用户配置

    Wireguard+udpspeeder+udp2raw游戏加速方案改进版-实测有效

    Linux使用 PaPing 检测TCP连通性与端口延迟

    什么是 SSL、TLS 和 HTTPS?

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作