以太网--TCP/IP协议(二)

上文中讲述了IP协议,本文主要来讲一下TCP协议。

TCP协议

(1)端到端通信

直接把源主机应用程序产生的数据传输到目的主机使用这 些数据的应用程序中,就是端到端通信

(2)传输层端口

公认端口,数值一般为 0~1023。

登记端口号,数值为1024~49151,为没有公认端口号的 应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。

客户端口号或短暂端口号,数值为49152~65535,留给客 户进程选择暂时使用。当服务器进程收到客户进程的报 文时,就知道了客户进程所使用的动态端口号。通信结 束后,这个端口号可供其他客户进程以后使用。

端口协议说明
21FTP文件传输协议,用于上传、下载
23TELNET用于远程登陆,通过连接目标计算机的这一端口,得 到验证后可以远程控制管理目标计算机
25SMTP简单邮件传输协议,用于发送邮件
53DNS域名服务,当用户输入网站的名称后,由DNS负责将 它解析成IP地址,这个过程中用到的端口号是53
80HTTP超文本传输协议,通过HTTP实现网络上超文本的输出

(3)TCP报文段格式

  • 源端口和目的端口:源端口号与IP头部中的源IP地址,目的端口与IP头部中的目的地址,可以唯一确定从源端到目的端的一对TCP连接。共有216-1个端口号。
  • 序号:用于标识TCP发送端向TCP接收端发送数据字节流的序号,指的是本报文段所发送的数据的第一个字节的序号。
  • 确认号:用于标识接收端收到的下一个TCP报文段第一个字节的序号。确认号字段只有当ACK标志为1时才有效
  • 数据偏移:指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。也称为首部长度
  • 紧急位URG : URG=1时,表明紧 URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  • 确认位ACK :ACK=1时,确认号才有效;ACK=0时,确认号无效。
  • 推送位PSH :接收TCP收到推送位置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后才向上交付。 推送位psh:接收tcp收到推送位置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后才向上交付。
  • 复位位RST :RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因) ,必须释放连接,同时通知对方。
  • 同步位SYN:SYN=1时,表示这是一个连接请求或连接接受报文。只有在连接建立的过程中SYN才被置1。
  • 终止位FIN :用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放传输连接。
  • 窗口:用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间的大小确定自己的接收窗口大小然后通知对方以确定对方的发送窗口的上限
  • 检验和:覆盖报文的头部和整个数据部分。
  • 紧急指针:URG=1时,紧急指针指向紧急数据的位置。

TCP连接的建立(三次握手)

  • A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数 据字节的序号是 x。

  • B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
  • B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号 ack = x + 1,自己选择的序号 seq = y。

  • A 收到此报文段后向 B 给出确认,其 ACK = 1, 确认号 ack = y + 1。
  • A 的 TCP 通知上层应用进程,连接已经建立。

  • B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP连接已经建立。

TCP连接的关闭(四次挥手)

  • 数据传输结束后,通信的双方都可释放连接。现在 A 的 应用进程先向其 TCP 发出连接释放报文段,并停止发送数 据,主动关闭 TCP 连接。
  • A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待B的确认。

  • B 发出确认,确认号 ack = u + 1, 序号 seq = v。TCP 服务器进程通知高层应用进程。 从 A 到 B 这个方向的连接 就释放了,TCP 连接 处于半关闭状态。
  • B 若发送数据,A 仍要接收。

  • 若B已经没有要向A发送的数据,其应用进程就通知 TCP 释放连接。

  • A 收到连接释放报文段后,必须发出确认。在确认报文 段中 ACK = 1,确认号 ack =w + 1,自己的序号 seq = u + 1。

UDP协议

UDP是一种无连接的、不可靠的传输层协议,它不对发送的数据包进行排序、重组,也不提供数据确认、重传或流量控制等机制。这种设计使得UDP在数据传输上更加高效,但同时也意味着数据的完整性和可靠性需要由应用层来保障。

工作原理

当应用层数据通过UDP发送时,UDP会将其封装成一个个的数据报(Datagram),每个数据报都包含了源端口号、目的端口号、数据长度和校验和等信息。然后,这些数据报会通过网络层(如IP协议)传输到目标主机,由目标主机的UDP层解封装后传递给相应的应用层。

优势

  • 高效性:由于UDP省略了TCP中的许多复杂机制,如三次握手、四次挥手等,因此在数据传输速度上更具优势。
  • 实时性:对于需要快速响应的应用(如在线游戏、实时音视频传输等),UDP的低延迟特性使其成为首选。
  • 简单性:UDP协议的设计相对简单,实现起来更加容易,也更容易进行调试和优化。

劣势

  • 不可靠性:由于UDP不提供数据确认和重传机制,因此在网络条件不佳时容易出现数据丢失或乱序现象。
  • 无连接性:UDP是一种无连接的协议,这意味着在数据传输前不需要建立连接,但也因此无法对传输的双方进行身份验证或加密保护。

UDP的应用场景

  • 实时音视频传输:在视频会议、在线直播等场景中,UDP因其低延迟特性而被广泛应用。尽管可能会面临一定的数据丢失风险,但通过合理的错误隐藏和冗余编码等技术手段,可以保证音视频流的流畅性和连续性。
  • 网络游戏:对于需要快速响应和低延迟的网络游戏来说,UDP是不可或缺的。游戏中的操作指令和状态更新往往需要即时传输,而UDP正好能够满足这一需求。
  • DNS查询:DNS(域名系统)查询也常使用UDP协议。因为DNS查询通常只涉及少量的数据交换,且对实时性要求较高,所以使用UDP可以大大减少查询的延迟。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ansible--role

