【网络编程开发】8.TCP连接管理与UDP协议 9.IP协议与ethernet协议

news2024/11/27 20:35:03

8.TCP连接管理与UDP协议

三次握手

三次握手的过程在TCP/IP网络通信中起着至关重要的作用,它不仅确保了数据的可靠传输,还为两端的数据传输提供了稳定的连接初始化过程。这一过程涉及到几个关键步骤,每个步骤都有其特定的目的和功能。

在这里插入图片描述

步骤

  1. 初始化:B 的 TCP 服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求。
  2. 第一次握手
    • A 的 TCP 向 B 主动发出连接请求报文段,其包头中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
    • 注意:TCP规定,SYN 报文段(即SYN = 1的报文段)不能携带数据,但要消耗掉一个序号。
    • 通过这一步,服务器知道了客户端具有发送数据的能力,但此时服务器还未确认自己能够接收和发送数据到客户端。
  3. 第二次握手
    • B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
    • B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号 ack = x + 1,自己选择的序号 seq = y。
    • 这个报文段也不能携带数据,但同样要消耗掉一个序号。
    • 通过这一步,客户端确认了服务器既能接收数据也能发送数据。
  4. 第三次握手
    • A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1。
    • A 的 TCP 通知上层应用进程,连接已经建立。
    • TCP 标准规定:ACK 报文段可以携带数据。
      但如果不携带数据,则不消耗序号。下一个数据报文段的序号仍是 seq = x + 1。
    • 这一步完成了整个握手过程,现在服务器知道客户端既能接收数据也能发送数据。只有当服务器收到这个最后的ACK包时,连接才算正式建立,随后双方可以开始数据传输。
  5. 数据开始传输:B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。双方可以开始数据传送。

四次挥手

四次挥手过程是TCP连接释放的核心机制,它确保了数据传输的完整性和可靠性。在网络通信中,TCP(传输控制协议)提供可靠的、面向连接的服务,确保数据在互联网中的准确传输。这一过程中,“四次挥手”是TCP协议关闭连接的一个重要环节,它涉及客户端和服务器之间的数据交换确认,确保双方都没有数据传输后,才正式关闭连接。

在这里插入图片描述

TCP四次挥手的过程具体如下:

  1. 第一次挥手:当一端(通常是客户端)完成数据发送后,会向另一端(服务器)发送一个FIN报文,试图关闭这一方向的连接。此时,客户端不再发送数据,但可以接受数据。
    • A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
    • A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认。
    • TCP规定:FIN 报文段即使不携带数据,也消耗掉一个序号。
  2. 第二次挥手:另一端(服务器)收到这个FIN报文后,会发送一个ACK报文作为响应,确认序号ack为收到的序号加1,表明已经接收到客户端的关闭请求,此时服务器还可以继续发送数据。
    • B 发出确认,ACK=1,确认号 ack = u+1,这个报文段的序号 seq = v。
    • TCP 服务器进程通知高层应用进程。
    • 从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭 (half-close) 状态。B 若发送数据,A 仍要接收。
  3. 第三次挥手:当服务器也没有数据需要发送时,同样会发送一个FIN报文给客户端,表示自己也准备关闭连接。
    • 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。
    • FIN=1,ACK=1,确认号 ack = u+1。
  4. 第四次挥手:客户端收到来自服务器的FIN报文后,会发送ACK报文进行确认,ack序列号设为收到的序号加1。此后,客户端进入TIME_WAIT状态,等待2MSL(最大段生存时间)以确保对方正确接收到了ACK报文。之后,客户端也会关闭连接。
    • A 收到连接释放报文段后,必须发出确认。
    • ACK=1,确认号 ack=w+1,自己的序号 seq = u + 1

保活计时器

  • 用来防止在 TCP 连接出现长时期空闲。

  • 通常设置为 2 小时 。

  • 若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。

  • 若发送了 10 个探测报文段(每一个相隔 75 秒)还没有响应,就假定客户出了故障,因而就终止该连接。

9.IP协议与ethernet协议

IP 数据报首部的固定部分中的各字段

