计算机网络相关重点

目录

OSI七层模型与TCP/IP四层模型

TCP协议的3次握手过程

TCP协议3次握手的原因 

TCP协议的四次挥手过程

流量控制

滑动窗口

拥塞控制

TCP和UDP的区别 


OSI七层模型与TCP/IP四层模型

在网络的信息传输过程中,我们常常无法之间进行传输,而是需要将每个阶段进行分层处理,让每层都执行与自己相关的操作,互不影响又互相调用以此来完成网络信息的传输,因此就有网络分层的概念。

OSI七层模型是ISO组织定义的一个标准的网络分层模型,提供了一个标准来进行接口的使用和实现,OIS七层模型从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

名称作用协议
应用层给用户提供服务DNS、HTTP、SMP、POP3、IMAP4、FTP、Telent
表示层数据处理
会话层管理应用程序之间的会话SSL、TLS、DAP、LDAP
传输层为两台主机进程的通信提供数据传输服务TCP、UDP
网络层路由和寻址IP/IPV6
数据链路层管理相邻节点之间的数据通信
物理层利用传输介质实现计算机节点间比特流的传输

 

TCP/IP四层模型是对OSI模型的一种简化,它自上而下分为:应用层、传输层、网络层、数据链路层

对比OSI模型,TCP/IP模型更为简单实用,它将OSI模型中应用层+表示层+会话层总结成一个,统称为应用层,将数据链路层+物理层总结成一个数据链路层。

不论是哪种模型,作用就是物理层通过物理方式将电脑连接起来,数据链路层对比特流的数据进行分组,再由网络层建立主机和主机之间的连接,传输层负责建立端口到端口之间的通信,最终由应用层负责建立连接将数据格式转换为用户需要的并反馈给用户。

TCP协议的3次握手过程

TCP协议是一个面向连接的可靠的传输方式,所以它在建立端口与端口之间的通信时,会先通过3次握手的过程来确认连接。

  • 第一次握手

        由客户端先先服务器发送一个数据包,数据包的首部格式为:SYN=1,ACK=0,表示                                这是一个主动请求建立连接的数据包。

  • 第二次握手

        服务器收到客户端发送来的请求建立连接的数据包后,如果同意连接,会给客户端发        送一个数据包作为回应,这个数据包的首部格式为:SYN=1,ACK=1代表同意连接。

  • 第三次握手

        客户端收到服务器同意连接的数据包后,会再次给服务器发送一个首部格式为:        SYN=0,ACK=1的数据包,表示双方都同意连接,自此开始真正的数据传输。

TCP协议3次握手的原因 

TCP协议的3次握手是为了保证连接的唯一性,避免重复连接引起混乱,除此之外,在3次握手之后,可以得到一个初始化的序列号seq,保证了TCP协议的可靠性传输,当只有2次握手时,无法初始化序列号seq,另外,TCP协议也可以通过4次、5次握手来确认连接,但这样会造成一些资源的浪费,所有3次握手是最恰当的连接方式。

TCP协议的四次挥手过程

在TCP协议中,两个端口要断开连接,必须进行四次挥手过程才能释放连接。

  • 第一次挥手

        客户端向服务器发送连接释放的数据包,数据包首部格式为:FIN=1,ACK=0,并停止        继续发送数据。

  • 第二次挥手

        服务器接收到客户端发送过来的请求释放连接的数据包,给客户端发送一个回应数据        包,数据包首部格式为:FIN=1,ACK=1,表示同意释放连接。

  • 第三次挥手

        经过第二次挥手后,客户端到服务器的连接已经释放了,TCP连接已经处于半连接的                              状态,客户端已经不可以给服务器发送数据了,但服务器还能给客户端发送数据,客户端                        也仍能接收;在服务器将所有数据给客户端发送完毕之后,会向客户端再发送确认数据                包,数据包首部格式为:FIN=1、ACK=1,表示服务器已经将客户端需要的数据发送完毕并                                       且要释放连接。

  • 第四次挥手

        客户端收到服务器的释放报文后,向服务器发送确认报文,报文首部格式为:ACK=1,FIN=0,表示同意服务器释放连接。

综上,两个端口的连接被释放。

流量控制

流量控制是为了TCP连接在传输数据时控制发送方发送数据的速率,以此来保证接收方能够接收,确保数据传输的可靠性。

TCP连接不管发送方还是接收方都维护了一块固定大小的缓冲空间,发送方能够发送多少数据是由接收方的决定的,TCP使用的方式是滑动窗口协议,由滑动窗口的大小来控制传输数据的速率。

滑动窗口

滑动窗口是TCP协议用于实现流量控制的机制,数据的发送方和接受方分别维护各自的缓冲区,这个缓冲区中则是各自的滑动窗口,发送方的窗口大小由接受方的窗口大小决定。

发送方的滑动窗口中包含:已发送并确认,已发送但未确认,未发送且没有超出接受方滑动窗口的范围,未发送且超出接受方滑动窗口的范围

