浏览器打怪(二)->三分钟认识TCP/UDP

互联网中的数据是通过数据包来传输的。如果发送的数据很大,那么该数据就会被拆分为很多小数据包来传输

IP

目的

把数据包送达目的主机

是什么

数据包要在网上进行传输,就要符合网际协议(Internet Protocol,简称IP)标准。

计算机的地址就称为IP地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息

  1. 如果想把一个数据包从主机A发送给主机B,那么在传输之前,数据包上会被附加上主机B的IP地址信息,这样在传输过程中才能正确寻址。
  2. 数据包上还会附加上主机A本身的IP地址,有了这些信息主机B才可以回复信息给主机A。这些附加的信息会被装进一个叫IP头的数据结构里。IP头是IP数据包开头的信息,包含IP版本、源IP地址、目标IP地址、生存时间等信息。
  3. 底层通过物理网络将数据包传输给主机B
  4. 数据包被传输到主机B的网络层,在这里主机B拆开数据包的IP头信息,并将拆开来的数据部分交给上层

UDP

目的

把数据包送达应用程序

是什么

IP是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序。因此,需要基于IP之上开发能和应用打交道的协议,最常见的是"用户数据包协议(User Datagram Protocol)",简称UDP。

UDP中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。通过端口号UDP就能把指定的数据包发送给指定的程序了

和IP头一样,端口号会被装进UDP头里面,UDP头再和原始数据包合并组成新的UDP数据包。UDP头中除了目的端口,还有源端口号等信息

  1. 上层将数据包交给传输层
  2. 传输层会在数据包前面附加上UDP头,组成新的UDP数据包,再将新的UDP数据包交给网络层;
  3. 网络层再将IP头附加到数据包上,组成新的IP数据包,并交给底层;
  4. 数据包被传输到主机B的网络层,在这里主机B拆开IP头信息,并将拆开来的数据部分交给传输层;
  5. 在传输层,数据包中的UDP头会被拆开,并根据UDP中所提供的端口号,把数据部分交给上层的应用程序

丢包

在使用UDP发送数据时,有各种因素会导致数据包出错,虽然UDP可以校验数据是否正确,但是对于错误的数据包,UDP并不提供重发机制,只是丢弃当前的包,而且UDP在发送之后也无法知道是否能达到目的地。

虽说UDP不能保证数据可靠性,但是传输速度却非常快,所以UDP会应用在一些关注速度、但不那么严格要求数据完整性的领域,如在线视频、互动游戏等。

TCP

目的

把数据完整地送达应用程序

对于浏览器请求,或者邮件这类要求数据传输可靠性(reliability)的应用,如果使用UDP来传输会存在两个问题

  • 数据包在传输过程中容易丢失;
  • 大文件会被拆分成很多小的数据包来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而UDP协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。

是什么

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相对于UDP,TCP有下面两个特点:

  • 对于数据包丢失的情况,TCP提供重传机制;
  • TCP引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。

和UDP头一样,TCP头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包

连接

  • 建立连接
    三次握手
  • 数据传输
    在该阶段,接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端。所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息,则判断为数据包丢失,并触发发送端的重发机制。同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照TCP头中的序号为其排序,从而保证组成完整的数据。
  • 断开连接
    四次挥手

TCP为了保证数据传输的可靠性,牺牲了数据包的传输速度

相关推荐
Ticnix11 分钟前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人14 分钟前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl18 分钟前
OpenClaw 深度技术解析
前端
崔庆才丨静觅22 分钟前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人30 分钟前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼33 分钟前
shadcn/ui,给你一个真正可控的UI组件库
前端
布列瑟农的星空37 分钟前
前端都能看懂的Rust入门教程(三)——控制流语句
前端·后端·rust
Mr Xu_42 分钟前
Vue 3 中计算属性的最佳实践:提升可读性、可维护性与性能
前端·javascript
jerrywus1 小时前
我写了个 Claude Code Skill,再也不用手动切图传 COS 了
前端·agent·claude
玖月晴空1 小时前
探索关于Spec 和Skills 的一些实战运用-Kiro篇
前端·aigc·代码规范