当前位置: 首页 > 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:开源的关系型数据库管理系统&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...