TCP和UDP传输特点

news/2024/7/1 5:16:42

1.1TCP传输特点:

  1. 端到端通信:客户应用程序在一端,服务器在另一端
  2. 建立可靠连接:建立连接时会测试网络的连通性
  3. 可靠交付:建立连接后会发送数据是可靠的,除非因为故障而不能可靠交付,发送方会得到通知
  4. 具有流控的传输:TCP控制数据传输的速率,防止发送方传送数据的速率快于接收方的接收速率,TCP可以用于从快速计算及向慢速计算机发送数据
  5. 双工传输:单个TCP连接允许同时双向传送数据
  6. 流模式:TCP从发送方向接收方发送没有报文边界的字节流

1.2TCP的首部

在这里插入图片描述
在这里插入图片描述
TCP首部各字段的含义如下:

  • 源、目的端口号:用于寻找发送端和接收端的应用程序
  • 首部长度:这个字段占4位,因此TCP最多有60字节的首部。如果没有选项字段,正常的长度是20字节
  • 标志位:在TCP首部中有6个标志位
    ACK:确认序号
    SYN:同步序号用来发起一个连接
    FIN:发送方完成发送任务

1.3TCP连接的建立和终止

在这里插入图片描述
连接步骤:

  • 客户端发送一个SYN报文段指明客户打算连接的服务器端口,发送后,客户进去SYN_SENT状态
  • 服务器启动后首先进去LISTEN状态,当它接收到客户端发来的SYN后,进入SYN_RCV状态,并发送SYN报文作为应答,同时将确认序号设置为客户的初始号+1,对客户的SYN进行确认。
  • 客户端收到确认报文后进入ESTABLISHED状态,表明本方连接已经成功建立,客户将确认序号设置为服务器ISN+1,对服务器的SYN报文段进行确认,当服务器接收到确认报文后,也进入ESTABLISHED状态。

在这里插入图片描述
关闭步骤:

  • 客户的应用进程发起关闭连接请求,它将导致TCP客户发送一个FIN报文段,用来关闭客户到服务器的数据传送,此时客户进入FIN_WAIT_1状态
  • 当服务器收到这个FIN,它发回一个ACK,进入CLOSE_WAIT状态,确认序号收到的序号+1。客户收到该确认后进入FIN_WAIT_2状态,表明本方连接已经关闭,但是仍然能够接收服务器发来的数据
  • 接着服务器程序关闭本方连接,其TCP端发送一个FIN报文段,进入LAST_AC状态,当客户接收到该报文段后进入TIME_WAIT状态
  • 客户在收到服务端发送的FIN请求后,发回一个确认,并将确认号设置为收到的序号+1,发送FIN将导致应用程序关闭他们的的连接,服务器收到确认后,连接关闭,这些FIN的ACK是有TCP软件自动产生的

1.4流式套接字的交互模型

在这里插入图片描述

2.1UDP传输特点

  1. 多对多通信:多个发送方可以向一个接收方发送报文,一个发送方也可以向多个接收方发送报文
  2. 不可靠服务:报文可能丢失,重复或者无序,并且它没有重传措施,如果发生故障,也不会通知对方
  3. 缺乏流量控制:当数据包到达的速度比接收系统或应用的处理速度快时,只是将其丢弃而不会发出警告或者提示
  4. 报文模式

2.2UDP的首部

在这里插入图片描述
在这里插入图片描述
UDP各字段的含义:

  • UDP校验和:UDP校验和是端到端的校验和,它由发送端计算,然后由接收端验证,其目的是发现UDP首部和数据在发送端到接收端之间发生的任何改动。

2.2数据报套接字的交互模型

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/242837.html

相关文章

怎么让BarTender对象等间距分布

在BarTender 2016设计条码标签时,我们需要让对象分布尽可能整齐美观,例如实现对象的对齐,对象等间距分布等。这些在作为世界上最好且最受信任的条码打印软件BarTender中,都是可以很轻松的实现的。下面,小编就给大家讲讲…

mac os x常用快捷键及用法

最近在研究mac os x系统,开始入手,很不习惯,和windows差别很大,毕竟unix内核。使用中总结了一些使用快捷键(默认),持续更新,欢迎大家补充。1.撤销:commandz 保存&#x…

如何创建和获取正则对象?

在JavaSript应用中,使用正则表达式之前,需要创建正则对象。创建正则表达式的方式有两种,一种是用字面量方式创建,另种是通过RegExp0构造函数的方式创建。这两种方式的语法格式如下。 //字面量方式 var变量名/表达式/; // RegExp构…

pytest实战--参数化parametrize+前置fixture

文章目录参数化 parametrize适用场景一个典型的例子前置fixture参数化适用场景一个典型的例子示例2个人疑问?pytest既可以用来做单元测试,也可以用来做自动化接口测试,pytest可以结合allure生成漂亮的测试报告,经过一段时间的学习…

公司Joomla项目笔记1

joomla简介 Joomla!是一套全球知名的内容管理系统。Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、 Windows、MacOSX等各种不同的平台上执行。目前是由Open Source Matters(见扩展阅读)这个开放源码组织进行开发与支…

Eclipse中SVN设置文件为ignore后重新添加至版本控制

先前把需要版本控制的文件夹ignore了,用了很长时间找解决方法,结果发现竟如此简单,对eclipse的功能不熟悉啊。 方法如下:在Window->Show View -> Navigator 中可以看见所有的项目文件,找到ignore的文件&#xff…

做UI设计需要具备什么技能

做UI设计需要具备什么技能?想要做一名合格的UI设计师,需要具备的技能有很多,下面小编整理的几点,可供大家参考,希望能帮助到正在学习UI设计的同学们。 做UI设计需要具备什么技能: 一、软件能力 一位好的ui设计师除了需…

selenium--iframe之模拟qq空间登录

文章目录前言分析切换iframe前言 我在模拟登录qq的时候,发现无论如何都定位不了qq的“账号密码登录”,怎么都进不去qq的登录页面,如下图所示 分析 打开 https://qzone.qq.com/然后点击二维码登录这块,背景出现了灰色&#xff…