初识网络编程TCP/IP
目录
- 前言
- 相关名词解释
- 应用层协议——HTTP
- 传输层协议
- socket
- TCP
- 帧头格式
- 三次握手、四次挥手
- UDP
- TCP的socket实现
- 参考博文
前言
刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结……

相关名词解释
- ✨✨网络模型
为了使多种设备能通过网络通信和解决不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(OSI),但在实际应用上采用的是TCP/IP这种四层模型。
- 应用层:处理并打包数据
- 传输层:在网络中的两个节点之间提供可靠的数据传输服务
- 网络层:负责数据包从源到目的地的路由选择
- 协议
互联网的本质就是一系列的网络协议,处于互联网上的两台计算机如果要实现通信,就需要遵守这些协议,比如:网线的接口类型,寻址方式,数据如何发送等一系列协议。
网络通信是一个比较复杂的事情,需求场景复杂了,实现功能也会比较复杂。实际应用中是把这个大协议拆分成小协议(每个协议负责一部分功能),将某些协议功能类似的小协议进一步的"分类"(“分层”)。 - ✨以太网
以太网(Ethernet)是一种局域网(Local Area Network, LAN)技术,以太网技术本身包括了物理层和数据链路层的规范,这些规范定义了如何在局域网中传输数据帧。 - ✨✨✨IP地址
IP地址(Internet Protocol Address)是互联网协议地址的简称,是用于在互联网上标识和定位设备的唯一数字标签。IP地址由32位(IPv4)或128位(IPv6)的二进制数组成,通常用点分十进制表示(IPv4)或冒号分隔的十六进制表示(IPv6)。 - ✨✨✨端口号
端口号的主要作用是表示一台计算机中的特定进程所提供的服务,即用来区分一个主机上的不同程序,因此也被称为程序地址。 - ✨MAC地址
MAC地址,全称为媒体访问控制地址(Media Access Control Address),是一种用于网络通信的唯一标识符。MAC地址通常由12位十六进制数字组成,分为6个字节,每个字节由两个十六进制数字表示,例如:00-1A-2B-3C-4D-5E。MAC地址具有全球唯一性,每个网络设备在生产时都会被分配一个唯一的MAC地址。这种唯一性确保了在网络中不会出现地址冲突,从而保证了网络通信的顺畅。MAC地址通常被烧录在网络设备的硬件上,如网卡、路由器、交换机等。
MAC地址与IP地址相互配合,共同完成网络通信。IP地址用于在互联网上标识设备的位置,而MAC地址则用于在局域网内标识设备。当数据在局域网内传输时,主要依赖MAC地址进行寻址;而当数据需要跨越不同网络时,IP地址则起到了关键作用。通过ARP(地址解析协议),可以将IP地址解析为MAC地址,从而实现不同网络之间的通信。
应用层协议——HTTP
这是基于TCP/IP 的应用层协议,后面单独写一篇博文总结。

这里根据上图的封装过程,详细分析一下数据在各层的叫法:
- 链路层——数据帧frame
- 网络层——数据包packet
- 传输层——数据报(TCP叫segment/UDP叫datagram)
- 每层数据封装好包含了将要发送的完整的数据信息后就是报文
传输层协议
socket
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换。
Socket 可以用于实现各种网络应用,例如:
- 客户端-服务器通信:通过 Socket,客户端可以与服务器建立连接并发送请求,服务器接收请求并返回响应。
- 网络聊天和即时通讯:通过 Socket,可以在多个用户之间实现实时的文字、音频或视频通信。
- 文件传输:在不同计算机之间传输文件。
- 远程控制:在远程计算机上执行指令或操作。
- P2P(点对点)通信:Socket 提供了直接的点对点通信接口,允许两个或多个计算机直接进行数据交换。
TCP
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,这意味着在数据传输开始之前,必须在发送端和接收端之间建立一个连接。
- 可靠传输:TCP提供可靠的数据传输服务,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送数据包,直到接收端正确接收到所有数据。
- 数据顺序:TCP保证数据包的顺序,即使在网络中传输的路径不同,接收端也能按照发送端的顺序接收数据。
- 流量控制和拥塞控制:TCP通过滑动窗口机制实现流量控制,并通过拥塞控制算法(如慢启动、拥塞避免、快速重传和快速恢复)来避免网络拥塞。
- 全双工通信:TCP支持全双工通信,即数据可以在两个方向上同时传输。
帧头格式

