一、UDP协议
UDP协议特性
- 无连接:知道对端的IP和端口号就可以直接进行传输,不需要进行连接。
- 不可靠:发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。
- 面向数据报:应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并(比如发送端一次性接收100个字节,那么接收端也必须一次性接收100个字节)。
UDP协议端格式
UDP协议端格式即UDP协议报文格式。
- UDP的校验和如何实现:是通过CRC校验算法来进行实现的,即将数据报中的每个字节进行累加,传输数据的时候将数据和校验和一并发送出去;接收方接收到的校验和我们视为旧校验和,而接收方受到的数据将每个字节累加后得到的结构视为新的校验和。当数据相同时,校验和一定相同;校验和不同时,数据一定不同,但是校验和相同时数据不一定相同(工程上不考虑,因为概率太小了,可以忽略不计)。
最后,如果数据出错的话,UDP的做法是直接丢弃掉,如果你想让对方重新发一遍数据的话,哈哈,对不起,UDP协议做不到(TCP就可以做到,这也算是TCP协议可靠性的一种体现把)!!!
二、TCP协议
TCP协议头格式
下面是TCP协议头格式的图片:
- 端口号:属于传输层,知道了端口号之后才能进一步确定数据要交给哪个应用程序。端口号的范围依然是0-65535,0-1024端口号在这里依然存在。
- 首部长度:TCP首部长度字段的最小值是5,最大值是15,单位是字节;所以首部长度字段的最小字节是
4*5=20
字节,最大字节为15*4=60
字节。另外TCP报头长度是可变长的,TCP报头长度的最短长度是20字节,选项部分可有可无,可以有一个选项,也可以有多个选项,选项的存在与否就影响到了4位首部长度最终是几,最终通过4位首部长度可以确定选项到哪里结束,数据从哪里开始
(即我们需要通过首部长度来确定载荷数据是从哪里开始,报头是从哪里结束的)。 - 6位保留位:保留位是为了以后协议的发展保留的,目前它们的值必须被设置为0(保留位就是为了将来对TCP协议进行升级留下了空间,但是就目前来看大概率是用不到了)。
- 16位校验和同UDP协议中的校验和是一个意思,用于确保数据传输的正确性。
- 32位序号:每个数据报文段(segment)都会包含一个 TCP 报文头和数据载荷,而TCP 数据报中载荷数据的第一个字节的序号存储在 32 位序号字段(Sequence Number)中。
- 32位确认序号:确认序号的数值就是收到的最后一个字节的编号+1(在 TCP 数据传输过程中,接收方收到发送方发送的每个数据报文段,会对其进行确认,确认号就是接收方期望接收的下一个字节的序号。)
- 六位标志位之
ACK
:当ACK为0的时候只有32位序号是有效的,32位确认序号是无效的;当ACK为1的时候,32位序号和32位确认序号都是有效的。
三、TCP协议可靠性分析
-
面向连接:TCP在数据传输前要建立连接,数据传输后要释放连接,因此是一种面向连接的传输协议。
-
面向字节流:TCP像一个字节流一样传输数据,以字节流位单位进行读写,应用程序可以将数据分割成任意大小的段,不同的数据段会拼成一个完整的数据流。
-
全双工:TCP的一个连接,既有发送缓冲区,也有接收缓冲区,那么对于这一个连接,既可以读数据,也可以写数据。
-
确认应答机制
:TCP协议的可靠性最核心的机制就是确认应答。
确认应答机制
超时重传机制
以上就是超时重传机制,仅仅依靠确认应答机制并不能保证数据传输的可靠性,超时重传机制是确认应答机制的有效补充。确认应答机制是正常情况下接收方给发送方说明我已经收到消息了,而超时重传机制是用来解决丢包这种非正常情况的一种策略。
本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!