初识网络编程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 连接的“ 三次握手 ”与“ 四次挥手 ”

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

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

相关文章

Vue2进阶之Vue3高级用法

Vue3高级用法 响应式Vue2:Object.definePropertyObject.definePropertythis.$set设置响应式 Vue3:Proxy composition APIVue2 option API和Vue3 compositionAPIreactive和shallowReactivereadonly效果toRefs效果 生命周期main.jsindex.htmlLifeCycle.vue…

树叶分类竞赛(Baseline)以及kaggle的GPU使用

树叶分类竞赛(Baseline)-kaggle的GPU使用 文章目录 树叶分类竞赛(Baseline)-kaggle的GPU使用竞赛的步骤代码实现创建自定义dataset定义data_loader模型定义超参数训练模型预测和保存结果 kaggle使用 竞赛的步骤 本文来自于Neko Kiku提供的Baseline,感谢大佬提供代码…

与C语言的旅程之分支与循环(2)

与C语言的旅程之分支与循环 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构, 目录 与C语言的旅程之分支与循环 1. if语句 1.1 if ​编辑1.2 else 1.3 分⽀中包含多条语句 1.4 嵌套if 1.5 悬空else问题 2. 关系操作符…

springBoot 自动配置与starter

目录 一、自动配置 Springboot实现自动配置的核心机制 Conditional的作用是什么? 如何自定义自动配置? 步骤 例子分析 自动配置的优先级 如何禁用特定的自动配置? 二、starter 如何理解Spring Boot中的starter? 如何自…

《Python编程实训快速上手》第三天--字典和结构化数据

一、字典 1、字典数据类型介绍 myCat {"size":"fat","color":"gray"} 特征: 字典输入时带上{}字典中每一个值是以键值对形式存在,先写键,再写值 2、字典与列表 列表索引必须是整数,字…

Pinia小菠萝(状态管理器)

Pinia 是一个专为 Vue 3 设计的状态管理库,它借鉴了 Vuex 的一些概念,但更加轻量灵活。下面将详细介绍如何使用 Pinia 状态管理库: 安装 Pinia 使用 npm:在项目目录下运行npm install pinia。使用 yarn:在项目目录下运…

【智能算法应用】哈里斯鹰算法优化二维栅格路径规划问题

摘要 本文研究了基于哈里斯鹰优化算法(Harris Hawks Optimization, HHO)的二维栅格路径规划方法。HHO算法模拟哈里斯鹰的猎食行为,通过迭代搜索过程找到从起点到终点的最优路径,避开栅格中的障碍物。实验结果表明,HHO…

vue/react做多语言国际化的时候,在语言配置中不同的语言配置不同的字体,动态引入scss里面

如果想直接在vue文件的css里面使用,就可以使用i18n的t函数,注意t外层也有引号: font-size: v-bind("t(style.teamCurModelFontSize)"); 前提是要引入t函数:

优衣库在淘宝平台的全方位竞品分析与店铺表现研究:市场定位与竞争策略透视

优衣库品牌在淘宝平台的全方位竞品与店铺表现分析 一、品牌商品分析 1.商品列表与分类分析(数据来源:关键词商品搜索接口;获取时间:2024.08.30) 商品类别分布柱状图: 根据关键词商品搜索接口获取到的优衣…

spark新能源汽车推荐系统-计算机设计毕业源码42422

摘要 本论文致力于探讨基于Spark技术的新能源汽车推荐系统新能源汽车分析及可视化内容。系统将严格按照软件开发流程进行各个阶段的工作,利用Python编程语言中的爬虫功能,实现对懂车帝的汽车信息数据的爬取,作为系统的数据来源,并…

Element UI组件Dialog显示闪动问题【解决方案】

在ElementUI中,el-dialog弹窗确实有时会导致页面出现抖动或闪动的问题。这通常是由于弹窗出现时对页面布局的影响,特别是滚动条的出现或消失,导致了页面的重新布局和渲染。以下是一些解决或缓解这一问题的方法: 解决方案 1. 关闭…

SpringBoot技术在企业资产管理中的应用

4系统概要设计 4.1概述 系统设计原则 以技术先进、系统实用、结构合理、产品主流、低成本、低维护量作为基本建设原则,规划系统的整体构架. 先进性: 在产品设计上,整个系统软硬件设备的设计符合高新技术的潮流,媒体数字化、压缩、…

月GMV2000W+,在视频号“开超市”也太赚了吧!

今年的视频号双11,似乎更低调了。 ▲ 图片来源:视频号 从官方的双11专栏来看,今年改叫“微信小店11.11好物节”。 今年618时候,还有专门的带货榜单,并且细分为“今日带货榜单、带货总榜、品牌带货榜、达人带货榜”&…

xlsx.js 读取excel文件

需求:读取一个excel文件。 一、 使用antd的Upload组件的 【customRequest】方法。 互斥。此方法跟【onChange】方法互斥,即:不可同时出现。调用次数不一样。onChange方法会根据文件当前的上传状态从而被调用多次(读取中&#xff…

华为云创建ECS前台展示规格类型选项是怎么做到的?

前台展示很多规格可选,怎么做到的?先了解规格其实都是管理员在后台service_OM创建好规格 1.规格 1.1设置自定义标签打通规格和主机组还能体验调度功能 引申:AZ可用分区(为了做容灾) 为什么在界面可以让我√az0.dc0,在填工程参数openstack region信息已写 AZ间存储不能共…

我们来学mysql -- 同时使用 AND 和 OR 查询错误(填坑篇)

AND 和 OR 一同使用问题 现象分析处理扩展 现象 业务上在“锁定”当前零件所在出口国的所有零件时,出现其他国家零件 问题定位 分析 or 切断了操作符之间的连续性,从union角度分析 where k1 Td621 and k1 Vda96 or k3 P00009等同 select * fr…

Python入门:了解 Python 中 globals() 和 types 的用法

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 使用 `globals()` 获取当前作用域信息📝 使用 `types` 模块判断函数类型📝 `globals()` 与 `types` 结合使用📢 综合示例📝 总结⚓️ 相关链接 ⚓️📖 介绍 📖 在 Python 中,动态获取当前作用域…

InsectaIntel 智能昆虫识别平台

项目介绍 InsectaIntel智能昆虫识别平台是一款革命性的软件,它将尖端的计算机视觉和深度学习技术融入昆虫识别领域,为用户提供了一个前所未有的工具。该平台通过集成先进的技术,不仅提高了昆虫识别的准确性,还极大地增强了用户体…

Python数据分析NumPy和pandas(二十六、数据整理--连接、合并和重塑 之三:重塑和透视)

对表格数据的重新排列操作,称为 reshape 或 pivot 。有很多种方法对表格数据进行重塑。 一、使用分层索引进行reshape 分层索引提供了一种在 DataFrame 中重新排列数据的方法。主要有两个函数方法: stack:将数据中的列旋转或透视到行。 u…

新能源行业必会基础知识-----电力现货市场理论篇-----电力现货市场价格机制-----电力市场价格体系

新能源行业必会基础知识-----电力现货市场理论篇-----主目录-----持续更新https://blog.csdn.net/grd_java/article/details/143364261 这本书是2023年出版的,是当下了解国内电力市场最好的途径了。还是推荐大家买来这本书进行阅读观看,最好作为随身携带…