网络原理(TCP/UDP)

news2024/10/2 14:32:31

目录

一. 网络基础

1. IP地址

 2. 端口号

3. 协议

4. OSI七层模型

二. UDP协议

2.1 UDP的协议端格式:

2.2 UDP的特点

三. TCP协议

 3.1 TCP协议段格式

 3.2 TCP原理

(1)确认应答机制

(2)超时重传机制

(3)三次握手,四次挥手

(4)滑动窗口 

(5)流量控制

(6)拥塞控制

(7)延迟应答

 四. TCP/UDP对比


一. 网络基础

1. IP地址

IP地址相信大家早已都耳熟能详了吧,但是对于初学网络的小伙伴来说,还是一个很懵懂的概念,没关系,本人也是刚对网络有了一个初步的了解,希望通过下面的学习总结,来帮助大家一起了解网络的一些基本原理;

概念:

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址;

举个例子:IP地址就相当与快递的收货地址虽然定位到了主机,但是IP地址还存在一个问题,就是我们要把数据传输到哪个进程接收,这就需要端口号了;

 2. 端口号

概念:在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。

举个例子:上面说到IP地址是快递的收货地址,那么端口号就是指定的收货人,以确保传输的数据能准确的到达定点;

关于端口号的说明:

一个进程可以绑定多个端口号,多个进程不能绑定同一个端口号;一个进程启动后,系统会会随机分配一个端口;

3. 协议

概念:协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

为什么需要协议呢?

简单点来说,就是一套标准,因为计算机的有不同操作系统,不同的版本,多家厂商生产出来的硬件有有所区别,为了让这些设备都能保持正常的通信,就约定了一个标准,这一套标准就叫协议;

常见的默认端口号:

  • 22端口:预留给SSH服务器绑定SSH协议
  • 21端口:预留给FTP服务器绑定FTP协议
  • 23端口:预留给Telnet服务器绑定Telnet协议
  • 80端口:预留给HTTP服务器绑定HTTP协议
  • 443端口:预留给HTTPS服务器绑定HTTPS协议

4. OSI七层模型

OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”;OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层;

OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层,从下到上分别是接口层、网络层、传输层和应用层,这就是大名鼎鼎的 TCP/IP 模型;

就拿TCP/IP模型来说:

  • 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  • 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 举个例子:传输层只关心两台主机通信的地址,比如我们网上购物,从北京到上海,我不关心中途是怎么运输的,我只关心起点和终点;
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
  • 举个例子:还是拿购物一事来说,网络层关注的是路线怎么走,比如从北京到上海有很多条路可以走;
  • 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
  • 举个例子:数据链路层关注的是路径之间的相邻节点该怎么走,比如就北京到上海,要路过多个城市,而这些多个城市之间的路线是数据链路层所关心的;
  • 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层

注意:

  • 必须是同一层次进行通信,比如,A 计算机的应用层和 B 计算机的传输层就不能通信,因为它们不在一个层次,数据的拆包会遇到问题。
  • 每一层的功能都必须相同,也就是拥有完全相同的网络模型。如果网络模型都不同,那不就乱套了,谁都不认识谁。
  • 数据只能逐层传输,不能跃层。
  • 每一层可以使用下层提供的服务,并向上层提供服务。

二. UDP协议

UDP(User Datagram Protocol)是一个简单的面向消息的传输层协议;

2.1 UDP的协议端格式:

源端口: 数据从这里发出;

目的端口:数据要去的地方;

长度:标识UDP头的长度,包括首部长度和数据长度;一个UDP报文最大长度就是64KB;

校验和:它存在的意义就是用来判定一下,如果校验和出错,就会直接丢弃;


2.2 UDP的特点

(1)无连接

UDP传输的过程类似于寄信,知道对方的端口号和IP地址就可以进行传输,不需要建立连接

(2)不可靠

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;

(3)面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;


三. TCP协议

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层协议。

 3.1 TCP协议段格式


 3.2 TCP原理

