TCP和UDP区别以及报文头

news/2024/5/17 19:18:59 标签: TCP, UDP, TCP报文头, UDP报文头, 计算机网络

UDP_0">UDP(用户数据报协议)

UDP_1">UDP特点

UDP只在IP数据报服务的基础上增加了少量的功能:复用与分用、对整个报文的差错检测。

  1. UDP是无连接的
    通信前不需要建立连接,通信结束也无需释放连接。

  2. UDP是不可靠的
    它是尽力而为交付,不能确保每一个数据报都送达。

  3. UDP是面向报文的
    所谓『面向报文』就是指:UDP数据传输的单位是报文,且不会对数据作任何 拆分 和 拼接 操作。
    在发送端,应用程序给传输层的UDP什么样的数据,UDP不会对数据进行切分,只增加一个UDP头并交给网络层。
    在接收端,UDP收到网络层的数据报后,去除IP数据报头部后遍交给应用层,不会作任何拼接操作。

  4. UDP没有拥塞控制
    UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。
    弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。
    优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。

  5. UDP支持一对一、一对多、多对多、多对一通信
    TCP只支持一对一通信。

  6. UDP首部开销小,只有8字节。
    TCP头部至少由20字节,相比于TCP要高效很多。

UDP_26">UDP报文头

在这里插入图片描述

  • 源端口
  • 目的端口
  • 长度:整个数据报的长度
  • 检验和:整个数据报的检验和。

TCP_33">TCP(传输控制协议)

TCP_34">TCP特点

  1. TCP是面向连接的
    通信前需要建立连接,通信结束需要释放连接。

  2. TCP提供可靠交付服务
    所谓『可靠』指的是:TCP发送的数据无重复、无丢失、无错误、与发送端顺序一致。

  3. TCP是面向字节流的
    所谓『面向字节流』指的是:TCP以字节为单位。虽然传输的过程中数据被划分成一个个数据报,但这只是为了方便传输,接收端最终接受到的数据将与发送端的数据一模一样。

  4. TCP提供全双工通信
    所谓『全双工通信』指的是:TCP的两端既可以作为发送端,也可以作为接收端。

  5. 一条TCP连接的两端只能有两个端点
    TCP只能提供点到点的通信,而UDP可以任意方式的通信。

TCP___49">TCP连接 与 套接字

什么是『TCP连接』?

TCP连接是一种抽象的概念,表示一条可以通信的链路。每条TCP连接有且仅有两个端点,表示通信的双方。且双发在任意时刻都可以作为发送者和接收者。

什么是『套接字』?

一条TCP连接的两端就是两个套接字。套接字=IP地址: 端口号。因此,TCP连接=(套接字1,套接字2)=(IP1:端口号1,IP2:端口号2)

TCP_57">TCP头部