- ACK:确认接受标志位,ACK=1为确认接受到
- SYN:建立连接时的同步标志位,SYN=1/ACK=0表是A请求与B建立连接;若B报文中SYN=1/ACK=1表示B同意和A建立连接
- FIN:请求断开连接标志位
- seq:传输报文中的数据部分的每一个字节都有它的编号,建立连接时的为初始随机序号ISN
- ack:响应端收到信息,并准备接受的下一个数据的序号(上一数据末尾序号+1)
❗️❗️❗️在建立连接和正常通信两个阶段,seq的计算方法不同,具体参考博客——【转载】TCP的seq和ack号计算方法
三次握手、四次挥手
- 三次握手
例子描述:A给B寄东西,B的看到消息要回复A收到了,如果B的回复A的没看到的话,会继续问B到底收到没有;A收到B的消息后,再嘱咐B一些东西细节,这样这个过程就建立完了
握手的过程实际上是在通知对方自己的初始化序号ISN,也就是上图中的x和y。x和y会被当作之后传输数据的一个依据,以保证TCP报文在传输过程中不会混乱。
- 四次挥手
描述:
1.客户端主动请求关闭通信连接
2.服务端收到请求并确认,之后一段时间仍会发送未发送完的数据
3.数据全发完后,服务端请求可以关闭连接了
4.客户端收到并确认
处于TIME_WAIT状态的主动断开方,在等待完成2MSL(Maximum Segment Lifetime,指的是一个TCP报文片段在网络中最大的存活时间,具体来说,2MSL对应于一次消息的来回(一个发送和一个回复)所需的最大时间)的时间后,才真正关闭连接通道,避免因网络不可靠的,被动断开方发送FIN+ACK报文后,其主动方的ACK响应报文丢失的情况,这时候的被动断开方处于LAST-ACK状态的,由于收不到ACK确认被动方一直不能正常的进入CLOSED状态。
UDP
UDP(User Datagram Protocol,用户数据报协议用户数据报协议)是一种无连接的协议,不需要在发送端和接收端之间建立连接,可以直接发送数据。
- 不保证可靠性:UDP不保证数据的可靠传输,如果数据包在传输过程中丢失或损坏,UDP不会重新发送数据包。
- 无数据顺序:UDP不保证数据包的顺序,接收端可能以不同于发送端的顺序接收数据。
- 无流量控制和拥塞控制:UDP没有流量控制和拥塞控制机制,因此它不适合需要这些机制的应用。
- 半双工或简单全双工通信:UDP通常支持半双工通信,但也可以支持全双工通信。
- 开销较小:UDP不需要建立连接和维护连接状态,因此它的开销比TCP小,适用于对实时性要求高的应用,如视频会议、在线游戏等。
TCP的socket实现