在这里插入图片描述

  1. 版本(Version):这个字段占4位,用于标识IP数据报遵循的IP协议版本。常见的版本有IPv4(0100)和IPv6(0110)。版本字段确保了与相应IP版本的兼容性。
  2. 首部长度(Header Length):用4位表示,说明IP数据报首部的长度。由于单位是4字节,首部长度的最大值为60字节。通常首部长度为20字节,这适用于大多数情况。
  3. 服务类型(Type of Service):占8位,旧称服务类型(Service Type),在现代网络中被称为区分服务(Differentiated Services)。该字段用于处理特殊服务要求,如低延迟、高可靠性等。
  4. 总长度(Total Length):总长度字段为16位,表明整个IP数据报的长度,包括首部和数据载荷。其单位为字节,因此数据报的最大长度可达65535字节。这个字段对于确定数据报的大小及是否需要分片至关重要。
  5. 标识(Identification):这是一个16位的字段,用于唯一标识一个IP数据报。相同的标识值意味着分片来源于同一个IP数据报。这在分片后的重组过程中是必不可少的。
  6. 标志(Flags):占3位,其中关注最多的是最后两位。最低位是MF(More Fragments),若设置为此位,则表示后面还有更多分片。中间位是DF(Don’t Fragment),若设置为此位,则不允许对该数据报进行分片处理。
  7. 片偏移(Fragment Offset):这个13位的字段指示分片相对于原始数据报的偏移量,以8字节为单位。这对于接收端正确重组分片非常重要。
  8. 生存时间(Time to Live, TTL):占8位,用于设置数据报可以经过的最多路由器数。每经过一个路由器,TTL减1,当TTL减至0时,数据报被丢弃,从而防止数据报在网络中无限循环。
  9. 协议(Protocol):此8位字段表明数据报的数据部分使用的协议类型,例如TCP、UDP或ICMP。
  10. 首部检验和(Header Checksum):这个16位的字段仅对数据报的首部进行错误检查,保证首部的正确性。数据部分的错误检测由更高层的协议负责。

此外,还有源IP地址和目标IP地址字段,各占4字节。这两个字段分别指定了发送数据报的主机和数据报目的地的IP地址。

分片

在这里插入图片描述

  • 假设一个IP数据报首部20字节,数据部分3800字节,需要分片。由于MTU限制为1500字节,每个分片的最大数据长度应为1480字节(1500字节扣除20字节首部)。

  • 分片处理开始,首先根据1480字节的限制,将数据分为三个分片。第一个分片包含首部和前1400字节的数据,第二个分片包含首部和接下来的1400字节的数据,第三个分片包含剩余的数据和首部。

  • 每个分片的标识相同,表明它们属于同一个IP数据报。第一个和第二个分片的MF标志设置为1,表示后续还有更多分片。最后一个分片的MF标志设置为0,表示这是最后一个分片。

  • 片偏移量分别设置为0, 175, 和350(以8字节为单位),这表示每个分片的数据部分在原始数据报中的相对位置。

Ethernet协议

Ethernet协议是一种重要的链路层协议,专门用于实现局域网(LAN)内的数据传输和地址封装

Ethernet协议由DIX联盟开发,是计算机网络中应用最广泛的局域网通信协议之一。该协议基于冲突检测的共享媒体访问控制方法,允许多个设备在同一个局域网上同时传输数据。

以太网 V2 的 MAC 帧格式

在这里插入图片描述

  1. 类型字段
    • 2字节
    • 类型字段用来标志上一层使用的是什么协议,
    • 以便把收到的 MAC 帧的数据上交给上一层的这个协议。
  2. 数据字段
    • 46 ~ 1500 字节
    • 数据字段的正式名称是 MAC 客户数据字段。
    • 最小长度 64 字节 - 18 字节的首部和尾部 = 数据字段的最小长度(46字节)
  3. 无效的 MAC 帧
    • 数据字段的长度与长度字段的值不一致;
    • 帧的长度不是整数个字节;
    • 用收到的帧检验序列 FCS 查出有差错;
    • 数据字段的长度不在 46 ~ 1500 字节之间。有效的 MAC 帧长度为 64 ~ 1518 字节之间。
    • 对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。

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

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

相关文章

你可以直接和数据库对话了!DB-GPT 用LLM定义数据库下一代交互方式,数据库领域的GPT、开启数据3.0 时代

✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) 你可以直接和数据库对话了!DB-GPT 用LLM定义数据库下一代交互方式,数据库领…

前端开发高频面试题

好的,以下是对您提出的问题的详细回答: 说说vue动态权限绑定渲染列表(权限列表渲染) Vue中动态权限绑定渲染列表通常涉及以下步骤: 首先,通过API请求从服务器获取当前用户的权限数据。在Vue组件中&#xff…

Excel 生成所在月份的每一天列表

Excel 的 A2 格是日期 A1Fecha201/03/24 需要生成该日期所在月份的每一天的列表 A1WholeMonth201/03/24302/03/24403/03/24504/03/24605/03/24706/03/24807/03/24908/03/241009/03/241110/03/241211/03/241312/03/241413/03/241514/03/241615/03/241716/03/241817/03/241918…

【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)

2024 International Conference on Smart Finance and Financial Management 2024年智慧金融与财务管理国际会议 【会议信息】 会议简称:SFFM 2024 截稿时间:以官网为准 大会地点:中国广州 会议官网:www.iacsffm.com 会议邮箱&am…

【python】OpenCV—Cartoonify and Portray

