record-4.网络

news2024/11/17 11:27:41

4、网络

技术栈:

1、计算机网络体系结构

OSI分层 (7层):物理层、数据链路层(网桥,交换机)、网络层(IP,ICMP,ARP)、传输层(TCP,UDP)、会话层、表示层、应用层。

TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。

五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

2、ARP是地址解析协议,简单语言解释一下工作原理

ARP 实现由 IP 地址得到 MAC 地址

主机A广播发送ARP请求分组(源主机IP地址,源主机MAC地址,目的主机的IP地址

主机B向A发送ARP响应分组(源主机IP地址,源主机MAC地址

1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

2:src发送:

当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址

如果有,则直接发送数据;

如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址

3:dst接受:

当本网络的所有主机收到该ARP数据包时:

首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包;

如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

4:dst发送:

源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。

如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

3、TCP

是一种面向连接的、可靠的、基于字节流的传输层通信协议

(1)可靠性保证:

  • 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;

  • 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;

  • 丢弃重复数据:对于重复数据,能够丢弃重复数据;

  • 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

  • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

(2)滑动窗口

TCP由于存在确认应答机制,在一方发出一条消息以后,另一方要发送ACK表明自己收到消息。

如果按照下面这种形式,每次收到ACK才发出下一条消息,这种一发一收的效率太低。但是如果客户端不急着接收ACK,可以利用等待ACK的空挡直接发送下一批数据,这样就可以做到短时间内发送多批数据。这就是滑动窗口的基本思想。

滑动窗口可能出现的状况:

(1)中间报文丢了

假设客户端依次发送1001-2000,2001-3000,3001-4000

客户端如果连续多次(一般是连续三次)收到了2001的确认应答,说明序号为2001之后的报文丢了,此时就会重传2001~3000的报文;服务端收到2001~3000的报文以后,由于之前已经收到了3001~4000 的报文(暂时存放在接收缓冲区),那么服务端相当于已经收到了全部的报文,此时服务端发送的确认序号是 4001,表明4001之前的报文已经全部收到(4001+ACK)

(2)后发送的报文先收到了ACK

原因:要么丢了 要么网络延时到达

如果开了sack选项(net.ipv4.tcp_sack),表示会选择性地重传未回ACK的报文;否则,会重传开始丢失的报文段之后的所有报文

(3)滑动窗口大小为0时,何时才能继续发送数据?

原因:对方上层的处理速度较慢,导致对方接收缓冲区里的数据没有被取走

解决方法:

a、发送方定期发送不携带数据的报文

发送方定期可以发送一个不携带数据的报文,报文不携带数据,也就不会占用服务端的缓冲区,接收方返回的ACK中会携带窗口大小,以此来判断是否可以继续发送数据。

b、接收方缓冲区一旦更新立马通知发送方

接收方的上层把数据取走的时候,服务端主动发送一个窗口更新的通知报文,该报文不携带任何数据,只是在报文首部设置了16位窗口大小

(3)拥塞控制:

1、慢启动

由小到大逐渐增加拥塞窗口的大小

2、拥塞避免

让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长

设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1

如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始

3、快重传

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。

例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认;收到三个 M2,则 M3 丢失,立即重传 M3

4、快恢复

当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法

4、TCP 三次握手

客户端A 服务端B

(1)A向B发送请求报文,SYN=1,ACK=0,选择一个初始序号seq=x。

(2)B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为ack= x+1,同时也选择一个初始的序号 seq=y。

(3)A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为ack= y+1,序号为 seq=x+1。

B 收到 A 的确认后,连接建立。

5、TCP四次挥手

客户端A 服务端B

(1)A 发送连接释放报文,FIN=1(表明此报文段的发送方的数据已发送完毕,并要求释放运输连接)。

(2)B 收到之后发出确认,此时 TCP 属于CLOSE-WAIT状态,让服务器端发送还未传送完毕的数据,即B 能向 A 发送数据但是 A 不能向 B 发送数据。

(3)当 B 不再需要连接时,发送连接释放报文,FIN=1。

(4)A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。

cat /proc/sys/net/ipv4/tcp_fin_timeout -> 60s
  • B 收到 A 的确认后释放连接。

为什么A在TIME-WAIT状态必须等待2MSL的时间呢?

为了保证A发送的最后一个ACK报文段能够到达B;

防止“已经失效的连接请求报文段”出现在本链接中。

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了

问题定位思路:

参考链接:

计算机网络面试题(一) - 知乎

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

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

相关文章

springboot房屋管理系统

房屋管理系统 springboot房屋管理系统 java房屋管理系统 技术: 基于springboothtml房屋管理系统的设计与实现 运行环境: JAVA版本:JDK1.8 IDE类型:IDEA、Eclipse都可运行 数据库类型:MySql(8.x版本都可…

微服务-Gradle的入门和使用

对于一个新的工程拉下来,如果该工程用了gradle。需要学习一下gradle项目管理工具。我在本机macbook M1的环境下操作。 一、配置安装 下载Gradle: https://services.gradle.org/distributions/ 我下载了6.9版本的Gradle 下载好了以后,放到了…

elasticsearch学习篇:初识ES

一、什么是ES 1、基础概念 是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容es是elastic stack(ELK)的核心,负责存储、搜索、分析数据。 ELK包括以下内容: ELK被广泛应用在日志数据…

用python实现调用百度图片搜索的API

前言:这段代码是一个简单的图片爬虫程序它可以通过输入关键词,在百度图片中搜索相关图片,并返回一张随机的图片。代码使用Flask框架搭建了一个简单的Web应用,将用户输入的关键词作为参数传递给爬虫程序,然后从百度图片…

观察者模式(Observer)

别名 事件订阅者者(Event-Subscriber)监听者(Listener) 定义 观察者是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。 前言 1. 问题 假如你有两种类…

Linux vfs各种operation操作介绍

1.ext4文件系统定义的各种操作 //普通文件操作 const struct file_operations ext4_file_operations {.llseek ext4_llseek,.read_iter generic_file_read_iter,.write_iter ext4_file_write_iter,.unlocked_ioctl ext4_ioctl, #ifdef CONFIG_COMPAT.compat_ioctl …

【Python基础】- break和continue语句(文末送书4本)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

6 图像处理实现螺纹识别案例(matlab程序)

学习目的:学习识别案例掌握识别方法 2.代码 clear;clc;close all Iimread(luowen1.bmp); %读取螺纹图片 try Irgb2gray(I); %如果是RGB图,则转换成灰度图 catch end figure imshow(I) title(原图(半边螺纹)) f…

基于pyqt和卷积网络CNN的中文汉字识别

直接上效果演示图: 通过点击按钮可以实现在画板上写汉字识别和加载图片识别两个功能。 视频演示和demo仓库地址在b站视频001期: 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 所有代码展示: 十分的简洁,主…

【从零开始学习JAVA | 第二十六篇】泛型补充知识

目录 前言: 泛型的更多应用: 泛型类: 泛型方法: 泛型方法: 总结: 前言: 在上一篇文章中我们介绍了泛型的基础知识,也就是在创建集合的时候用到泛型,此时的泛型更多…

关于内存颗粒的地址映射

即便从软件角度,抛开地址译码器讨论内存颗粒中指定位置处的地址(DDR中的指定位置的电容)也是没有意义的。晶体管没有绝对地址,就如同地理测量中测定位置前需要确定坐标系一样,同一个位置在不同的坐标系中的地址描述可以…

【CVRP测评篇】 算法性能如何?来测!

我跨越了2100015秒的距离,为你送上更全面的算法性能评测。 目录 往期优质资源1 CVRP数据集2 实验准备2.1 计算机配置2.2 调参方法2.3 参数设定2.4 实验方法 3 实验结果3.1 最优解统计3.1.1各数据集上的算法性能对比3.1.2 求解结果汇总3.1.3小结一下3.1.4 还有话说 3…

使用 RedisTemplate 对象的 opsForValue() 方法获取 Redis 中的值获取不到

问题 使用 RedisTemplate 对象的 opsForValue() 方法获取 Redis 中的值获取不到 详细问题 笔者代码如下 1 使用 ValueOperations 对象的 set() 方法将一个键值对存储到 Redis 中 valueOperations.set("order:" user.getId() ":" goods.getId(), sec…

【Redis】2、Redis应用之【根据 Session 和 Redis 进行登录校验和发送短信验证码】

目录 一、基于 Session 实现登录(1) 发送短信验证码① 手机号格式后端校验② 生成短信验证码 (2) 短信验证码登录、注册(3) 登录验证① 通过 SpringMVC 定义拦截器② ThreadLocal (4) 集群 Session 不共享问题 二、基于 Redis 实现共享 session 登录(1) 登录之后,缓…

23款迈巴赫S480升级原厂10°后轮转向系统,减少转弯半径

就是低速的情况下,有更强的机动性,前后车轮的不同转动方向使得车辆可以凭借更更小转弯半径实现转向,在特定的狭窄路段或者停车时,车辆的操控性大大提升,而内轮差也缩小也增大了转向的安全性。 高速的情况下&#xff0…

C. Road Optimization(dp)

Problem - 1625C - Codeforces 火星政府不仅对优化太空飞行感兴趣,还希望改进该行星的道路系统。 火星上最重要的高速公路之一连接着奥林匹克城和西多尼亚的首都Kstolop。在这个问题中,我们只考虑从Kstolop到奥林匹克城的路线,而不考虑相反的…

技术创举!比亚迪-汉上的实景三维导航...

实景三维技术的发展日新月异,但在应用中却一直深陷内存占用、渲染缓慢、加载卡顿和模型塌陷等问题。对此,大势智慧率先推出海量数据轻量化技术,在业内首次实现实景三维模型在车机系统的直接浏览,展示了轻量化技术赋能实景三维应用…

面试Dubbo ,却问我和Springcloud有什么区别?

Dubbo 、Springcloud? 这两有关系? 前言一、RPC 框架的概念1. 什么是RPC框架2. RPC 和 普通通信 的区别 二、常用 RPC 框架1. Dubbo2. gRPC3. Thrift4. Feign 三、dubbo 与 Springcloud1. Dubbo 的模型2. Springcloud3. dubbo 与 Springcloud 的区别 前言 提到Dub…

若隐若现的芯片

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>若隐若现的芯片</title><script src"https://unpkg.co/gsap3/dist/gsap.min.js">…

HBase(5):导入测试数据集

1 需求 将ORDER_INFO.txt 中的HBase数据集&#xff0c;我们需要将这些指令放到HBase中执行&#xff0c;将数据导入到HBase中。 可以看到这些都是一堆的put语句。那么如何才能将这些语句全部执行呢&#xff1f; 2 执行command文件 2.1 上传command文件 将该数据集文件上传到指…