接受方的滑动窗口中包含:确认已确认,未收到但可以接收

由发送方和接收方滑动窗口的组成,整个数据传输过程则是发送方根据接收方窗口的大小,不断发送数据,随着接收方不断接收确认通知发送方,接受方窗口不断向前移动,发送方的窗口也会不断向前移动,接收方可以通过控制窗口的大小,控制发送方的速率,实现流量控制。

拥塞控制

 拥塞指的是在整个网络中,同一时间传输的数据包数量过多,产生了网络的拥塞,因此,发送方需要维护一个拥塞窗口来控制同一时间内发送数据包的数量,TCP主要通过:慢启动、拥塞避免、拥塞发生、快恢复四个算法来进行拥塞控制。

  • 慢开始:

        拥塞窗口的值从1开始,采用加倍增长的方式由小到大逐渐增大,而不是一次性变大。

  • 拥塞避免:

        慢开始每个轮次都会将cwnd加倍,这样的增长方式会很快造成拥塞,所以会设置一个慢开始的门限值ssthresh,当cwnd大于ssthresh时,进入阻塞避免,每个轮次只将cwnd加一,降低了cwnd的增长速度。

  • 拥塞发生:

        在cwnd不断增大的时候,可能会发生拥塞,当触发了重传机制时,说明已经有数据包丢失了,也就是已经发生了拥塞。

不同的重传机制会有不同的处理方式:

        超时重传:当发生超时重传时,说明网络拥塞已经非常严重,这是会将ssthresh设置为当前的cwnd值的一半,然后cwnd重新从1开始慢启动。

        快速重传:当发生快速重传,还能够收到数据包,说明网络拥塞还没有很严重,这时会启用快速恢复方式。

  • 快恢复:

        将ssthresh设置为cwnd值的一半,让cwnd从ssthresh慢开始增长。

TCP和UDP的区别 

TCP和UDP都是传输层的协议,但它们具有很大的区别。

TCPUDP
面向连接面向连接,一对一通信无需建立连接,支持一对一,一对多,多对多的通信
可靠性通过确认应答,连接管理,流量控制,拥塞控制等保证可靠性不保证可靠性
性能传输效率慢,消耗资源多传输效率高,消耗资源少
首部格式需要20-60个字节需要8个字节

由于TCP和UDP的区别及特点,这两个协议的使用场景也各不相同。

UDP:UDP传输数据不需要建立连接,接收方接收数据也不需要给出任何确认,虽然不可靠,但他很高效,所以在一些即时通信中使用UDP,例如:直播、视频

TCP:TCP提供面向连接的可靠性传输,一般使用在:文件传输、发送和接受邮件、远程登录等场景中。

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

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

相关文章

(本地安装clickhouse)执行 nstall/doinst.sh时报错: cp: 无法创建普通文件“/usr/bin/clickho

问题描述 在本地安装clickhouse时, 解压:tar -zxvf clickhouse-common-static-21.9.4.35.tgz -C ../module/ 再进入cd clickhouse-common-static-21.9.4.35/ 执行:install/doinst.sh 报错 报错信息和截图: rootbigdata1 click…

CorelDraw是什么软件?好用吗

很多人都听过CorelDraw的名字,但不知道CorelDraw是什么样的软件。下面就让小编为大家详细介绍一下。 coreldraw是什么软件 CorelDraw是一款专业的图形设计软件。它的主要功能包括矢量图形和位图的编辑。用户可以利用其矢量图形编辑能力,设计各种图标、Logo等精细图…

数据结构与算法(C语言版)P2---线性表之顺序表

前景回顾 #mermaid-svg-sXTObkmwPR34tOT4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sXTObkmwPR34tOT4 .error-icon{fill:#552222;}#mermaid-svg-sXTObkmwPR34tOT4 .error-text{fill:#552222;stroke:#552222;}#…

C语言自定义类型详解(1)结构体知识汇总

本篇概要 本篇主要讲述C语言结构体的相关知识,包括结构体的基本声明,结构体的匿名结构,结构体的自引用,结构体变量的定义和初始化以及结构体的内存对齐等相关知识。 文章目录 本篇概要1.结构体1.1结构体的基本声明1.2结构体的特殊…

C# 查找迷宫路径

1.导入图像&#xff0c;并且将图像转灰度 using var img new Image<Bgr, byte>(_path); using var grayImg img.Convert<Gray, byte>(); 2.自动二值化图像 using var inputGrayOut new Image<Gray, byte>(grayImg.Size); // 计算OTSU阈值 var threshol…

C语言字符和字符串函数(2)

大家好&#xff0c;我今天继续来给大家分享C语言中的字符和字符串函数。 目录 ** 1.字符分类函数 2.memcpy 3.memmove 4.memcmp** 1.字符分类函数 islower判断字母小写函数 int main() {char ch w;if (islower(ch)){printf("小写\n");}else{printf("非小写\…

