theme: cyanosis
前言
这一块的知识点如果我们看书本的话肯定会被它晦涩难懂的专业术语给麻痹了。尤其是对于我们初学者来说。所以这篇文章打算以一个数据包的传输例子,来把IP/TCP/UDP协议简单通俗的讲解一下。
😁😁😁
五层模型
先来看看我们经常题的网络五层模型完整工作流程
-
应用层
:最高层,提供特定于应用程序的协议,运行在该层的协议有HTTP、FTP、SSH、WebScoket等 -
传输层
:为两个主机进程通信提供通用的数据传输协议,如TCP、UDP -
网络层
:负责寻址和路由功能,将数据包发送到特定的计算机,主要协议是IP协议,路由器就是在这一层 -
链路层
:负责将二进制数据包和网络信号相互转换,交换机、网卡就是在这一层 -
物理层
:主要有接收器、发送器、中继器、光纤电缆等
我们这一节涉及的IP/TCP/UDP协议就藏在传输层和网络层了
IP:找到目的主机
以数据包传输为例,数据包要在互联网上进行传输,就要符合网际协议(IP)
标准。
互联网上不同的在线设备都有唯一的地址,地址只是一个数字,这和大部分家庭收件地址类似,你只需要知道一个家庭的具体地址,就可以往这个地址发送包裹,这样物流系统就能把物品送到目的地。
计算机的地址就称为 IP 地址
如果要想把一个数据包从主机 A
发送给主机 B
,那么在传输之前,数据包上会被附加上主机 B
的 IP 地址
信息,这样在传输过程中才能正确寻址。额外地,数据包上还会附加上主机 A
本身的 IP 地址
,有了这些信息主机 B
才可以回复信息给主机 A
。这些附加的信息会被装进一个叫 IP
头的数据结构里。
为了方便理解,先把网络简单分为三层结构,如下图
下面我们一起来看下一个数据包从主机 A
到主机 B
的旅程:
- 上层将含有“极客时间”的数据包交给网络层;
- 网络层再将
IP 头
附加到数据包
上,组成新的IP
数据包,并交给底层; - 底层通过物理网络将数据包传输给
主机 B
; 数据包
被传输到主机 B
的网络层,在这里主机 B
拆开数据包的IP 头
信息,并将拆开来的数据部分交给上层;- 最终,含有“极客时间”信息的数据包就到达了主机 B 的上层了。
UDP:把数据包送达应用程序
IP
是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序,是交给浏览器还是交给王者荣耀?因此,需要基于 IP
之上开发能和应用打交道的协议,最常见的是“用户数据包协议)”,简称UDP
。
UDP
中一个最重要的信息是端口号,端口号其实就是一个数字。通过端口号UDP
就能把指定的数据包发送给指定的程序
了,所以 IP
通过 IP
地址信息把数据包发送给指定的电脑,而 UDP
通过端口号
把数据包分发给正确的程序
。
和 IP 头
一样,端口号
会被装进 UDP 头
里面,UDP 头
再和原始数据包合并组成新的 UDP
数据包。
在IP
结构的基础上进行了扩充
下面我们一起来看下一个数据包从主机 A 旅行到主机 B 的路线:
- 上层将含有“极客时间”的数据包交给传输层;
传输层
会在数据包前面附加上UDP
头,组成新的UDP
数据包,再将新的UDP
数据包交给网络层;网络层
再将IP
头附加到数据包上,组成新的IP
数据包,并交给底层;- 数据包被传输到
主机 B
的网络层,在这里主机 B
拆开IP
头信息,并将拆开来的数据部分交给传输层
; - 在
传输层
,数据包中的UDP
头会被拆开,并根据UDP
中所提供的端口号
,把数据部分交给上层的应用程序; - 最终,含有“极客时间”信息的数据包就旅行到了
主机 B
上层应用程序这里。
在使用 UDP
发送数据时,也会有各种因素会导致数据包出错
- 虽然
UDP
可以校验数据是否正确,但是对于错误的数据包,UDP
并不提供重发机制,只是丢弃当前的包 - 数据包在传输过程中容易丢失,因为
UDP
在发送之后也无法知道是否能达到目的地
就是发不发是我的事,你接没接到就和我无关了
大文件
会被拆分成很多小的数据包
来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而UDP
协议并不知道如何组装
这些数据包,从而把这些数据包还原成完整的文件。
虽说 UDP
不能保证数据可靠性,但是传输速度却非常快,所以 UDP
会应用在一些关注速度、但不那么严格要求数据完整性的领域,如在线视频、互动游戏等。
TCP:把数据完整地送达应用程序
正因为UDP有着上述不可靠的特点,所以我们引入 TCP
了。TCP
是一种面向连接的、可靠的、基于字节流的传输层通信协议。相对于 UDP
,TCP
有下面两个特点:
- 对于数据包丢失的情况,
TCP
提供重传机制; TCP
引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。
下面我们再来看看加入TCP
后单个数据包的传输流程
通过上图你应该可以了解一个数据包是如何通过 TCP 来传输的。TCP 单个数据包的传输流程和 UDP 流程差不多,不同的地方在于,通过 TCP 头的信息保证了一块大的数据传输的完整性。
小结
这篇文章主要目的简单理解一下IP/TCP/UDP协议,因此在这三种协议的细节上并没有展开很多,还有许多需要我们课后继续学习的地方。
希望可以帮助到屏幕前的你~
⭐⭐⭐
本文正在参加「金石计划 . 瓜分6万现金大奖」
参考文章:
暂无评论内容