网络层--TCP/UDP协议

目录

一、TCP/UDP协议介绍

1、UDP(User Datagram Protocol)--用户数据报协议

1.1 UDP报文格式

 1.2 UDP协议的特性

2、TCP(Transmission Control Protocol )--传输控制协议

2.1 TCP报文格式

2.2 TCP协议的特性

2.3 TCP三次握手

2.4 四次挥手 

三、TCP和UDP的区别

四、telnet协议--telnet协议--远程管理协议


一、TCP/UDP协议介绍

1、UDP(User Datagram Protocol)--用户数据报协议

UDP是无连接的、不可靠的面向消息的传输层协议,尽管UDP协议提供标标头和有效负载的完整性验证(通过校验和),但他不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP消息的状态。

1.1 UDP报文格式

  •  16位UDP长度表示整个数据报(UDP首部+UDP数据)的长度
  •   如果校验和出错,就会直接丢弃(UDP校验首部和数据部分)

 1.2 UDP协议的特性

  1. 工作在传输层

  2. 提供不可靠的网络访问

  3. 非面向连接协议

  4. 有限的错误检查

  5. 传输性能高

  6. 无数据恢复特性

2、TCP(Transmission Control Protocol )--传输控制协议

  • TCP是面向连接的、可靠的进程到进程通信的协议
  • TCP提供全双工服务,即数据可在同一时间双向传输
  • TCP报文段
  1. TCP将若干个字节构成一个分组,叫报文段(Segment)。
  2. TCP报文段封装在IP数据报中

2.1 TCP报文格式

  •  源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535)

端口号的作用:用于区别应用程序,或者说用来区别协议(只能区别应用层协议)

客户端的端口号:随机的

服务端的端口号:一般是固定的

  • 序列号:发送端为每个字节进行编号,便于接收端正确重组
  • 确认号:(ack))用于确认发送端的信息
  • 首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
  • 控制位:描述了设备目前处于什么状态

URG(紧急位):与紧急指针联动。表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效

ACK(确认位):表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

PSH(急切位): 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中

RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段

SYN(同步位):在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段

状态位数值表示状态
SYN=1 请求建立连接
SYN=1 ACK=1同意和你连接
FIN=1 请求断开
FIN=1 ACK=1同意和你断开

          

滑动窗口大小:调节每次发送的数据包量

  • 服务端和客户端之间会根据实际情况自动调节数据包的个数

校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置

选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节

2.2 TCP协议的特性

1.工作在传输层
2.面向连接协议
3.全双工协议
4.半关闭-- 断开
5.错误检查(校验)
6.将数据打包成段,排序(给数据排序)
7.确认机制   (对面每发一个包,我会告诉对面我收到了)
8.数据恢复,重传
9. 流量控制,滑动窗口

2.3 TCP三次握手

第一次握手:客户端会主动发起 请求连接报文,报文序号是随机产生的x,并且报文中的控制位SYN=1--代表请求建立连接

--此时客户端处于SYN-SENT状态

第二次握手:当服务端接收到请求连接的报文会回复一个 报文,此时会产生随机序号y,生成一个确定号值为客户端请求报文的序号+1(x+1),然后控制位 SYN=1 ACK=1 代表同意建立连接

--此时服务器处于SYN-RCVD状态

第三次握手:当客户端收到 同意建立连接的报文时会回复一个确认报文会按照对方要求产生序号为x+1,在生成一个确认号值为 对方报文的序号+1(y+1),最后控制位的ACK=1代表收到对方同意连接的请求,

--此时客户端处于ESTAB-LISHED状态。服务器收到 ACK 报文之后,也处于ESTAB-LISHED 状态,此时,双方已建立起了连接。

 第一次、第二次握手不可以携带数据,只有第三次携带数据。

 试想如果是用两次握手,则会出现下面这种情况:

如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。

2.4 四次挥手 

 

 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。

--即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。


第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
--即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。


第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
--即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。


第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
--即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

挥手为什么需要四次?
因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。

三、TCP和UDP的区别

UDPTCP
是否连接无连接面向连接
是否可靠不可靠,不使用流量控制和拥塞控制可靠,传输使用流量控制和拥塞控制
传输方式面向报文面向字节流
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用 (IP电话、视频会议、直播等)适用于要求可靠传输的应用,例女文件传输
  •    TCP是面向连接的、可靠性的、基于字节流的传输控制协议
  •    UDP是无连接的、不可靠的、数据报传输的传输协议

四、telnet协议--telnet协议--远程管理协议

作用:探测远端服务器端口是否打开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3-17-ref 模板引用的基本使用

什么是模板引用 简单来说,就是在 js 代码中 获取到 html 中的dom元素的完整信息, 从而实现直接操作dom元素的效果。模板引用的语法 1、给 dom 元素添加 ref名称 属性,指定一个独有的名称; 2、js 中 声明一个 与 dom 元素的 ref 同…

Find My钥匙扣|苹果Find My技术与钥匙扣结合,智能防丢,全球定位

钥匙扣,又称锁匙扣,钥匙圈,钥匙链,钥匙挂等。制作钥匙扣的材料一般为金属、皮革、塑料、木头等。此物精致小巧、造型千变万化是人们每天随身携带的日常用品。钥匙扣是挂在钥匙圈上的一种装饰物品。最新的智能钥匙扣还具有防丢查找…

如何做好企业数据管理

