当前位置: 首页 > news >正文

学习笔记——网络参考模型——TCP/IP模型(传输层)

四、TCP/IP模型-传输层

一、TCP

1、TCP定义

TCP(Transmission Control Protocol,传输控制协议)∶为应用程序提供可靠的面向连接的通信服务。目前,许多流行的应用程序都使用TCP。

连接:正式发送数据之前,提前建立好一种虚拟的"点到点"式的连接 =单播的模式

面向连接:如果某应用层协议的四层使用TCP端口,那么在正式的数据报文传输之前,需要先建立连接。只有建立完连接之后才可以传输数据。

全双工的协议:即可以同时发送数据,同时接收数据。

架构:C/S:客户端/服务器 B/S:浏览器/服务器

2、TCP报文格式

TCP报文头部∶

Source Port∶源端口,标识哪个应用程序发送。长度为16比特。

Destination Port∶目的端口,标识哪个应用程序接收。长度为16比特。

Sequence Number∶序号字段。TCP链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为32比特。

Acknowledgment Number∶确认序列号,是期望收到对方下一个报文段数据的第1个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有Ack标识为1,此字段有效。长度为32比特。

Header Length∶头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。若无选项内容,则该字段为5,即头部为20字节。

Reserved∶保留,必须填0。长度为6比特。

Control bits∶控制位,包含FIN、ACK、SYN等标志位,代表不同状态下的TCP数据段。

Window∶窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。

Checksum∶校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部。长度为16比特。

Urgent∶紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。长度为16比特。

Options∶选项字段(可选),长度为0-40字节。

3、TCP建立与断开

TCP三次握手,四次挥手

三次握手:面向连接的高层协议在正式传输数据之前需要先建立连接,建立连接的过程需要来回发送三个报文,我们将建立连接的过程,称为三次握手

第一步:TCP会话的建立-三次握手

任何基于TCP的应用,在发送数据之前,都需要由TCP进行"三次握手"建立连接。

第二步:TCP会话的确认

TCP连接建立的详细过程如下∶

由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0;

接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;

PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。

第一次握手:SYN     客户端(随机:1029)————>服务器(80)(下左图)

第二次握手:SYN+ACK 客户端<——————服务器(上右图)

第三次握手:ACK (确认) 客户端——————>服务器(上左图)

第四步:TCP会话的终止----四次挥手:当数据传输完成,TCP需要通过"四次挥手"机制断开TCP连接,释放系统资源。(上右图和下左图)

主机在关闭连接之前,要确认收到来自对方的ACK

TCP的序列号与确认序列号

TCP的序列号与确认序列号:TCP使用序列号和确认序列号字段实现数据的可靠和有序传输。

假设PC1要给PC2发送一段数据,传输过程如下∶

1.PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为"a+1",第二个字节的序号为"a+2",依次类推。

2.PC1会把每一段数据的第一个字节的编号作为序列号(Sequence number),然后将TCP报文发送出去。

3.PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?序列号( a+1)+载荷长度=下一段数据的第一个字节的序号(a+1+12)

4.PC1在收到PC2发送的TCP报文之后,发现确认序列号为"a+1+12",说明"a+1"到"a+12"这一段的数据已经被接受,需要从"a+1+12"开始发送。

为了提升发送效率,也可以一次性发送多段数据,由接收方统一确认。

查看已经建立好的tcp连接:   netstat    -an

可靠传输

收到对方的数据需要发送一个tcp :ack 报文来确认

ack确认包里面包含了接收方需要的下一个报文的序列号

4、TCP的窗口滑动机制

滑动窗口机制: 测试数据传输的带宽瓶颈 ,尽可能利用带宽的最大值来传输数据。同时还有校验机制,保证数据可靠传输。

TCP通过滑动窗口机制来控制数据的传输速率。

使用滑动窗口机制,可以探测出双方链路的最大传输能力

5、TCP会话的拥塞和流量控制

1.在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。

2.连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。

3.接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上

层取走,则相应的缓冲空间将被释放。

4.接收方根据自身的缓存空间大小通告当前的可以接受的数据大小(Window)。

