IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【TCP/IP】TCP和UDP简介 -> 正文阅读

[网络协议]【TCP/IP】TCP和UDP简介

TCP与UDP简介

TCP和UDP都是TCP/IP协议簇中的传输层主要协议。TCP提供的可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输。

TCP和UDP并没有绝对的谁优谁劣,这是由于它们各有所长,适用于不同的场景中。TCP和UDP的底层往往是通过系统提供的套接字来实现的。

TCP/IP的传输层

在IP的首部通常都存在一个协议字段,用来识别网络层(IP层)的上一层所采用的是哪一种传输协议。同理,TCP或者UDP也会在数据部分设定一个编号用来识别应该发给哪一个应用。这个有点类似于一个包裹(数据包)通过地址(ip)送到了指定的门牌号,而还需要确定这个包裹的具体收件人是谁(具体的应用)。一般来说,传输层是通过端口号来实现识别具体应用的。

传输层的通信往往是在客户端(请求的发起端)和服务端(请求的接收端)之间进行的。这里有个前提,即服务端的程序需要在请求发起之前启动,否则是无法处理请求的。服务端的这种程序一般称为守护进程。

端口号

端口号是传输层中类似于地址的一个概念,其用来识别同一台计算机中进行通信的不同应用程序,也被称为程序地址。传输层协议通过识别端口号来精准的将数据传输给特定的程序。

仅有一个端口号虽然可以实现区分的功能,但是有些特殊情况。例如在使用浏览器的时候同时打开两个界面。这两个界面的端口号可能都是80,那么就需要进一步判断应该传输给80端口下的哪个界面。所以引入了源端口号来再次加以区分。另外,不同的协议号(用来区分是TCP还是UDP)也是可以用来作为判断的依据。所以数据的传输往往需要通过IP地址、端口号、源端口号以及协议号四个信息来确认接收的目标。端口号的使用是由传输层协议决定的,因此不同的协议可以使用同一种端口号。

端口号的分配分为两种。第一种称为既定端口号,即每个应用程序都有一个指定的端口号。这是一种静态的设置方法,每个应用的端口号不能改变。比如HTTP,FTP等广为使用的应用协议的端口号都是固定的,这些端口号也被称为知名端口号。除了知名端口号,还有一些端口号也会被注册,分布于1024到48151之间。这些端口号对应的程序可以用于任何通信用途。

第二种是时序分配法,一般用在客户端的端口号分配。一般来说,客户端的端口号没有必要固定,因此往往客户端的端口号设置都是交给操作系统来分配。每需要新增一个端口号,都在之前的端口号上加一,实现动态分配。一般动态分配的端口号取值范围在49152到65535之间。

UDP

UDP(User Datagram Protocol)是利用IP提供面向无连接的通信服务,并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

UDP有几个特点,首先UDP并不负责流量控制来避免网络阻塞。其次UDP在面对传输丢包的情况并不会负责重发,也并不会纠正包的顺序错乱的问题。一般这些问题都是交给上层应用程序进行处理。

UDP的首部格式包含有源端口号,目标端口号,包长和校验和组成。主机在接收到UDP数据后会从IP地址首部获得UDP伪首部,并进行校验和计算。当校验无误后会认为所收到的数据是正确的。(如果校验和字段中填入0,则不进行校验,一般这么做是为了提升效率,但不推荐这么做,因为无法检查数据包是否完整)

TCP

TCP意味对“传输,发送,通信”的“控制”协议。它和UDP有很大区别,其充分实现了数据传输时各种控制功能,例如丢包重发控制,次序纠正控制等。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而控制通信流量的浪费。TCP一般以段为单位发送数据。在建立TCP连接时,也可以确定发送数据包的单位,称为“最大消息长度”(MSS)。理想情况下,最大消息长度正好是IP中不会被分片处理的最大数据长度。这里的数据长度并不包括TCP首部和IP首部,指的是TCP数据的长度。不过这只是理想状态下,阻塞控制等因素会让TCP调整一个数据包的长度。

一般TCP是通过检验、序列号、确认应答、重发控制、重发超时、连接管理以及窗口控制等机制来实现可靠传输的。TCP的面向有连接指的是先做好两端之间的准备工作,它会在数据通信之前通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答。如果对端发来确认应答未能到达,就不会进行数据通信。同样,通信结束时会进行断开的处理(FIN包)。具体过程可以视为:
1.客户端发送SYN请求连接
2.服务端发送ACK作为SYN的应答,并再次向客户端发送SYN
3.客户端发送ACK作为服务端SYN的应答
4.客户端和服务端开始数据的通讯
5.客户端发送FIN请求切断连接
6.服务端发送ACK回应FIN请求
7.服务端向客户端发送FIN
8.客户端发送ACK回应服务端的FIN请求
这个SYN请求连接的过程一般也被称为“三次握手”

TCP的传输过程相较于UDP来说会有很多额外的步骤,但是其使用了一些优化策略例如窗口控制、窗口探测、流控制和高速重发控制等进行优化处理,使得整体效率有一定提升。

TCP首部比UDP的复杂很多,其包含源端口号、目标端口号、序列号、确认应答号、数据偏移、保留、控制位、窗口大小、校验和、紧急指针、选项。

TCP的窗口控制

窗口控制作为TCP优化其传输效率的一个比较重要的方法,这里值得一提。发送方在向接收方发送完数据后,往往需要等待接收方发送确认应答,以避免中途发生丢包。但是这个过程会减低通信的性能,包的往返时间越长,网络的吞吐量就越差。

为了解决这个问题,TCP引入了窗口的概念。使用窗口之后,发送方可以一次发送窗口大小个数据包。窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。而确认应答对应的也是更大的单位进行确认。这个机制实现了使用大量的缓冲区,通过对多段同时进行确认应答的功能。发送方通过分析接收方的确认应答来判断是否需要重发数据。如果一切正常,那么就会将窗口滑动到确认应答中的序列号位置。这个机制也被称为滑动窗口控制。

如果在这个过程中,出现了段丢失,那么可以结合窗口控制和重发控制尽量避免流量的浪费。比如如果接收方的确认应答部分的丢失了,那么发送方也可以根据最后一个确认应答的序列号调整窗口的位置,而不是全部重发。同样如果是发送给接收方的数据段丢失了,那么接收方的确认应答则会一直是它收到的有效的段的确认应答。这种情况下如果发送发接收到了多次的同一确认应答,就说明出现了报文丢失的情况,就会考虑重发。

由于接收方的情况并非一直都很理想,有的情况下接收端也会由于需要处理其他事情或者缓冲区不足以接收额外的包而暂时不能接收发送方的数据段。如果在这种情况下发送的数据段很可能会被直接丢弃(因为接收方无法处理),会导致触发重发机制,从而产生流量的浪费。为了防止这个情况,发送方往往需要间断的向接收端询问其可以接收数据的大小(这个过程称为窗口探测),并及时对自己的窗口大小进行调整。这个过程也称为TCP的流控制。

本文为本人的学习笔记,如有问题欢迎指出和讨论@茱莉亚之歌

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:09:39  更:2021-10-07 14:10:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 9:17:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码