计算机网络概括

news2024/11/13 8:01:23

1 前言

计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。

简单来说,计算机网络就是用于满足不同机器之间通信、共享的一种系统。

1.1 计算机网络的组成

从组成上而言,计算机网络主要由主机协议传输介质以及软件四部分组成。

  • 主机:可以是手机、电脑、服务器、电子手表等任意计算机硬件。

  • 协议:各类定义归法的网络通信协议,如TCP/IP、IPX/SPX、AppleTalk等。

  • 传输介质:传输数据的通道,可以是实体铜线、电缆、光纤,也可以是无形的电磁波空间介质。

  • 软件:涵盖所有联网的应用,如QQ、微信、支付宝、淘宝、京东等各类软件。

1.2计算机网络的功能组成

计算机网络体系的两个核心功能

资源共享:资源子网实现-->OSI中的上三层

数据通信:通信子网实现-->OSI中的下三层

1.3 网络分层与OSI七层模型

而在计算机网络中,当两台机器进行通信时,其过程主要包含数据的封装与解封:

如上图,左侧是发送端,右侧是接收端,当发送端的应用尝试传输一条数据时,数据会根据网络分层结构,从上至下依次封装,每层都对数据做一定的处理,最后在物理层转换为比特流(二进制数据),然后传输至接收端。因为双方之间遵守的都是相同的协议体系(网络模型),因此接收端会首先接收到比特流数据,然后从下至上依次解封数据,最终在应用层还原数据,从而达到通信的目的。

2 通信协议的基本概念

2.1 协议数据单元(PDU)

计算机网络体系中,不同节点通信时交换的信息报文称PDU=协议头信息 + 数据

2.2 TCP/IP体系中数据的通信过程

TCP/IP体系中,一端要想为另一端发送信息数据也会经历封装与解封过程,每一次封装都会形成本层的PDU.

同比生活,也就是类似收发快递的过程:

  • 发件:[发件人]→[货物]→[驿站]→[快递公司站点]

  • 传输介质:[运输路线]→[中转站]

  • 收件:[快递公司站点]→[驿站]→[货物]→[收件人]

3 TCP/IP协议简介

  • 源端口/目的端口:指数据发送方的应用进程端口号和接收方的端口号

  • 序号:TCP为了保证数据的可靠传输,会对分段数据标注序号用于组装和确定数据的正确性

  • 确认序号:当接收方收到接收到本次数据时,下次需要发送的数据段序号

  • 首部:表示TCP报文头的长度,因为TCP头长度可变性,因此需要在头信息中声明每个头的长度

  • 保留位:预留一些空间给未来拓展时使用。

  • URG:表示本次发送的报文数据中是否是紧急数据。

  • ACK:确认信号,当报文中ACK=1的时候表示正确或同意。

  • PSH:表示接收方应该尽快将这个报文交给应用层,为后续数据腾出空间,不要停留在缓冲区。

  • RST:如果收到RST=1的报文,说明与主机的连接出现严重错误(如主机崩溃),必须释放连接,然后重新建立连接。

  • SYN:建立一个新连接,SYN=1表示这是一个请求建立连接的报文段。

  • FIN:断开一个连接,FIN=1表示通知告知对方本段要关闭连接了。

3.1连接管理机制 - 三次握手与四次挥手

TCP的三次握手

所谓的TCP三次握手,其实是指TCP建立连接的过程,因为TCP属于可靠性的传输协议,因此在发送数据前必须要先确保发送/接收数据的双方状态正常,因此需要经过“三次握手”的过程,具体如下:

  • 客户端向服务端发送建立连接的数据包SYN=1,seq=x,然后进入syn-send等待确认连接状态

  • SYN=1:代表请求建立连接。

  • seq=x:当前数据包的序号。

  • 服务端接收到请求建立连接的数据包后,允许建立连接的情况下,会返回响应报文