在这里插入图片描述TCP头部长度有20字节的固定部分,选项部分长度不定,但最多40字节,因此TCP头部在20-60字节之间。

  1. 源端口 和 目的端口
    传输层和网络层一大重要区别就是传输层指定了数据报发往的应用进程,因此需要端口号标识。

  2. 序号
    当前TCP数据报数据部分的第一个字节的序号。我们知道,TCP是面向字节的,它会对发送的每一个字节进行编号,而且不同数据报之间是连续编号的。
    由于本字段4字节,可以给[0,232-1]个字节进行编号(大约4G),而且序号循环使用,当发送完232-1个字节后,序号又从0开始。一般来说,当2^32-1个字节被发送的时候,前面的字节早就发送成功了,因此序号可以循环使用。

  3. 确认号
    表示当前主机作为接收端时,期望接收的下一个字节的编号是多少。也表示,当前主机已经正确接收的最后一个字节序号+1。

  4. 数据偏移(报文长度)
    它表明了数据报头部的长度。

  5. 保留字段

  6. 标识符
    TCP有7种标识符,用于表示TCP报文的性质。它们只能为0或1。

  • URG=1 当URG字段被置1,表示本数据报的数据部分包含紧急信息,此时紧急指针有效。紧急数据一定位于当前数据包数据部分的最前面,紧急指针标明了紧急数据的尾部。如control+c:这个命令要求操作系统立即停止当前进程。此时,这条命令就会存放在数据包数据部分的开头,并由紧急指针标识命令的位置,并URG字段被置1。

  • ACK=1 ACK被置1后确认号字段才有效。此外,TCP规定,在连接建立后传送的所有报文段都必须把ACK置1。

  • PSH=1 当接收方收到PSH=1的报文后,会立即将数据交付给应用程序,而不会等到缓冲区满后再提交。一些交互式应用需要这样的功能,降低命令的响应时间。

  • RST=1 当该值为1时,表示当前TCP连接出现严重问题,必须要释放重连。

  • SYN=1 SYN在建立连接时使用。当SYN=1,ACK=0时,表示当前报文段是一个连接请求报文。当SYN=1,ACK=1时,表示当前报文段是一个同意建立连接的应答报文。

  • FIN=1 FIN=1表示此报文段是一个释放连接的请求报文。

  1. 接收窗口大小
    该字段用于实现TCP的流量控制。它表示当前接收方的接收窗口的剩余容量,发送方收到该值后会将发送窗口调整成该值的大小。发送窗口的大小又决定了发送速率,所以接收方通过设置该值就可以控制发送放的发送速率。发送方每收到一个数据报都要调整当前的发送窗口。

  2. 检验和
    用于接收端检验整个数据包在传输过程中是否出错。

  3. 紧急指针
    用于标识紧急数据的尾部。

  4. 选项字段
    上述字段都是每个TCP头部必须要有的,而选项字段是可选的,且长度可变,最长40字节。 最常用的选项字段为MMS:最大报文长度。


http://www.niftyadmin.cn/n/1278757.html

相关文章

Hibernate内置的几个经典通用API

Hibernate API地址:http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/criterion/Projections.html Hibernate 学习地址:http://my.oschina.net/u/274427/blog/68528 本文参考地址:http://blessht.iteye.com/blog/1327883 A:…

快速学习-ElasticJob的FAQ

1. 阅读源码时为什么会出现编译错误? 回答: ElasticJob 使用 lombok 实现极简代码。关于更多使用和安装细节,请参考 lombok 官网。 2. 是否支持动态添加作业? 回答: 动态添加作业这个概念每个人理解不尽相同。 ElasticJob-Lite 为 ja…

netty中的EventLoopGroup 和 EventLoop

当系统在运行过程中,如果频繁的进行线程上下文切换,会带来额外的性能损耗。多线程并发执行某个业务流程,业务开发者还需要时刻对线程安全保持警惕,哪些数据可能会被并发修改,如何保护?这不仅降低了开发效率…

Filter 配置说明

1.在web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册&#xff0c;并设置它所能拦截的资源。 123456789101112131415<filter> <!-- 用于为过滤器指定一个名字&#xff0c;该元素的内容不能为空。 --><filter-name>fil…

快速学习-ElasticJob线程池策略

线程池策略&#xff0c;用于执行作业的线程池创建。 SPI 名称详细说明JobExecutorServiceHandler作业执行线程池策略 已知实现类详细说明CPUUsageJobExecutorServiceHandler根据 CPU 核数 * 2 创建作业处理线程池SingleThreadJobExecutorServiceHandler使用单线程处理作业

Hibernate 子查询

TABLE A ( id, type1, type2) id 是主键 TABLE B (idType1,idType2) 其中 (idType1,idType2) 是联合主键 eg: A id type1 type21 t1 null2 null t23 t1 null4 null t2B : idType1 idType21 21 43 …

Redis 实现分布式锁和Zookeeper实现分布式锁

使用 Redis 实现分布式锁 在 JUC 包中除了阻塞锁外还有一种叫 CAS 的无阻塞锁&#xff08;具体可以参考&#xff1a;Java 并发编程之美&#xff1a;并发编程基础晋级篇&#xff09;&#xff0c;CAS 操作本身是原子性的&#xff0c;多个线程操作同一个变量的 CAS 时候只有一个线…

spring源码学习——IOC容器初始化(一)

IOC 容器的初始化包括 BeanDefinition 的 Resource 定位、载入和注册这三个基本的过程。我们以 ApplicationContext 为例讲解&#xff0c;ApplicationContext 系列容器也许是我们最熟悉的&#xff0c;因为 Web项 目 中 使 用 的 XmlWebApplicationContext 就 属 于 这 个 继 承…