5.发送方根据接收方当前的Window大小发送相应数量的数据。

二、UDP

1、UDP定义

UDP(User Datagram Protocol,用户数据报协议)∶提供了无连接通信,且不对传送数据包进行可靠性的保证

UDP不提供重传机制,占用资源小,处理效率高。

一些时延敏感的流量,如语音、视频等,通常使用UDP作为传输层协议。

2、UDP报文格式

UDP报文头部∶

Source Port∶源端口,标识哪个应用程序发送。长度为16比特。

Destination Port∶目的端口,标识哪个应用程序接收。长度为16比特。

Length∶该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535 字节(包括8字节的报头,和65527字节的数据)。

Checksum∶校验字段,覆盖UDP头部和UDP数据的校验和,长度为16比特。

3、UDP 适用场景

A、传输速度快,且高层的应用层对数据传输的可靠性有校验机制。

B、要求极快的传输速度,实时性较高,延迟敏感,即使丢包也无所谓。

例如:IPTV、远程教学、音视频会议、现场直播、DNS、DHCP、游戏报文(英雄联盟、QQ飞车)等。

4、TCP和UDP对比

传输控制协议/TCP

用户数据包协议/UDP

面向连接的协议

非面向连接的协议

可靠传输

不可靠传输(尽力而为的传输)

只能适应于单播的数据通信

速度慢,准确性高 (打电话)

不提供重传机制,速度快,准确性差 (群聊)

支持流控及窗口机制

无流控及窗口机制

FTP服务[20/21]   SSH远程管理服务[22]   

Telnet远程管理服务[23]   SMTP服务[25]    

HTTP服务[80]     Https[443]

DNS服务[53]     DHCP[67/68]     TFTP[]

可以基于已经建立好的连接,灵活的对接下来传递的数据进行控制。

无法满足即时性的要求,传递一些大文件,稳定性要求极高。

3.自带分片功能。

1.保证数据进行传输,但是UDP无法对传递的数据进行控制。 如果相对数据做控制,此时借用上层的应用层。

2.可以很好的满足即时性通信的要求。传递即时性流量,对时间要求比较高的流量。

3.UDP对于上层传达的数据,"全盘接收"[无分片机制],用于相对比较小的流量。

三、端口

端口号(Port)用来区分不同的网络服务。

端口Port [逻辑端口] 基于应用级别的互访,端口到端口的互访 ==复用/分用

复用:多个不同的应用都可以利用传输层的协议进行通信。

分用:传输层可以基于不同的端口定位本地的不同的应用服务。

传输层端口范围:传输层=0-65535 [端口的总数] === TCP/UDP

0-1023端口(知名端口/常用端口): 提前保留出来的端口

客户端使用的源端口一般随机分配,目标端口则由服务器的应用指定;

源端口号一般为系统中未使用的,且大于1023;

目的端口号为服务端开启的应用(服务)所侦听的端口,如HTTP缺省使用80。

四、网关

1、网关(Gateway)基础

网关是用来转发来自不同网段之间的数据包。网关就是一台具有路由功能的三层网络设备,如∶路由器、三层交换机、防火墙、服务器等。

网关地址就是设备的接口地址。

位于不同网络间的主机,要实现通讯,必须把数据包发送给网关。

2、网关的作用

PC访问互联网三要素① IP地址  ② 网关 (gateway) ③ DNS (域名解析)

网关的作用:网关相当于缺省路由(默认路由),当PC想访问外网(其他网段),此时PC需要将报文交给网关处理。

局域网互访不需要网关,不同网段的PC互访时才需要网关。

网关通常是上游路由器的接口IP。

网关必须是离PC“最近”的路由器接口的IP地址。即网关必须和PC的IP在同一网段。

案例:配置接口IP地址

进入系统模式     system-view

进入路由的接口       interface g0/0/0

配置IP地址           ip address 192.168.1.100 255.255.255.0


整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun    暗号:CSDN】

相关文章:

学习笔记——网络参考模型——TCP/IP模型(传输层)