SYN=1,ACK=1,seq=y,ack=x+1

  • SYN=1:TCP是双全工协议,因此服务端也需向客户端发送SYN=1信号。

  • ACK=1:确认客户端建立连接的请求。

  • seq=y:表示当前服务端返回给客户端的序号。

  • ack=x+1:确认客户端序号x之前的请求都已收到。

  • 因为是双全工协议,连接是双向的,因此客户端也需确认一下服务端的连接请求,收到服务端的SYN=1后,也需返回ACK=1,seq=x+1,ack=y+1的数据包。

  • ACK=1:表示确认服务端的连接建立请求。

  • seq=x+1:当前数据包的请求序号。

  • ack=y+1:确认服务端序号y之前的数据都已成功接收。

经过如上三个步骤,客户端和服务端双方之间确认请求后,连接会成功建立,紧接着双方都会处于estab-lishen状态,数据可以正常传输。

TCP的四次挥手

当一方数据传输完成后,会尝试中断连接,因此又会经历“四次挥手”的过程,如下:

①客户端完成数据传输后,会发出FIN=1,seq=u关闭连接的报文,然后等待服务端响应。

  • FIN=1:代表请求关闭连接。

  • seq=u:请求序号。

②服务端收到客户端的“关闭”请求后,会给客户端返回确认关闭的报文:ACK=1,seq=v,ack=u+1。

  • ACK=1:确认客户端“关闭连接”的请求。

  • seq=v:请求序号。

  • ack=u+1:确认客户端序号u及其以前的数据都已成功接收。

  • 客户端传输完成数据后,会告诉服务端自己要关闭连接了;

  • 但服务端可能数据还未传输完成,因此会继续传输自己的数据,直至自身的数据也传输完成后,也会告诉客户端:自己也要关闭连接了。

③服务端传输完成自己的数据后,向客户端发送关闭连接的报文:FIN=1,ACK=1,seq=w,ack=u+1。

  • FIN=1:表示自己也要“关闭连接”了。

  • ACK=1:确认收到了之前的数据。

  • seq=w:请求序号。

  • ack=u+1:确认客户端序号u之前的数据都已成功接收。

④客户端接收到服务端“关闭连接”的请求后,给服务端响应确认报文:ACK=1,seq=u+1,ack=w+1。

  • ACK=1:确认服务端“关闭连接”的请求。

  • seq=u+1:请求序号。

  • ack=w+1:确认服务端序号w之前的数据都已成功接收。

前面提及过,因为TCP是双全工的协议,因此双方都可以主动释放连接,在TCP中,当一方数据传输完成后,就会主动关闭连接,也就会经历“挥手”的过程,同样我们也可以举个通俗一些的例子来认识这个过程:

  • ①特种兵-竹子:竹子汇报完毕,请指示!

  • ②指挥部-熊猫:指挥部收到!..&*/?..!^...继续说完自己要交代的任务。

  • ③指挥部-熊猫:这里是熊猫,任务已指示完毕!

  • ④特种兵-竹子:竹子收到!

  • 中断通话.........

总结:

三次握手是指TCP建立连接需要发送三个数据包,主要目的是在于:为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备

四次挥手是指TCP关闭连接时需要发送四个数据包,主要目的在于:当客户端发送完数据后,给服务端发送“我要关闭连接了”的请求,然后服务端告知客户端收到了“关闭请求”,但此时服务端会继续向客户端传输未发送的数据,客户端也照旧可以接收服务端的数据,直到服务端的数据传输完成后,服务端也会发出“关闭连接”的请求,客户端同意后,最终才会断开连接,从而保证数据正常可靠的交互

TCP中的沾包问题

首先要理解TCP传输数据的方式,TCP传输数据时会给每个文段分配一个序号,接收方接收数据之后会根据序号进行排序,然后将其放置在TCP缓存区中

黏包问题:多个数据包杂糅在一块,无法确定每一个数据包之间的分界。好像多个包粘在了一起。