国际数据管理协会(DAMA)将数据管理定义为“管理数据生命周期的体系结构、策略、实践和程序的开发”。 简言之,数据管理就是以经济、安全和高效的方式收集、保存和使用数据的过程。 数据管理可帮助人员、企业和互联事物优化数据使用&#xff…

在线双目测宽仪 实时监测 在线分析

板材轧制生产中不可缺少宽度在线检测设备,有很多种类型,如光电平行光测宽、光电广角测头测宽、光电平行光广角测宽、激光测宽、机器视觉测宽、机器视觉双目测宽等。根据产线、价格及需求不同,进行不同类型的测宽仪定制,本文主要介…

蓝凌EIS智慧协同平台 SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 UniformEntry.asp接口处未对用户输入的SQL语句进行…

广州华锐互动:VR煤矿安全操作规程实训提升矿工安全意识与技能

随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为人们的生活带来了极大的便利。在煤矿行业,VR技术的应用也日益受到重视,尤其是在煤矿安全检查方面。为了提高矿工的安全意识和技能&#xff0…

Unity中实现ShaderToy卡通火(原理实现篇)

文章目录 前言一、我们在片元着色器中,实现卡通火的大体框架1、使用 noise 和 _CUTOFF 判断作为显示火焰的区域2、_CUTOFF : 用于裁剪噪波范围的三角形3、noise getNoise(uv, t); : 噪波函数 二、顺着大体框架依次解析具体实现的功能1、 uv.x * 4.0; : …

yolov8实战第二天——yolov8训练结果分析(保姆式解读)

yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)-CSDN博客 我们在上一篇文章训练了一个老鼠的yolov8检测模型,训练结果如下图,接下来我们就详细解析下面几张图。 一、混淆矩阵 正确挑选(正确&#…

C#串口通讯

在C#写串口通讯小程序时,可以使用System.IO.Ports命名空间提供的SerialPort类。下面是一个简单的例子,包含了一个基本的UI,用于设置串口参数和进行通讯。这里使用了Windows Forms(WinForms)来创建UI。 步骤&#xff1…

数据结构——队列

目录 一、队列的定义 二、队列的实现 1. 队列的顺序存储结构 1.1. 顺序队 1. 创建顺序队 2. 删除顺序队 3. 判断队列是否为空 4. 判断队列是否已满 5. 入队 6. 出队 7. 获取队列长度 8. 获取队首元素 1.2. 环形队 1. 创建环形队 2. 删除环形队 3. 判断环形队列…

C++导出C标准的dll动态库

1 新建项目 1.1 使用VS新建一个空项目 1.2 在属性页中将配置类型改为:动态库(dll) 2 添加头文件 添加文件Api.h,示例代码如下 #pragma once#define DLLEXPORT __declspec(dllexport)extern "C" {DLLEXPORT int getAdd(int a, int b); //求…

C++中的多态你真的了解吗?多态原理全面具体讲解

目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 4. 多态的原理 4.1 虚函数表 4.2多态的原理 4.3 动态绑定与静态绑定 5. 单继…

使用helpdesk帮助台有什么好处?

Helpdesk帮助台是一套帮助IT团队管理IT工单生命周期、自动化日常工作、优化工作流程的集合,它可以帮助IT团队提高生产力、降低成本、改善服务水平和客户体验。 而helpdesk帮助台管理软件所带来的好处不仅限于IT运营,所有利益相关者都会受益,…

【C语言必学知识点五】指针

指针 导言一、指针与指针变量二、指针变量的创建和指针类型三、指针类型的意义3.1 指针 /- 整数3.2 指针解引用 四、野指针4.1 定义4.2 野指针的成因4.3 指针未初始化4.4 指针越界访问4.5 指针指向的空间被释放4.6 如何规避野指针 五、指针运算5.1指针-整数5.2 指针-指针5.2.1 …

短剧分销平台开发,打造短剧内容变现新模式

短剧目前已经成为了影视行业中的一匹黑马,短剧主要是根据爽文小说翻拍,将小说中精彩高潮的剧情翻拍成短剧爽文,使得观众沉浸在短剧中,欲罢不能! 短剧分销平台是短剧推广的新模式,它打破了传统的分销模式。…

代码随想录算法训练营 | day51 动态规划 309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

刷题 309.最佳买卖股票时机含冷冻期 题目链接 | 文章讲解 | 视频讲解 题目:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多…

启动cad显示丢失mfc140u.dll怎么办?mfc140u.dll丢失有效解决方法分享

在CAD软件或其他软件中,有时候会出现由于找不到mfc140u.dll文件而无法执行代码的错误提示。这个问题可能是由于多种原因引起的,例如文件损坏、缺失或被病毒感染等。下面将介绍五个常见的解决方法,并解释mfc140u.dll丢失的原因以及该文件对CAD…

7-1 六度空间 (PTA-数据结构)

“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示…

Openwrt源码下载出现“The remote end hung up unexpected”

最近项目原因需要下载openwrt21.02版本源码,花费了很多时间,找到正确方法后,发现可以节省很多时间,记录下过程,方便自己,可能方便他人。 一.问题阐述 openwrt21.02下载链接如下: git clone -…

Python从入门到精通六:Python数据容器

数据容器入门 为什么学习数据容器 思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。 如何做呢? 学习数据容器,就是为了批量存储或批量使用多份数据 Python中的数据容器: 一种可以容纳多份…