C++基础语法梳理:计算机网络丨传输层(TCP&UDP)

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++基础语法梳理:计算机网络丨传输层(TCP&UDP)相关的知识,希望对你有一定的参考价值。

运输层

协议:

TCP(Transmission Control Protocol,传输控制协议)

UDP(User Datagram Protocol,用户数据报协议)

端口:

TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,其传输的单位是报文段。

特征:

①面向连接

②只能点对点(一对一)通信

③可靠交互

④全双工通信

⑤面向字节流

TCP 如何保证可靠传输:

①确认和超时重传

②数据合理分片和排序

③流量控制

④拥塞控制

⑤数据校验

TCP 报文结构

TCP 首部

TCP:状态控制码(Code,Control Flag),占 6 比特,含义如下:

URG:紧急比特(urgent),当 URG=1 时,表明紧急指针字段有效,代表该封包为紧急封包。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据), 且上图中的 Urgent Pointer 字段也会被启用。

ACK:确认比特(Acknowledge)。只有当 ACK=1 时确认号字段才有效,代表这个封包为确认封包。当 ACK=0 时,确认号无效。

PSH:(Push function)若为 1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无需等缓冲满了才送。

RST:复位比特(Reset),当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

SYN:同步比特(Synchronous),SYN 置为 1,就表示这是一个连接请求或连接接受报文,通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。

FIN:终止比特(Final),用来释放一个连接。当 FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

UDP

UDP(User Datagram Protocol,用户数据报协议)是 OSI(Open System Interconnection 开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,其传输的单位是用户数据报。

特征:

①无连接

②尽最大努力交付

③面向报文

④没有拥塞控制

⑤支持一对一、一对多、多对一、多对多的交互通信

⑥首部开销小

UDP 报文结构

UDP 首部

TCP 与 UDP 的区别

TCP 面向连接,UDP 是无连接的;

TCP 提供可靠的服务,也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付

TCP 的逻辑通信信道是全双工的可靠信道;UDP 则是不可靠信道

每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信

TCP 面向字节流(可能出现黏包问题),实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的(不会出现黏包问题)

UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)

TCP 首部开销20字节;UDP 的首部开销小,只有 8 个字节

TCP 黏包问题

原因

TCP 是一个基于字节流的传输服务(UDP 基于报文的),“流” 意味着 TCP 所传输的数据是没有边界的。所以可能会出现两个数据包黏在一起的情况。

解决

发送定长包。如果每个消息的大小都是一样的,那么在接收对等方只要累计接收数据,直到数据等于一个定长的数值就将它作为一个消息。

包头加上包体长度。包头是定长的 4 个字节,说明了包体的长度。接收对等方先接收包头长度,依据包头长度来接收包体。

在数据包之间设置边界,如添加特殊符号 \\r\\n 标记。FTP 协议正是这么做的。但问题在于如果数据正文中也含有 \\r\\n,则会误判为消息的边界。

使用更加复杂的应用层协议。

TCP 流量控制

概念

流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。

方法

利用可变窗口进行流量控制

TCP 拥塞控制

概念

拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

方法

慢开始( slow-start )

拥塞避免( congestion avoidance )

快重传( fast retransmit )

快恢复( fast recovery )

TCP的拥塞控制图

今天的分享就到这里了,下期为大家分享TCP连接管理,大家要好好学C++哟~

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:829164294点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

 

 

以上是关于C++基础语法梳理:计算机网络丨传输层(TCP&UDP)的主要内容,如果未能解决你的问题,请参考以下文章

C++基础语法梳理:计算机网络丨物理层 & 数据链路层

C++基础语法梳理:计算机网络丨网络层(知识详解)

C++基础语法梳理:计算机网络丨应用层

C++基础语法梳理:网络编程丨Socket

知识点梳理 网络基础

C++基础语法梳理:算法丨查找算法(全)