发送方黏包问题:

  • TCP为了优化传输速度,将多个包进行打包传输。

  • 当需要发送的数据大于MSS规定的数据,需要对数据进行拆分也会产生黏包问题。

接收方黏包问题:

TCP中,如果数据被接收后,应用程序没有及时处理也会出现黏包问题。

解决方案:

  • 当使用TCP短连接时不必考虑沾包问题

  • 当发送无结构数据,如文件传输时,也不需要考虑沾包问题,因为这类数据只管发送和接收保存即可

  • 如果使用长连接,那么则需要考虑沾包问题:

  • 如果发送的报文都是相同的结构,那么可以在首部中添加数据长度,接收方根据首部中记录的数据大小读取数据。

  • 每个数据包封装成固定长度,不够的用0补齐,接收方每次按照固定大小读取数据即可。(效率低)

  • 在数据之间设置边界,比如添加特殊符号,这样接收方收到数据时,根据特殊符号分割数据即可。

学习链接: https://juejin.cn/post/7101917676162777119

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

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

相关文章

STM32模拟SPI总线读写RFID模块RC522

STM32模拟SPI总线读写RFID模块RC522 RC522是一款NXP 公司的支持ISO14443A协议的高频(13.56MHz)RFID射频芯片。RFID有ID和IC两种卡应用类型,RC522属于IC卡的应用类型。NFC则属于增强的IC卡类型,支持双向通信和更多类型的协议。 I…

es官网翻译之Exploring Your Cluster

Exploring Your Cluster 探索你的集群 The rest api rest 风格的 api Now that we have our node (and cluster) up and running, the next step is to understand how to 现在 我们已经将我们自己的节点(和集群) 启动并运行着, 下一个步骤是知道如何 communicate with it…

Java面试题每日10问(12)

1. What is String Pool? String pool is the space reserved in the heap memory that can be used to store the strings.The main advantage of using the String pool is whenever we create a string literal; the JVM checks the “string constant pool” first.If th…

速度为单GPU1.6倍,kaggle双GPU(ddp模式)加速pytorch攻略

