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

初识网络编程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 的应用层协议,后面单独写一篇博文总结。
http报文传输过程

这里根据上图的封装过程,详细分析一下数据在各层的叫法:

  • 链路层——数据帧frame
  • 网络层——数据包packet
  • 传输层——数据报(TCP叫segment/UDP叫datagram)
  • 每层数据封装好包含了将要发送的完整的数据信息后就是报文

传输层协议

socket

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换。
Socket 可以用于实现各种网络应用,例如:

  1. 客户端-服务器通信:通过 Socket,客户端可以与服务器建立连接并发送请求,服务器接收请求并返回响应。
  2. 网络聊天和即时通讯:通过 Socket,可以在多个用户之间实现实时的文字、音频或视频通信。
  3. 文件传输:在不同计算机之间传输文件。
  4. 远程控制:在远程计算机上执行指令或操作。
  5. P2P(点对点)通信:Socket 提供了直接的点对点通信接口,允许两个或多个计算机直接进行数据交换。

TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,这意味着在数据传输开始之前,必须在发送端和接收端之间建立一个连接。

  • 可靠传输:TCP提供可靠的数据传输服务,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,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实现

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) 方式二&#xff1a…...

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任务计划:由于很多计算机都会自动加载“任务计划”&#xff0c…...

【网络协议栈】网络层(上)网络层的基本理解、IP协议格式、网络层分组(内附手画分析图 简单易懂)

绪论​ “It does not matter how slowly you go as long as you do not stop.”。本章是自上而下的进入网络协议栈的第三个篇幅–网络层–,本章我将带你了解网络层,以及网络层中非常重要的IP协议格式和网络层的分片组装问题,后面将持续更新网…...

数据库类型介绍

1. 关系型数据库(RDBMS) 关系型数据库是最常见的一类数据库,它们通过表(Table)来存储数据,表之间通过关系(如主键和外键)来关联。 • MySQL:开源的关系型数据库管理系统&…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四&#xff…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...