(1)确认应答机制

    当发送端发送数据时,如上图,第一次发送数据时,数据包括一个报头和载荷,报头是序号,载荷里面是要发送的数据,当第一次发送时,接收方会接受应答,并返回确认序号向发送发索要下一次的数据,通过ack的确认序号,告诉发送方我已经接受到了哪些数据;

    在进行确认应答时,往往会伴随着后发先至的情况,就是先发送的数据后到,后发的数据先到的情况,这种情况也不用担心,对于TCP来说,它会帮我们整队,在TCP内部有个接受缓存区,这是内核中的一块内存空间,当出现乱套的情况,TCP会在这个缓存区按照序号帮我们对收到的消息进行整队;

(2)超时重传机制

在网络的传输过程中,难免会发生"丢包"的情况,那么TCP就会采取重传机制,以便于发送的数据包能准确无误的到达目的地,在丢包中,一般分为两种情况:

1.第一次发送方的数据直接丢了,接收方没到到,不会发送ack;

 

2.接受方收到数据了,返回的ack丢了;

这种情况下,就有一个问题,当接受方返回的ack丢了之后,发送方会继续发送,这样接受方就一直收到重复的数据,这可不是一个小问题,就拿手机支付来说,本来要付1元,结果因为丢包接受方没有返回响应,就会一直扣款!!!

当然,TCP的功能是很强大的,这点问题TCP也会采取相应的措施来帮我们解决,TCP会在接收缓存区根据收到的数据的序号,来帮助我们去重,这样就保证读到的数据不会是重复的!!!

在重传的过程中,也有可能发生丢包,丢失的包继续发生重传,但是每丢包一次,超时等待的时间就会变长,TCP会认为重传也没戏了,于是就干脆放弃了(这种就是严重的网络问题),连续多次重传,都无法得到ack,此时TCP就会尝试重置连接,如果连接失败,TCP就会关闭连接,放弃网络通信了;

面试题:TCP是如何实现可靠性的?

答:确认应答+超时重传

这里不能回答三次握手和四次挥手,这个是和连接相关的,而非可靠性;

(3)三次握手,四次挥手

TCP建立连接:三次握手

所谓握手,就是通信双方,进行一次网络交互,相当于客户端和服务器之间,通过三次交互,建立了关系;

过程:  

1、第一次握手:客户端给服务器发送一个 SYN(同步报文段) 报文。

  2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。

  3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。

  4、服务器收到 ACK 报文之后,三次握手建立完成。


三次握手的作用:

简单点来说,就是验证了客户端和服务器端各自的发送能力和接收能留是否正常;


注:三次握手都是由内核自动完成的,应用程序干预不了;

TCP断开连接: 四次挥手

过程:

1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。

2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。

3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。


在三次握手中,返回的ACK和SYN是合并发送到客户端的,而四次挥手这里的FIN和ACK是不能合并发送的,这是因为三次握手中的ACK和SYN是同一时机触发的,都是由内核完成的,而四次挥手中的ACK和FIN是不同时机触发的,ACK是在内核完成的,而FIN是由应用程序代码控制的,是在调用socket的close方法的时候才会触发FIN;

(4)滑动窗口 

上面说到当发送方发送一个数据段,都要给一个ACK确认应答,收到ACK之后才会发送下一个数据段,如果我们要发送大量的数据段时,那么发送方这边就需要一条一条的等待ACK,这样就浪费了大量时间,所以为了缩短等待时间,这里就需要批量发送,以提高发送的效率;

 批量传输之后:

上述批量传输数据的过程,我们就叫做滑动窗口,批量发送并不是无厘头的去发,而是发送到一定程度,就等待ACK,我们把批量发送等待的数据,称为"窗口大小";

(5)流量控制

上面说的滑动窗口,就是为了让传输的效率更高,窗口越大,批量发送的数据越多,整体的效率就提上去了,可是并不是越快越好,如果发送太快了,就很容易把接收缓冲区给塞满了,此时你再发送数据,就很容易丢包了,TCP也有这样的机制,通过流量的控制,来限制一下发送方的速度;


那么是如何进行控制的呢???

我们让ACK报文中携带一个"窗口大小"的字段,当ACK为1的时候,此时就是一个ACK报文,此时窗口大小字段就会生效,这里是拿接受缓冲区的剩余空间作为窗口大小;

 当发送方发现对方满了之后,就会暂停发送,但是不会一直停止,每隔一段时间就会触发一个窗口探测报文,如果发现缓冲区有容量了,就会继续批量发送;