accelerate 是huggingface开源的一个方便将pytorch模型迁移到 GPU/multi-GPUs/TPU/fp16 模式下训练的小巧工具。和标准的 pytorch 方法相比,使用accelerate 进行多GPU DDP模式/TPU/fp16 训练你的模型变得非常简单(只需要在标准的pytorch训练代码中改动不几行代码就可…

linux基功系列之man帮助命令实战

文章目录前言一、man命令介绍二、常用参数2.1 语法2.2 常用参数2.3 man页面的操作命令man命令使用案例1. 直接查看手册2. -aw 参数找到可以被查询的章节2.3 一次性查阅所有章节2.4 搜索手册页2.5 -L 设置查询语言总结前言 linux系统中的命令数量有上千的,即使是常用…

前端——周总结系列二

1 JS数组排序sort()方法 不传参数排序,默认根据Unicode排序 附录 传参数,使用比较函数,自己定义比较规则 简单数组排序 // 升序 function ascSort(a, b) {return a - b; } // 降序 function ascSort(a, b) {return b - a; }数组对象排序…

算法leetcode|31. 下一个排列(rust重拳出击)

文章目录31. 下一个排列:样例 1:样例 2:样例 3:提示:分析:题解:rustgoccpythonjava31. 下一个排列: 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0…

ROS2机器人编程简述humble-第二章-First Steps with ROS2 .1

ROS2机器人编程简述新书推荐-A Concise Introduction to Robot Programming with ROS2学习笔记流水账-推荐阅读原书。第二章主要就是一些ROS的基本概念,其实ROS1和ROS2的基本概念很多都是类似的。ROS2机器人个人教程博客汇总(2021共6套)如何更…

Linux chgrp 命令

Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。与 chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。在 UNIX 系统家族里,文件或目录权限的掌控以拥有…

(一)Jenkins部署、基础配置

目录 1、前言 1.1、Jenkins是什么 1.2、jenkins有什么用 2、 Jenkins安装 2.1、jdk安装 2.2、安装Jenkins 3、Jenkins配置 3.1、解锁Jenkins 3.2、插件安装 3.3、创建管理员 3.4、实例配置 4、汉化 4.1、下载Locale插件 4.2、设置为中文 5、设置中文失效解决步骤 1…

U-Boot 之零 源码文件、启动阶段(TPL、SPL)、FALCON、设备树

最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,在之前的博文 Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具 中详细介绍了嵌入式 Linux 环境,接下来就是重点学习一…

【Spring6源码・AOP】代理对象的创建

前三篇Spring IOC的源码解析与这一章的AOP是紧密相连的: 【Spring6源码・IOC】BeanDefinition的加载 【Spring6源码・IOC】Bean的实例化 【Spring6源码・IOC】Bean的初始化 - 终结篇 首先介绍我们本章的demo: 一个接口,一个实现&#xf…

【论文速递】ECCV2022 - 开销聚合与四维卷积Swin Transformer_小样本分割

【论文速递】ECCV2022 - 开销聚合与四维卷积Swin Transformer_小样本分割 【论文原文】:Cost Aggregation with 4D Convolutional Swin Transformer for Few-Shot Segmentation 获取地址:https://arxiv.org/pdf/2207.10866.pdf博主关键词: …

紧聚焦涡旋光束app设计-VVB2.0

紧聚焦涡旋光束app设计-VVB2.0前言界面预览功能演示写在最后前言 时隔几个月,花了点时间,将之前用matlab设计的app紧聚焦涡旋光束matlab gui设计进行一次修改,这次发布2.0版本,本次修改的范围主要是将原来的界面进行重做&#xf…

软件设计师中级复习小总结

软件设计师中级复习小总结 计算机与体系结构 K 1024 k 1000 B 字节 b 位 1字节 8位 8bit(位)1Byte(字节) 1024Byte(字节)1KB KB,MB,GB之间的换算关系是:1024KB1MB,1024MB1GB,1024GB1TB K,M&#x…

DevOps 实战概述

一、背景越来越多的团队使用DevOps,个人觉得原因有二,其一市场需求,从瀑布到敏捷的过程能看出市场就是需要团队响应快,小步快跑,风险低效率高,但是敏捷只解决了开发团队的问题并没有解决运维团队的问题&…

16、Javaweb_ajax的JSjQuery实现方式JSON_Java对象互转用户校验案例

AJAX: 1. 概念: ASynchronous JavaScript And XML 异步的JavaScript 和 XML 1. 异步和同步:客户端和服务器端相互通信的基础上 * 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。 * 客户端不需要…

[LeetCode周赛复盘] 第 328 场周赛20230115

[LeetCode周赛复盘] 第 328 场周赛20230115 一、本周周赛总结二、 [Easy] 6291. 数组元素和与数字和的绝对差1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6292. 子矩阵元素加 11. 题目描述2. 思路分析3. 代码实现四、[Medium] 6293. 统计好子数组的数目1. 题目描述2. 思路分…

文献阅读总结--合成生物学工程促进大肠杆菌中莽草酸的高水平积累

题目:Systems engineering of Escherichia coli for high-level shikimate production (ME 2022) 0 前言 本版块内容为记录阅读的文献内容总结经典方法手段。本文内容来自相关文献,在文末做来源进行详细说明对文献中内容不做真实性评价。 1 具体内容 …

标准化和归一化概念澄清与梳理

标准化和归一化是特征缩放(feature scalingscaling)的主要手段,其核心原理可以简单地理解为:让所有元素先减去同一个数,然后再除以另一个数,在数轴上的效果就是:先将数据集整体平移到有某个位置,然后按比例…