(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?

这篇具有很好参考价值的文章主要介绍了(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何理解字节流?

之所以会说TCP是面向字节流的协议,UDP是面向报文的协议,是因为操作系统对TCP和UDP协议的发送方的机制不同,也就是问题原因在发送方

为什么UDP协议是面向报文的协议?

 当用户消息通过UDP协议传输时,操作系统不会对消息进行拆分,在组装好UDP头部后就交给网络层来处理,所以发出去的UDP报文中的数据部分就是完整的用户消息,也就是每个UDP报文就是一个用户消息的边界,这样接收方在接收到UDP报文后,读取一个UDP报文就能读取到完整的用户消息。

操作系统在接收到UDP报文后,会将其插入到队列里,队列里的每一个元素都是一个UDP报文,这样当用户调用recvfrom()系统调用读数据的时候,就会从队列中取出一个数据,然后从内核里拷贝给用户缓冲区。(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?,计算机网络,学习,笔记,tcp/ip

 为什么说TCP是面向字节流的协议?

当用户消息通过TCP协议传输时,消息可能会被操作系统分组成多个的TCP报文,也就是一个完整的用户消息被拆分成多个TCP报文进行传输。

这时,接收方的程序如果不知道发送方发送的消息长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的,因为用户消息被拆分成多个TCP报文后,并不能像UDP那样,一个UDP报文就能代表一个完整的用户消息。

eg:

发送方准备发送[Hi][I am Xiaolin]两个消息。

在发送端,当我们调用send函数完成数据“发送”后,数据并没有真正从网络上发送出去,只是从应用程序拷贝到了操作系统的内核协议栈中。

至于什么时候真正被发送,取决于发送窗口、拥塞窗口以及当前发送缓冲区的大小等条件。也就是说,我们不能认为每次send调用发送的数据,都会作为一个完整的消息被发出。

如果考虑实际网络传输过程中的各种影响,假设发送端陆续调用send函数先后发送[Hi][I am Xiaolin]报文,那么实际的发送情况可能是以下几种:

1. 两个消息被分到同一个TCP报文

(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?,计算机网络,学习,笔记,tcp/ip

2. [I am Xiaolin]报文的部分随[Hi]在一个TCP报文中发送出去

(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?,计算机网络,学习,笔记,tcp/ip

3. [Hi]的部分随[I am Xiaolin]报文中发送出去

(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?,计算机网络,学习,笔记,tcp/ip

因此,不能认为一个用户消息对应一个TCP报文,正因为这样,TCP是面向字节流的协议。

当两个消息的某个部分内容被分到同一个TCP报文时,就是常说的TCP粘包问题,这时,接收方不知道消息的边界的话,是无法读出有效消息的。


如何解决粘包

粘包的问题出现是因为不知道一个用户消息的边界在哪,如果知道了边界在哪,接收方就可以通过边界来划分出有效的用户消息。

一般有三种方式:文章来源地址https://www.toymoban.com/news/detail-599671.html

  • 固定长度的消息
  • 特殊字符作为边界
  • 自定义消息结构

到了这里,关于(学习笔记)如何理解TCP是面向字节流的协议,UDP是面向报文的协议?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络笔记:TCP协议 和UDP协议(传输层)

    TCP 和 UDP都是传输层协议,他们都属于TCP/IP协议族。 TCP的全称是 传输控制协议 是一种 面向连接的、可靠的、基于字节流 的 传输层 通信协议。TCP 是面向连接的、可靠的流协议(流就是指不间断的数据结构) TCP报文 是TCP层传输的数据单元,也称为 报文段 ,一个TCP报文段由

    2024年02月02日
    浏览(50)
  • 如何理解UDP 和 TCP? 区别? 应用场景?

    UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层 也就是说无论应用层交给 UDP 多长的报文,它统统发送,一次发送一个报文 而对接收方,接到后直

    2024年03月20日
    浏览(34)
  • 什么是 TCP 和 UDP?Java 中如何实现 TCP 和 UDP 协议

    在计算机网络中,TCP(传输控制协议)和UDP(用户数据报协议)是两种最常用的传输层协议。它们都用于在网络上传输数据,但是它们之间有很多不同之处。本文将介绍TCP和UDP的基本概念,以及在Java中如何实现TCP和UDP协议。 TCP和UDP都是传输层协议,用于在网络上传输数据。

    2024年02月16日
    浏览(98)
  • TCP/UDP协议重温三次握手四次挥手 简单笔记

    术语储备: SYN: 同步位 ;SYN=1,表示进行一个连接请求 ACK: 确认位 ;ACK=1,确认有效 ACK=0,确认无效 ack : 确认号 ;对方发送序号+1 seq : 序号 ; 标识从TCP发端向TCP收端发送的数据字节流 FIN :表示 关闭连接 TCP/UDP协议都是传输层协议 TCP协议:(传输控制协议) 连接(三次握

    2024年02月09日
    浏览(42)
  • 「网络编程」传输层协议_ UDP协议学习_及原理深入理解

    「前言」文章内容大致是传输层协议,UDP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) HTTP协议普通用户认为是将请求和响应直接发送到了网络当中。但实际应用层需要先将数据交给传输层,由传输层对数据做进一步处理后再将数据继续向下

    2024年02月17日
    浏览(42)
  • socket概述 python中如何使用TCP/UDP协议实现通信-教程

    很多编程语言中,都 使用scoket套接字实现网络通信。 Socket是对TCP/IP协议的封装,Socket本身就是一个调用接口(API),方便程序员用Socket使用TCP/IP协议簇,实现网络通信。 不同编程语言,shiyongSocket通信的语法有所区别,但基本原理类型相似。 它的两种方式,分别是TCP和UDP协

    2024年02月13日
    浏览(41)
  • 如何理解TCP/IP协议?

    TCP/IP, 传输控制协议 / 网际协议 ,是指能够在多个不同网络间实现信息传输的协议簇 TCP(传输控制协议) 一种面向连接的、可靠的、基于字节流的传输层通信协议 IP(网际协议) 用于封包交换数据网络的协议 TCP/IP协议不仅仅指的是 TCP  和 IP 两个协议,而是指一个由 FTP

    2024年02月08日
    浏览(41)
  • SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

    TCP/IP网络通信协议最早是由 罗伯特·卡恩 (Robert E. Kahn)和 文顿·瑟夫 (Vinton G. Cerf)于1972年提出的,它是一个实际的协议栈。 OSI七层网络通信协议最早是 由国际标准化组织 (ISO)于1977年提出的,它是一个理论模型。TCP/IP网络通信协议由于其简单性和实用性,成为 事实上

    2024年01月22日
    浏览(68)
  • (学习笔记-TCP基础知识)TCP与UDP区别

    UDP不提供复杂的控制机制,利用IP提供面向[无连接]的通信服务。 UDP协议非常简单,头部只有8个字节(位),UDP的头部格式如下: 目标和源端口:主要是告诉UDP协议应该把报文发给哪个进程 包长度:该字段保存了UDP首部的长度跟数据的长度之和 校验和:提供可靠的UDP首部和数

    2024年02月17日
    浏览(41)
  • 【Java学习笔记】 68 - 网络——TCP编程、UDP编程

    https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter21/src 目录 项目代码 网络 一、网络相关概念 1.网络通讯 2.网络 3.IP地址 4.域名 5.端口号 6.网络通讯协议 TCP协议:传输控制协议 UDP协议: 二、InetAddress类 1.相关方法 三、Socket 1.基本介绍 2.TCP网络通信编程 基本介绍 应用案例

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包