(6)拥塞控制

我们都知道,在客户端和服务器端之间往往都有很多的交换机和路由器,很明显,在传输路径上,中间任何一个设备出了问题,都会导致传输速率受到一定的影响;拥塞控制的作用就是衡量中间节点传输的能力;

拥塞控制是通过实验的方式,来找到一个合适的发送速率;开始的时候,按照一个小的速率发送,如果不丢包,就可以适当提高一下速率,如果丢包,就把速率调小;最后得到一个合适的发送速率,这实际上也是一个动态平衡的过程;

 

(7)延迟应答

上面说到接收方要返回ACK给发送方,这里的延迟应答就是不是立即发送ACK,而是等一会再发送,这样做的好处就是可以增大窗口的大小,因为延迟的这一小会儿,应用程序从接受缓存区里消费了一批数据了,同时也能让发送方的发送速率大一些;

TCP中延迟应答的两种方式:

  • 数量限制:每隔N个包就应答一次;
  • 时间限制:超过最大延迟时间就应答一次;

 四. TCP/UDP对比

相同点:TCP和UDP都是网络层之上的,传输层协议,都能都能保护网络层的传输,双方的通信都需要开放端口,TCP和UDP中都存在复用和分用技术;

不同点:TCP是可靠传输的,UDP是不可靠传输的;

使用场景:

绝大部分场景下,都可以使用TCP,对于效率要求较高但对于可靠性要求不高的场景下,可以使用UDP,不过归根结底,还是要根据具体的需求去选择使用;

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

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

相关文章

CmBacktrace库在工程中的添加和应用

CmBacktrace 介绍在工程中添加CmBacktrace断言打印全局变量的值循环输出错误信息串口处理看门狗处理 介绍 CmBacktrace下载 CmBacktrace (Cortex Microcontroller Backtrace)是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错…

Javaee Spring template实现查询数据库表内容 基于半xml半注解

昨天用基于xml配置实现template查询数据库,今天基于半xml半注解方式实现,使用注解需要导入spring-aop-5.3.8.jar 导入jar包 项目结构: 其他代码在,先前上一篇文章已经给出 AccountServiceImpl package wwx.dao;import org.springframework…

定时器中断实验

实现内容 利用TIM3的定时器中断来控制DS1的翻转,在主函数用DS0 的翻转来提示程序正在运行。 定时器介绍 定时器可以认为是一个计数器;给定计数器一个初值,每当计数一次,就会走过一个固定的时间,当达到我们给定的初值…

强大的图像处理:ImageKit10.E ActiveX Crack

强大的图像处理! ImageKit10 ActiveX 是一个组件,允许您快速轻松地向应用程序添加图像处理功能。使用 ImageKit10 ActiveX,您可以编写从 TWAIN 扫描仪和数码相机检索图像的应用程序;加载和保存图像文件并将图像从一种格式转换为另一种格式;编…

数字电路和模拟电路-半导体三极管

目录 1 什么是三极管? 1.1 放大状态时的偏执条件 1.1.1发射结加正向电压,扩散运动形成发射极电流IE 1.1.2扩散到基区的自由电子与空穴的复合运动形成基极电流IB 1.1.3集电结加反向电压,漂移运动形成集电极电流Ⅰc 2 三极管工作原理 2.…

5.图论(0x3f:从周赛中学算法 2022下)

来自0x3f【从周赛中学算法 - 2022 年周赛题目总结(下篇)】:https://leetcode.cn/circle/discuss/WR1MJP/ 周赛中的图论题目比较少,除了下面选的 DFS、BFS、拓扑排序、基环树、二分图判定等,还有最短路、DFS 时间戳等&a…

CloudCompare二次开发之如何设计界面ui与功能实现?