注:这部分的代码涉及IO流,还没学,先不贴了
参考博文
【通信协议】帧、数据报、数据包的区别和联系
一文带你了解socket网络编程以及详解过程和原理
Socket的详细介绍
TCP网络编程中connect()、listen()和accept()三者之间的关系
一文讲透TCP/IP协议 | 图解+秒懂+史上最全
详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
相关文章:
初识网络编程TCP/IP
目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结…… 相关名词解释 ✨✨网络…...
快速入门Zookeeper
Zookeeper ZooKeeper作为一个强大的开源分布式协调服务,扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务,用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性,ZooKeeper能够确保在复杂的分布式…...
Filter and Search 筛选和搜索
Goto Data Grid 数据网格 Filter and Search 筛选和搜索 Filter Drop-down Menus (Excel-style) 筛选器下拉菜单(Excel 样式) 要调用列的筛选器下拉菜单,请单击列标题中的筛选器图标。在 “Values” 选项卡中,用户可以从 Data …...
spark的学习-06
SparkSQL读写数据的方式 1)输入Source 方式一:给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二:…...
Linux C/C++ Socket 编程
本文目录 Linux C语言 socket 编程 client 端头文件 unistd.h & arpa/inet.h1. **unistd.h**2. **arpa/inet.h** socket() 创建套接字sockaddr_in 结构体inet_pton()connect()send()recv()send() 和 recv() 中的 flags 参数**默认行为(flags 0)的特…...
Flutter错误: uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared
前言 今天要做蓝牙通信的功能,我使用了flutter_reactive_ble这个库,但是在运行的时候发现一下错误 Launching lib/main.dart on AQM AL10 in debug mode... /Users/macbook/Desktop/test/flutter/my_app/android/app/src/debug/AndroidManifest.xml Err…...
Spark 的容错机制:保障数据处理的稳定性与高效性
Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...
TCP可靠连接的建立和释放,TCP报文段的格式,UDP简单介绍
TCP连接的建立(三次握手) 建立连接使用的三报文 SYN 报文仅用于 TCP 三次握手中的第一个和第二个报文(SYN 和 SYN-ACK),用于初始化连接的序列号。数据传输阶段不再使用 SYN 标志。 SYN 报文通常只携带连接请求信息&a…...
LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略 目录 zeroX的简介 1、支持的文件类型 zeroX的安装和使用方法 T1、Node.js 版本: 安装 使用方法 使用文件 URL: 使用本地路径&…...
开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案
前置条件 假设主从信息 mysqlhostport主192.168.1.13306从192.168.1.23306vip192.168.1.3 部署流程 导出测试环境表结构与数据 使用mysqldump ./mysqldump -ulzzc -p -S /tmp/mysql3306.sock --single-transaction --database lzzc > databaseLZZCxxxx.sql查看gtid号 …...
Java全栈体系路线
Java全栈体系路线 摘要 Java 是一门广泛应用于企业级开发的语言,具有强大的生态系统和丰富的工具支持。成为一名 Java 全栈开发工程师不仅需要掌握后端开发技能,还需要具备前端开发和数据库管理的能力。本文将详细介绍 Java 全栈开发的学习路线&#x…...
【Unity基础】Unity中如何导入字体?
在Unity中,不能像其他软件一样直接使用字体文件,需要通过FontAssetCreator将其转换成Texture的Asset文件,然后才能使用。 本文介绍了使用FontAssetCreator导入字体的过程,并对其参数设置进行了说明。 Font Asset Creator 是 Uni…...
使用NVIDIA GPU加速FFmpeg视频压制:完全指南
引言 在视频处理领域,FFmpeg是一个强大的工具。结合NVIDIA的硬件编码器NVENC,我们可以实现快速高效的视频压制。本文将详细解析一个实用的视频压制命令,帮助你理解每个参数的作用。 核心命令 ffmpeg -i input.mp4 -vf scale640:360 -c:v h…...
Python学习:scipy是什么?
文章目录 一、Scipy简介二、Scipy的组成部分1. 基础功能:2. 特殊函数:3. 优化:4. 积分:5. 插值:6. 信号处理:7. 图像处理:8. 统计分布:9. 空间数据结构和算法:10. 稀疏矩…...
spark的学习-05
SparkSql 结构化数据与非结构化数据 结构化数据就类似于excel表中的数据(统计的都是结构化的数据)一般都使用sparkSql处理结构化的数据 结构化的文件:JSON、CSV【以逗号分隔】、TSV【以制表符分隔】、parquet、orc 结构化的表:…...
SQL注入(SQL Injection)详解
SQL注入(SQL Injection)是一种代码注入技术,它通过在应用程序的输入字段中插入或“注入”恶意的SQL语句,从而操控后端数据库服务器执行非预期的命令。这种攻击方式常用于绕过应用程序的安全措施,未经授权地访问、修改或…...
深入解析 OpenHarmony 构建系统-2-目录结构与核心组件
引言 OpenHarmony作为一款面向全场景的分布式操作系统,其构建系统在开发过程中扮演着至关重要的角色。本文将详细介绍OpenHarmony构建系统的目录结构和核心组件,帮助开发者更好地理解和使用这一强大的工具。 目录结构概览 以下是OpenHarmony构建系统的目录结构,每个目录和…...
网络安全应急响应(归纳)
目录 一、概述二、理论 系统排查 系统基本信息 windowsLinux用户信息 WindowsLinux启动项:开机系统在前台或者后台运行的程序,是病毒等实现持久化驻留的常用方法。 WindowsLinux任务计划:由于很多计算机都会自动加载“任务计划”,…...
【网络协议栈】网络层(上)网络层的基本理解、IP协议格式、网络层分组(内附手画分析图 简单易懂)
绪论 “It does not matter how slowly you go as long as you do not stop.”。本章是自上而下的进入网络协议栈的第三个篇幅–网络层–,本章我将带你了解网络层,以及网络层中非常重要的IP协议格式和网络层的分片组装问题,后面将持续更新网…...
数据库类型介绍
1. 关系型数据库(RDBMS) 关系型数据库是最常见的一类数据库,它们通过表(Table)来存储数据,表之间通过关系(如主键和外键)来关联。 • MySQL:开源的关系型数据库管理系统&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...