简介 roles是ansible,playbooks的目录的组织结构,将代码或文件进行模块化,成为roles的文件目录组织结构。 易读,代码可冲哟美好,层次清晰 目录机构 mkdir roles/nginx/{files,handlers,tasks,templates,vars} -ptou…

Google Play结算防掉单方案

我们公司的产品主要是出海产品,使用的是Google Play支付,但是在上线以后,经常有客诉,说支付以后,权益没有到账,于是对整个Google支付体系做了研究了一下。 我们的整个支付流程图大概如下: 其中后端参考的文档地址为: https://developers.google.com/android-publishe…

GB35114 USC安防平台 中星微国密摄像机配置 流程

中星微国密摄像机配置介绍 如下以中星微VS-IPC8021S-Y-T4摄像机为例,需要先各自获取p10文件,并通过证书签发机构或者测试SM2证书签发获取证书。 网络配置如下: 摄像机的IP地址为192.168.1.108,国标ID为34020000001320000015 系统的IP地址…

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues,各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来🤞。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 🏷️C#/.NET/.NET Cor…

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 FeatureExtraction 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(calculateSmoothness())2. 标记遮挡点(markOcc…

nvm及nodejs安装相关

安装 1.清空文件夹,卸载nvm及nodejs 2.下载安装包 https://github.com/coreybutler/nvm-windows/releases (也下载有) 3.安装nvm 地址写D:/nvm和D:/nodejs 4.安装nodejs nvm ls available //查询版本 nvm install 16.20.2 //安装对应版…

【H2O2|全栈】关于HTML(1)认识HTML

HTML相关知识 目录 前言 准备工作 WEB前端是什么? HTML是什么? 如何运行HTML文件? 标签 概念 分类 双标签和单标签 行内标签和块标签 HTML文档结构 预告和回顾 UI设计相关 Markdown | Md文档相关 项目合作管理相关 后话 前…

idea快捷键_idea 2024 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面 (必备)

Ctrl G 在当前文件跳转到指定行处 Ctrl J 插入自定义动态代码模板 (必备) Ctrl P 方法参数提示显示 (必备) Ctrl Q 光标所在的变量 / 类名 / 方法名等上面(也可以在提示补充的时候按),显示文…

基于SpringBoot的校园跑腿系统+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

tabBar设置底部菜单以及选项iconfont图标

1.tabBar设置底部菜单 在官网里面可以了解到tabBar组件的一些知识和注意点: 需要给页面设置一个底部导航的话可以在pages.json里面设置一个tabBar标签,在其里面设置pagePath和text属性。 可以看的pagePath是跳转的地址,text是下面导航的文字…

DataLoader使用

文章目录 一、认识dataloader二、DataLoader整合数据集三、使用DataLoader展示图片方法四、去除结尾不满足batch_size设值图片的展示 一、认识dataloader DataLoader 用于封装数据集,并提供批量加载数据的迭代器。它支持自动打乱数据、多线程数据加载等功能。datas…

SpringDataJPA系列(7)Jackson注解在实体中应用

SpringDataJPA系列(7)Jackson注解在实体中应用 常用的Jackson注解 Springboot中默认集成的是Jackson,我们可以在jackson依赖包下看到Jackson有多个注解 一般常用的有下面这些: 一个实体的示例 测试方法如下: 按照上述图片中的序号做个简…

汽车网络安全的未来:将车辆视为端点

汽车行业面临着许多与其他行业的成功企业相同的网络安全风险和威胁,但它也在应对一些独特的风险和威胁。 Nuspire 的首席威胁分析师 Josh Smith(一家在汽车领域有着深厚根基并保护通用汽车和斯巴鲁等客户的托管安全服务提供商)谈到了当前的风…

多个路由器级联实现子网的方式

好久没写博客啦,最近搬家,换了网络环境,简单记录一下网络配置。 拓扑图就不画了,光猫 - > 华为TC7102路由 -> 华为AX2 Pro路由 -> 各种设备,简单表示就是这样。 原因是第一个路由是房东的,我希望自…

Lombok jar包引入和用法

大家好,今天分享一个在编写代码时的快捷方法。 当我们在封装实体类时,会使用set、get等一些方法。如下图,不但费事还影响代码的美观。 那么如何才能减少代码的冗余呢,首先lib中导入lombok的jar包并添加库。 此处我已导入&#xf…

【软件工程】软件开发模型

三、瀑布模型 四、几种软件开发模型的主要特点 题目 判断题 选择题 小结

linux中PATH变量-详细介绍(1)

配置完后可以通过echo $PATH查看配置结果。 生效方法:立即生效 有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置 用户局限:仅对当前用户 2.对用户生效 因为写入到 .bash_prof…

1014 Waiting in Line

链接: 1014 Waiting in Line - PAT (Advanced Level) Practice (pintia.cn) 大致题意: 有 n 个窗口,每个窗口最多能容纳 m 人同时排队。一共有 k 个顾客,他们每个人有一个服务时长 t[i]。顾客们从早上 8 点开始服务。如果一个顾…

【Python 千题 —— 算法篇】无重复字符最长子段

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在编程过程中,处理字符串的任务时常遇到,其中一个经典问题是查找无重复字符的最长子串。这在很多应用场景中…

KRTSt内嵌Lua脚本

KRTSt内嵌Lua脚本 Lua 简介 Lua是一门强大、高效、轻量、可嵌入的脚本语言。它支持多种编程架构:过程编程、面向对象编程(OOP)、函数式编程、数据驱动编程及数据描述。 Lua结合了简洁的过程语法和强大的数据描述结构(基于关联数…