四、TCP/IP模型-传输层 一、TCP 1、TCP定义 TCP(Transmission Control Protocol&#xff0c;传输控制协议)∶为应用程序提供可靠的面向连接的通信服务。目前&#xff0c;许多流行的应用程序都使用TCP。 连接&#xff1a;正式发送数据之前&#xff0c;提前建立好一种虚拟的&…...

Java中的Instant

在Java中&#xff0c;Instant 是 java.time 包中的一个类&#xff0c;用于表示时间轴上的一个瞬时点&#xff0c;通常以纳秒精度表示。它通常用于表示机器可读的时间戳&#xff0c;而不是人类可读的时间表示&#xff08;如日期和时间&#xff09;。 Instant 主要用于时间计算和…...

PostgreSQL的锁介绍

PostgreSQL的锁介绍 PostgreSQL 中的锁机制是一种用于控制数据并发访问的手段&#xff0c;确保数据库的完整性和一致性。在实际应用中&#xff0c;合理使用锁可以避免数据不一致和减少死锁的发生。 锁类型 PostgreSQL 提供了多种锁类型&#xff0c;以下是一些常见的锁&#…...

4分之1外螺纹怎么编程:挑战与策略解析

4分之1外螺纹怎么编程&#xff1a;挑战与策略解析 在机械制造领域&#xff0c;螺纹编程是一项至关重要的技术任务。当面对如4分之1外螺纹这样的具体需求时&#xff0c;编程人员需要综合运用专业知识与编程技巧&#xff0c;以确保螺纹的精确度和生产效率。本文将围绕四个方面、…...

运用selenium爬取京东商品数据储存到MySQL数据库中

使用Selenium爬取京东商品数据并存储到MySQL数据库中的过程可以分为几个步骤&#xff1a; 1. 准备工作 安装所需库 确保你已经安装了Python环境以及以下库&#xff1a; selenium&#xff1a;用于自动化浏览器操作。pymysql 或 mysql-connector-python&#xff1a;用于连接M…...

K8S SWCK SkyWalking全链路跟踪工具安装

官方参考&#xff1a;如何使用java探针注入器? 配置两个demo&#xff0c;建立调用关系&#xff0c; 首先创建一个基础镜像dockerfile from centos 先安装java 参考: linux rpm方式安装java JAVA_HOME/usr/java/jdk1.8.0-x64 CLASSPATH.:$JAVA_HOME/lib/tools.jar PATH…...

Apache Omid Idea Debug 环境搭建

IDEA 搭建 Apache Omid 源码 DEBUG 环境 Apache Omid 在 Apache HBase 之上提供了多行分布式事务的能力&#xff0c;支持全局 MVCC 功能。简单介绍编译过程。 1.下载 HBase2 并启动 https://dlcdn.apache.org/hbase/ 配置环境变量 export HBASE_HOME/xxx/hbase-2.4.18 exp…...

【面试宝藏】Go并发编程面试题

深入Go语言并发编程 Go语言以其简洁、高效的并发处理能力而闻名。在Go中&#xff0c;通过各种同步机制和原子操作&#xff0c;可以轻松地实现高性能并发编程。本文将深入探讨Go语言中的并发编程&#xff0c;包括Mutex、RWMutex、Cond、WaitGroup、原子操作等内容。 1. Mutex几…...

④单细胞学习-cellchat细胞间通讯

目录 1&#xff0c;原理基础 流程 受体配体概念 方法比较 计算原理 2&#xff0c;数据 3&#xff0c;代码运行 1&#xff0c;原理基础 原文学习Inference and analysis of cell-cell communication using CellChat - PMC (nih.gov) GitHub - sqjin/CellChat: R toolk…...

即时通讯平台及门户系统WorkPlus打造移动应用管理平台

在全球化和数字化时代&#xff0c;企业管理和沟通的方式正发生着巨大的变化。为了实现高效的协作和资源共享&#xff0c;企业越来越倾向于使用即时通讯及门户系统。这两种系统结合起来&#xff0c;可以提供一套完整的沟通和信息发布平台&#xff0c;促进内部协作和信息管理。 …...

React@16.x(12)ref 转发-forwardRef

目录 1&#xff0c;介绍2&#xff0c;类组件如何使用4&#xff0c;应用场景-高阶组件HOC 1&#xff0c;介绍 上篇文章中提到&#xff0c;ref 只能对类组件使用&#xff0c;不能对函数组件使用。 而 ref 转发可以对函数组件实现类似的功能。 使用举例&#xff1a; import Re…...

电脑世界的大冒险:用人体比喻让孩子轻松理解电脑20240603

电脑世界的大冒险&#xff1a;用人体比喻让孩子轻松理解电脑 作为一名在IT行业的老程序猿&#xff0c;我见证了电脑技术的飞速发展&#xff0c;也亲身体验了科技给生活带来的翻天覆地的变化。然而&#xff0c;在这个日新月异的数字时代&#xff0c;我意识到&#xff0c;与孩子…...

构建智慧银行保险系统的先进技术架构

随着科技的不断发展&#xff0c;智慧银行保险系统正日益受到关注。在这个数字化时代&#xff0c;构建一个先进的技术架构对于智慧银行保险系统至关重要。本文将探讨如何构建智慧银行保险系统的先进技术架构&#xff0c;以提升服务效率、降低风险并满足客户需求。 ### 1. 智慧银…...

来自大厂硬盘的降维打击!当希捷酷玩520 1TB SSD卷到369,请问阁下该怎么应对?

来自大厂硬盘的降维打击&#xff01;当希捷酷玩520 1TB SSD卷到369&#xff0c;请问阁下该怎么应对&#xff1f; 哈喽小伙伴们好&#xff0c;我是Stark-C~ 今年4月份的时候因为电脑上的游戏盘突然挂掉&#xff0c;为了性价比选购了希捷酷玩520 1TB SSD&#xff0c;同时我也是…...

什么是封装?为什么是要封装?

封装是面向对象编程中的一种核心概念&#xff0c;它是将数据和操作数据的方法结合起来&#xff0c;形成一个整体&#xff0c;对外只暴露必要的接口&#xff0c;隐藏内部的具体实现细节。 封装的目的是为了实现信息隐藏和代码的模块化&#xff0c;具体原因如下&#xff1a; 1.…...

Spring Cloud | 服务 “注册与发现“ 框架 : Eureka框架

目录&#xff1a; Eureka 的 "工作机制" :一、Eureka 的 "工作原理" ( 两大组件 ) :1.1 Eureka Server ( 服务注册中心 )1.2 Eureka Client ( 服务/服务实例&#xff0c;其存在 "两种角色" : ①服务提供者 ②服务消费者 ) :Eureka Client 的 含义…...

编译链接问题

问题描述 C语言在编译的时候&#xff0c;提示链接的时候没有找到相应的方法 问题分析 代码文件结构&#xff1a; test.c test/1.c test/1.h test.c代码&#xff1a; #include “test/1.h” void main() { hello(); } test/1.c代码&#xff1a; void hello() { printf(“hel…...

电涡流的形成范围

电涡流的形成范围涉及多个方面&#xff0c;主要受到导体材料、磁场变化速度、导体形状和尺寸以及磁场方向的影响。以下是对这些因素的详细分析&#xff1a; 导体材料&#xff1a;金属和合金是最容易产生电涡流的材料&#xff0c;而非金属材料&#xff08;如陶瓷、塑料等&#…...

学业辅导导师:文心一言智能体详细介绍和开发

一、前言 本期题目 开发方向&#xff1a;学习成长类 解读&#xff1a; AI技术在学习成长方向的应用正日益增多&#xff0c;本期赛题需围绕该方向开发智能体包括但不限于:作文辅导助手、个性化学习助手、考试助手、各垂类教育内容专家等 二、我的智能体&#xff1a;学业辅导…...

AI与NLP的完美结合:揭秘ChatGPT

AI与NLP的完美结合&#xff1a;揭秘ChatGPT 一、AI大模型的发展历程 AI大模型的发展可追溯到早期的深度学习技术。深度学习通过多层神经网络处理复杂的数据模式&#xff0c;显著提升了图像识别、语音识别等领域的性能。随后&#xff0c;研究人员将注意力转向NLP&#xff0c;开…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...