参考来自 使用PythonOpenCV将照片变成卡通照片 文章目录 1 卡通化codecv2.medianBlurcv2.adaptiveThresholdcv2.kmeanscv2.bilateralFilter 2 肖像画cv2.divide 1 卡通化 code import cv2 import numpy as npdef edge_mask(img, line_size, blur_value):gray cv2.cvtColor(…

idea2023如何创建普通maven工程项目

解决 1.创建新项目 1.进入创建项目 File -> new -> project 2,project 中有 build system 选择maven 2.在已有项目中创建普通maven工程 1.右键项目选择 new -> Module 2.选择 new Module 其实与新建maven工程没什么区别 em:问题 idea以前的版本是在Mav…

【一百一十】【算法分析与设计】[SDOI2009] HH的项链,树状数组应用,查询区间的种类数,树状数组查询区间种类数

P1972 [SDOI2009] HH的项链 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此&am…

第十二届蓝桥杯C++青少年组中/高级组选拔赛2020年11月22日真题解析

一、编程题 第1题&#xff1a;求和 【题目描述】 输入一个正整数 N(N < 100)&#xff0c;输出 1 到 N(包含 1 和 N)之间所有奇数的和。 【输入描述】 输入一个正整数 N(N < 100) 【输出描述】 输出 1 到 N 之间的所有奇数的和 【输入样例】 3【输出样例】 4答案&…

Llama模型家族之拒绝抽样(Rejection Sampling)(九) 强化学习之Rejection Sampling

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

利用streamlit结合langchain_aws实现claud3的页面交互

测试使用的代码如下 import streamlit as st from langchain_aws import ChatBedrockdef chat_with_model(prompt, model_id):llm ChatBedrock(credentials_profile_name"default", model_idmodel_id, region_name"us-east-1")res llm.invoke(prompt)re…

UiPath发送邮件给多人时需要注意哪些限制?

UiPath发送邮件给多人的步骤&#xff1f;如何使用UiPath发信&#xff1f; 尽管UiPath提供了强大的邮件发送功能&#xff0c;但在批量发送邮件时&#xff0c;有一些限制和注意事项是我们必须了解的。AokSend将详细介绍这些限制&#xff0c;并提供一些优化建议。 UiPath发送邮件…

视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案

随着新能源汽车的广泛使用&#xff0c;公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率&#xff0c;LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。 该方案通过安装高分辨率摄像头&#xff0c;对充电桩及其周边区域进…

纷享销客安全体系:安全合规认证

安全合规认证是指组织通过独立的第三方机构对其信息系统和数据进行评估和审查&#xff0c;以确认其符合相关的安全标准、法律法规和行业要求的过程。 安全合规认证可以帮助组织提高信息系统和数据的安全性&#xff0c;并向客户、合作伙伴和监管机构证明其符合相关的安全标准和…

python协程入门实战详解

本章将以通俗易懂、贴合实际的方式介绍以下内容&#xff1a; 协程是什么&#xff0c;有什么特点&#xff0c;协程的优势是什么如何理解事件和事件循环协程的创建方式&#xff0c;如何控制协程的并发量在协程中使用aiohttp发送HTTP请求aiohttp案例协程中的异常处理&#xff0c;…

如何使用Python的Turtle模块绘制小猪

一、前置条件 在开始学习如何使用Python的Turtle模块进行绘画之前&#xff0c;请确保你的电脑已安装Python环境。如果尚未安装Python&#xff0c;你可以从Python官网下载并安装最新版本。 Turtle模块是Python内置的一个用于绘图的库&#xff0c;通常不需要额外安装。如果你发…

使用 Ollama 和 Open WebUI 自托管 LLM 聊天机器人(无需 GPU)

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; 使用 Ollama 和 Open WebUI 自托管 LLM 聊天机器人&#xff08;无需 GPU&#xff09; &#x1f31…

linux指令--sed

sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 语法解析 sed [选项] 编辑命令 文件 选项&#xff1a; -n&#xff1a;只显示匹配处理的行-e&#xff1a;执行多个编辑命令时-i&#xff1a;在原文件中进行修改&#xff0c;不输出到屏幕-…

Windows下对于Qt中带 / 的路径的处理

在Windows下&#xff0c;如果你想使用操作系统的分隔符显示用户的路径&#xff0c;请使用 toNativeSeparators()。 请看以下代码&#xff1a; void Player::on_playBtn_clicked() {if (this->m_url.isEmpty()) {openMedia();if (this->m_url.isEmpty())return;}qDebug(…

机器学习作业6——svm支持向量机

目录 一、理论 概念&#xff1a; 线性可分&#xff1a; 支持向量&#xff1a; 间隔&#xff1a; 目标&#xff1a; 软间隔&#xff1a; 梯度下降法&#xff1a; 别的方法&#xff1a; 拉格朗日函数&#xff1a; SMO算法&#xff1a; 核函数&#xff1a; 二、代码 …

数据结构之ArrayList与顺序表(下)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 ArrayList的具体使用 118. 杨辉三角 扑克洗牌算法 接上篇&#xff1a;数据结构之ArrayLis…