文章目录 0.引言1.创建界面ui相关文件2.添加界面ui相关文件到CloudCompare工程3.修改工程相关文件4.结果展示 0.引言 CloudCompare源代码编译成功后,即可进行二次开发,可以通过修改源码实现二次开发,二次开发基础功能见(CloudComp…

什么是文件共享软件?文件传输软件如何共享?

它是一个文件共享软件应用程序,可让强大的数据保护层下将任何大小的文件发送到世界上的任何地方。以光速发送和共享无限数量的文件。可以提交门户并使用语言,品牌,存储等自定义门户。可以选择一个存储点,例如文件传输软件&#xf…

[入门必看]数据结构4.2:串的模式匹配

[入门必看]数据结构4.2:串的模式匹配 第四章 串4.2 串的模式匹配知识总览4.2.1_朴素模式匹配算法4.2.2_1_KMP算法4.2.2_2_求next数组4.2.3_KMP算法的进一步优化 4.2.1_朴素模式匹配算法什么是字符串的模式匹配朴素模式匹配算法通过数组下标实现朴素模式匹配算法代码…

http(1)

主要介绍http 1.0 我们在浏览器中输入一个网址,稍等片刻就看见了网页 客户端会发送一个http请求,要求返回cn.bing.com这个网址,服务器收到请求后就会返回一个html页面 (服务器根据请求找到客户端想要的资源,然后把这个…

[LeetCode]路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点…

【并发编程】线程池的原理和源码分析

线程使用上可能的问题 我们一般通过new Thread().start();来创建和运行一个线程,如果在业务过程中有大量场景需要使用多线程来并发,那么就会有以下问题 需要频繁的创建和销毁线程 ,需要消耗CPU资源如果创建和销毁的线程的数量过多(大于CPU核…

CMOS图像传感器——从传感器冗余说起

在这先抛出一个概念,什么是成像圈?众所周知,相机的镜头近似于圆柱体,光线透过圆筒子投射出的大都是圆形。我们可以拿一个镜头演示一下,当这个圆圈投在传感器所在焦平面时,我们称之为像场。像场的边界我们称之为成像圈,成像圈是圆的,但是传感器是矩形,天圆地方的怎么放…

Lombok插件下载与离线安装

Lombok插件下载与离线安装 首先你既然搜要离线安装或下载,那么肯定也是在IDEA工具里面,无法搜索到,或者自动下载安装失败吧? 安装包下载地址 记得和 idea版本一样, 如果不知道啥版本看下面

CleanMyMac X4.15重大更新 新功能菜单发布

CleanMyMac,一款电脑清理软件,可以帮助你清理垃圾文件、优化系统性能、管理应用程序等。它就像你的电脑管家,让你的电脑始终保持最佳状态。无论是手机还是电脑,在使用一段时间之后都可能会发生卡顿的现象,很多小伙伴会…

C++ 高级数据结构————[ 单调栈 ]

每周一篇的算法文章来了 今天讲解的是高级数据结构中的——单调栈 单调栈,顾名思义,就是升级版的栈() 先回顾一下栈把 栈,是一种线性表,它的特点是只能从一边进出,并且先进后出,后进…

Windows入门篇一之MSDN手册的使用和第一个窗口程序

Windows入门篇之MSDN手册的使用和第一个窗口程序 MSDN手册MSDN手册是什么MSDN手册的下载和安装MSDN手册的使用 第一个窗口程序项目的创建第一个简单的窗口程序 MSDN手册 MSDN手册是什么 MSDN手册是VS中的一个帮助手册,帮助初学者学习Windows编程,来查找…

opencv实现卡尔曼滤波

卡尔曼滤波是一种递归的估计,即只要获知上一时刻状态的估计值以及当前状态的观测值就可以计算出当前状态的估计值,因此不需要记录观测或者估计的历史信息。 卡尔曼滤波器分为两个阶段:预测与更新。在预测阶段,滤波器使用上一状态…

VScode配置远端服务器深度学习项目

前提准备已安装VScode。 1.安装插件Remote Development 安装完成后左侧就多了远程资源管理器图标: 1.点击远程资源管理器。 2.点击小齿轮(配置)。 3.选择config配置文件,如果没有自己按照相似路径新建config文件后重复1、2、3步骤…

组合总和III

组合总和III 题目 力扣题目链接:https://leetcode.cn/problems/combination-sum-iii/ 代码 class Solution {public:vector<vector<int