MQ - 26 基础功能:顺序消息和幂等的设计

文章目录 导图概述顺序消息的定义和实现消息队列的存储结构特性基于顺序存储结构的设计主流消息队列的实现机制幂等机制的定义和实现消息队列中幂等的定义生产幂等的设计实现1. 通过消息唯一 ID 实现幂等2. 通过生产者 ID 和自增序号实现幂等Kafka 的幂等机制的实现方案总结导图…

基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着城市化进程的加快…

2023年研赛华为杯选题人数发布

选题人数发布&#xff01;经过长达30个小时&#xff0c;各个平台的相关选题投票、相关文章阅读量等各项数据进行统计&#xff0c;利用之前的评估办法&#xff08;详见注释&#xff09;。在开赛后30小时&#xff0c;我们基本确定各个赛题选题人数&#xff0c;大致为 题号选题人数…

BadTokenException: Unable to add window -- token null is not valid

windowManager.addView时报错 Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 有可能是LayoutParams没有配置type或者type配置错误&#xff0c;可以试试layoutParams.typeWindowMa…

Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL

前言&#xff1a; 有许多开发的小伙伴&#xff0c;使用的是mac&#xff0c;那么在mac上如何安装&#xff0c;配置Mysql&#xff0c;以及使用Mysql了&#xff0c;今天来一个系统的教程。 安装Mysql 使用mysql前&#xff0c;我们需要先下载mysql&#xff0c;并按照以下几个步骤…

Redis延迟双删-架构案例2021(三十二)

数据库设计 某医药销售企业因业务发展&#xff0c;需要建立线上药品销售系统&#xff0c;为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外&#xff0c;还需要提供当前热销产品排名、评价分类管理等功能。 通过对需求的分析&#xf…

python中使用多线程批量导入包

问题放到前面&#xff0c;目前发现一个问题&#xff0c;importlib对于c/c编译过来的包&#xff0c;只支持导入最顶层的包&#xff0c;不过也够了。 因为有些项目的依赖太多&#xff0c;所以导致每个文件头部都包含大量import语句&#xff0c;用来导入必要的包&#xff0c;如果量…

前端第二课,HTML,alt,title,width/heigh,border,<a>超链接,target,tr,td,th

目录 一、title: &#x1f49b; ​二、alt&#x1f499; 三、width/heigh&#x1f49c; 四、border ❤️ 五、超链接&#x1f49a; 六、target &#x1f497; 七、tr&#x1f495; 八、td&#x1f498; 九、th&#x1f49e; 十、rowspan 一、title: &#x1f49b; 快…

js-cookie使用 js深度克隆(判断引用类型是数组还是对象的方法)

cookie和深度拷贝的使用 1、js-cookie使用2、js深度克隆 1、js-cookie使用 前端的本地存储分为 localstorage、sesstionstorage、cookie 但是咱们有时候需要做7天免登录的需求时&#xff0c;选择 cookie 作为前端的本地存储是在合适不过的了 直接操作 cookie 可以&#xff0c; …

名义实际GDP-各地区-原始和结果(2000-2022年)

一、数据介绍 数据名称&#xff1a;名义、实际GDP-各地区-原始和结果 数据年份&#xff1a;2000-2022年 计算公式&#xff1a;实际GDP 名义GDP / GDP折算指数 数据基期&#xff1a;2000年 数据整理&#xff1a;自主整理 二、数据用途 数据用途 文献依据 经济发展水平 …

Docker一键安装和基本配置

一键安装脚本 注&#xff1a;该脚本需要root权限 curl -sSL https://get.docker.com/ | sh非root组用户赋权 sudo groupadd docker # 若使用一键安装脚本会自动创建这个组&#xff0c;提示已存在 sudo gpasswd -a ${USER} docker # 将当前用户添加到docker组&#xff0c;也…

【笔记】ubuntu 20.04 + mongodb 4.4.14定时增量备份脚本

环境 ubuntu 20.04mongodb 4.4.14还没实际使用&#xff08;20230922&#xff09;后续到10月底如果有问题会修改 原理 只会在有新增数据时生成新的备份日期目录备份恢复时&#xff0c;如果恢复的数据库未删除&#xff0c;则会覆盖数据 准备 准备一个文件夹&#xff0c;用于…

Kuboard突然无法访问提示:Failed to connect to the database

一、背景 没有做任何特殊操作&#xff0c;突然kuboard访问时&#xff0c;提示如下信息&#xff1a; {"message": "Failed to connect to the database.","type": "Internal Server Error" }二、排查过程 此处kuboard为docker部署的…

python经典百题之删除指定字母

题目&#xff1a;删除一个字符串中的指定字母&#xff0c;如&#xff1a;字符串 “aca”&#xff0c;删除其中的 a 字母 程序分析 我们需要编写一个程序&#xff0c;删除字符串中的指定字母。给定一个字符串和要删除的字母&#xff0c;我们需要将字符串中的指定字母全部删除。…