Linux网络编程01

网络层级
在这里插入图片描述

协议
协议:两个对等实体对通话内容的约定,一个协议是对应收发双方相同层级的

常见的协议
应用层(公开协议)
http协议(浏览网页);客户端(浏览器)发请求;服务端(nginx,apache,tomcat)
ssh远程连接
ftp上传/下载
SMTP/pop3电子邮件
其他协议可以查看官方RFC文档 RFC Editor
私有协议:KCP。 QQ,微信,游戏(堆延迟比较敏感),金融使用的是私有协议,可以根据不同场景按需定制功能,并且更安全

内核协议栈(传输层,网络层,接口层)----内核进程
传输层:
TCP:可靠的,面向连接的(使用管道)
UDP:不可靠,无连接的(消息队列)
SCTP:音视频
网络层
IP:给每个主机分配一个地址,找到目标地址的路径(路由)
ICMP :ping命令使用的协议,控制消息协议
IGMP(组):广播协议
接口层
ARP:IP地址转换为MAC(物理)地址的协议

数据的传递
逻辑上 是对等协议
实际上是只能上层和下层之间传递

PDU:协议数据单元
CRC校验和:将前面的数据计算出一个结果,检查在传输的过程中是否发生数据跳变,验证数据的完整性

交换机工作在L2(数据链路层),在一个广播域里面不同的机器之间传递,拓展广播域
路由器工作在L3(网络层),在不同的服务器之间转递,可以从一个局域网发送到另一个局域网
在这里插入图片描述

如何去定位一个主机,如何定位一个进程

使用IP地址去定位一个主机IP地址工作在网络层,交换机无IP地址因为交换机工作在链路层;路由器由IP地址,网关就是路由器
windows下查看IP信息ipconfig
Linux下查看网络命令ifconfig[ens33以太网网卡,lo本地环回设备用于本机通信]如果客人端和服务端都在本地就不会今年过网卡,直接走本地环回
在这里插入图片描述
通过端口号标识不同的进程,端口号范围0 ~ 65535(2bytes),
windows下查看端口号netstat -an
在这里插入图片描述

数据链路层

交换机的作用拓展广播域
在这里插入图片描述

mac地址 物理地址

如果在同一个广播域里面的主机之间相互发送消息,那么交换机就会根据主机的mac地址来找到目标主机和发送方主机
在这里插入图片描述
在这里插入图片描述
校验和的目的是防止比特跳变,目标主机收到帧之后会堆前面的数据进行计算,将计算出来的结果和检验和进行比对,如果没有比对成功那么就会丢弃此帧
目的地址(48位):MAC地址
源地址(48位):MAC地址
传送的数据最小是46,如果不满46就补0
最大是1500MTU最大传输单元:数据部分的大小限制(历史遗留问题)

ARP(地址解析)协议

找到某一个设备的MAC地址

当主机A要找到目标地址时,在局域网内会通过广播ARP请求来询问局域网中的主机谁是目标主机,目标主机应答主机A,然后主机A就可以通过交换机找到目标主机发送信息,就可以不用在以广播的方式来发送信息
在这里插入图片描述

广播的包,目的地址全是F,交换机帮需要广播的主机来发起广播,
不是广播的包,目的地址是目标主机的MAC地址,
在这里插入图片描述

网络层

只有数据链路层只能在局域网里面进行通信,但是加入网络层之后我们可以和更远的主机进行通信

网络层的核心协议IP协议,负责把数据包送出广播域

数据在网络中传递并不是直接传送到目的地址的,而是在逐跳传播的网络中,找到一条从起点到终点的路径,找到路的路以及找路的过程都叫做路由,路不仅仅只有一条

IP地址
IPv6128位
IPv4 32位 ,4字节的整数,使用点分十进制来表示
在这里插入图片描述

NAT技术

实现IP地址的转换,我们现实中的光猫就是实现NAT转换的,他分为内网和外网,他将连接他的许多主机分配一个内网IP,内网主机需要发送网络请求请求外网时,会使用NAT转换将内网IP转换为真实的光猫的物理IP向外网发送请求,当外网返回请求响应时,光猫通过NAT转换将外网IP转换为内网IP,然后通过记录表将返回的数据发送给内网主机
NAT认为一些地址是内网地址
10.0.0.0/8 ~ 10.255.255.255
172.16.0.0/12 ~ 172.31.255.255
192.168.0.0/16 ~ 192.168.255.255

在这里插入图片描述

其他保留IP地址
在这里插入图片描述

IP数据报

一行有32bit = 4byte = 1个字长
最上面除了数据部分是IP头
和上面我们提过的一样IP数据报时放在以太网帧里面,以太网帧以头,尾将IP数据报包裹,进行发送
版本指定是IPv4还是IPv6,首部长度单位是4Byte,最短20Byte,最长60Byte

在这里插入图片描述

分片和重组

以太网帧(MTU)比IP数据报的长度上限要小,所以一个以太网帧装不下一个IP数据报,
因此我们需要对IP数据报进行分片和重组,在来源进行网络分片,目的主机网络层进行重组,分片在网络中独立传播,
网络层是不可靠的,如果发现数据包丢包,不会重传,会直接将数据包丢弃
每一个分片是一个单独的IP数据报,有属于自己单独的IP
属于同一个原始IP报的分片里面有相同的标识
在这里插入图片描述

在这里插入图片描述

TTL的意义

网络层是逐跳传播的,因此数据有可能会在网络中无限循环,那么我们要怎样避免这个问题呢
我们会给每个数据包设计一个TTL寿命,其可以记录数据包在网络中存在的时间,当时间到达指定值数据包就会被销毁,但是也可以通过记录数据包在网络中经过网络每一级的数量,指定数据包只能在网络里面执行几跳

路由器的原理

路由器工作在L3网络层
如果数据包的目的IP地址不在广播域内,路由器回暖根据数据包的IP地址,向外做转发操作

查看路由表
在这里插入图片描述
Destination:目的地址
Gateway:网关/路由器(下一跳转发给谁),如果是0.0.0.0那么就是转发给自己的广播域
Genmask:掩码,我们输入一个IP地址,IP地址会与掩码按位与,得到的结果会去和Destination作比较,我们会去比较的出来的结果和我们的IP地址哪个是最长,最长的就是我们要转发的目标,,然后可以通过Gateway来确定我们要向外网转发还是局域网内进行转发,最长前缀匹配
每隔一段时间路由表就会更新

ICMP协议
ICMP协议是网络层;ICMP是网网络层的高层,实际上是基于IP协议的

ping( )是基于ICMP实现的
tracert(windows)

传输层TCP
面向连接的协议,可靠,全双工,端到端的通信,不支持广播和组播
面向连接:存在已连接状态和未连接状态两个状态,但是已连接状态才能通信。数据的传递一般是无连接的,但两端的通信一般是有连接的
可靠:之前学到的协议都是不可靠的,链路层到网络层的协议都是不可靠的,可靠的意思就是如果发生丢包和坏包会重传。

TCP怎么样建立和断开连接?

建立连接(三次握手)【建立全双工通信过程,确认两个管道的正常通信】
(1)A向B发送请求
(2)B收到A的请求,B向A发送A的确认并且携带B对A的请求
(3)A收到B的确认以及携带的请求,向B发送确认
建立连接的意义
(1)让自己转换为已连接状态;
(2)获取(交换)初始序列号(因此要规定初始序列号要根据不同时间点生产序列号),规定哪些序号是合法(可以被接收处理)的信号,
两台主机的时钟不一定是一直的,因此双方需要交换彼此的初始序列号
TCP建立连接
SYN-SENT是已经发送请求连接状态
客户端才能主动发起连接
在这里插入图片描述
断开连接(四次挥手)
服务端和客户端都可以发起断开连接
在这里插入图片描述
在这里插入图片描述
断开过程中,发起断开多的数据FIN M 以及 FIN N如果出现丢包,那么可以重新发包进行断开,但是ACK M+1ACK N+1数据包如果丢了,是很严重的事情,因为这时候发送ACK的主机如果已经关闭,数据包如果发生丢包,那么另一个主句就会一直向主机重发FIN请求关闭的数据包,
因此不是发送ACK的主机发送完就直接关闭,而是需要等待到确保能够重传一次的时间之后再关闭(等待两倍MSL
设置两倍MSL时间原因是
(1)确保重传一次ACK
(2)确保旧的包再新连接建立时已经消逝
MSL是根据TTL进行计算的,TTL是固定的,跟网络状态无关,
查看MSL(60秒)
在这里插入图片描述

TCP段的头部
IP数据报一般头部长度20个字节
TCP段头部一般长度为20个字节
在这里插入图片描述
端口号:0 ~ 65535
序号:SEQ
确认序号:ACK
首部长度:最小20Byte,最大60Byte,和IP数据包的限制都是一样的
URG:如果为1,那么紧急指针是有用的,如果不为1时,那紧急指针是无用的
ACK:如果为1,那么说明这个数据包还起到确认的作用
PSH:快速关闭
RST:说明包出现错误
SYN:建立连接请求
FIN:断开连接请求
窗口大小:改变发送方的发送窗口
选项:绝大多数情况都没有,如果有一般都是通知MSS(最大报文长度),为了尽量避免分片和重组,一般都会让TCP数据少于其最大可传输数据,确保段不会分片。一般第一次连接的时候才会超过20会有选项这一个数据项,其他的时候都没有这个选项

实现重传需要怎么做?
(1)确认机制,对方在收到你发的包之后要发送确认收到的信息,保证信息已经成功发送到目标主机
(2)缓冲区保存已发送未确认的数据,
(3)设置定时器,在定时器到点之前如果没有收到目的主机的确认信息,那么就会重新发送这个数据包
(4)序号机制(每个数据包的序号不一样,相同的两个包序号相同)避免目标主机收到重复的包
(5)异步发送提高发送数据包的效率,同时目标主机返回的确认信息也要携带序列号信息
在这里插入图片描述

限制速度
为了避免发送包的速度太快,导致目标主机无法迅速反应,
在发送主机会限制已发送未确认包的数量(滑动窗口机制,为了限制发送速度)
窗口越小发送的速度越小

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【206.反转链表】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:ListNode* reverseList(ListNode* head) {if(headnullptr) return nullptr;if(head->nextnullptr) return head;ListNode* newheadreverseList(head->next)…

一款功能强大的iOS设备管理软件Mazing 3中文版免费2024最新下载

Mazing 3中文版是一款功能强大的iOS设备管理软件,它可以帮助用户备份和管理他们的iPhone、iPad或iPod Touch上的数据。除此之外,它还可以将备份数据转移到新的设备中、管理应用程序、导入和导出媒体文件等。本文将详细介绍iMazing的功能和安全性&#xf…

Unity URP14.0 自定义后处理框架

目录 碎碎念一些基础CustomPostProcessing.csCustomPostProcessingFeature.csCustomPostProcessingPass.cs例子:BSC后处理shader(BSC)后处理cs脚本(BSC) 例子:ColorBlitPostProcessing.hlslColorBlit2.shaderColorBlit.cs文件 其他…

震惊! 全方位解释在测试眼里,什么是需求?为什么要有需求?深入理解需求——图文并茂,生活举例,简单好理解

1、什么是需求? 需求定义(官方) 满足用户期望或正式规定文档(合同、标准、规范)所具有的条件和权能,包含用户需求和软件需求 用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端…

计算机网络【CN】子网划分与子网掩码

一个子网定义(X.X.X.X/n) 子网掩码为 n 个 1,32-n 个 0包含的 IP 地址数:232−n 主机号全 0 表示本网段主机号全 1 表示网段的广播地址可分配的 IP 地址数 :232−𝑛−2 子网划分原则 满足子网定义子网𝐴1…𝐴&#x…

FlutterUnit 周边 | 收录排序算法可视化

theme: cyanosis 1. FlutterUnit 更新:排序算法可视化 排序算法可视化是用视图层表现出算法执行过程中排序的过程,感谢 编程的平行世界 在 《十几种排序算法的可视化效果,快来看看!👀》》 一文中提供的算法支持。我进行…

H5游戏分享-烟花效果

<!DOCTYPE html> <html dir"ltr" lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width" /> <title>点击夜空欣赏烟花</title> <sc…

git学习笔记-发现问题如何恢复

1.概要 git总出各种问题&#xff0c;不清楚原因。所以准备了解的跟深入些。本来的理解是这样的: 下载我就pull 修改完就 commit然后push 怎么会有问题的&#xff0c;结果还总有。 既然问题无法避免&#xff0c;那就提高解决问题和恢复问题的能力。如果问题能够恢复就没有什…

Java之数据类型与变量

目录 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 语法格式 3.3 整型变量 3.3.1 整型变量 3.3.2 长整型变量 3.3.3 短整型变量 3.3.4 字节型变量 3.4 浮点型变量 3.4.1 双精度浮点型 3.4.2 单精度浮点型 3.5 字符型变量 3.6 布尔型变量 3.7 类型转换 3.7…

IOC课程整理-18 Spring注解

1. Spring 注解驱动编程发展历程 2. Spring 核心注解场景分类 3. Spring 注解编程模型 https://github.com/spring-projects/spring-framework/wiki/Spring-Annotation-Programming-Model 4. Spring 元注解&#xff08;Meta-Annotations&#xff09; 元注解&#xff08;Meta-A…

UE4 体积云制作 学习笔记

首先Noise本来就是一张噪点图 云的扰动不能太大&#xff0c;将Scale调小&#xff0c;并将InputMin调整为0 形成这样一张扰动图 扰动需要根据材质在世界的位置进行调整&#xff0c;所以Position需要加上WorldPosition 材质在不同世界位置&#xff0c;噪点不同 除以一个数&#…

ETCD备份与恢复

文章目录 主要内容一.备份1.先安装etcd客户端代码如下&#xff08;示例&#xff09;: 2.备份成文件并查看代码如下&#xff08;示例&#xff09;: 3.解释 二.恢复1.先停止服务代码如下&#xff08;示例&#xff09;: 2.删除现有ETCD&#xff0c;并恢复数据代码如下&#xff08;…

前端 读取/导入 Excel文档

情况&#xff1a; 需要通过Excel表&#xff0c;将数据导入到数据库&#xff0c;但是后台人员出差了&#xff0c;我又只会PHP&#xff0c;没用过node&#xff0c;所以只能前端导入Excel文件&#xff0c;然后循环调用后台的单条添加接口了。 库&#xff1a; Excel.js&#xff08…

MySQL 约束条件,关键字练习,其他语句

创建表的完整语法 create table t1( id int, name varchar(43), age int ); create table 库名.表名( 字段名1 数据类型 约束条件 约束条件 约束条件 约束条件, 字段名2 数据类型 约束条件 约束条件 约束条件 约束条件, 字段名3 数据类型 约束条件 约束…

NPM【问题 01】npm i node-sass@4.14.1报错not found: python2及Cannot download问题处理

node-sass安装问题处理 1.问题2.处理2.1 方案一【我的环境失败】2.2 方案二【成功】2.3 方案三【成功】 1.问题 gyp verb which failed Error: not found: python2 # 1.添加Python27的安装路径到环境变量 gyp verb check python checking for Python executable "python…

Unity C#中LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查

LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查 介绍Lua表lua表初始化lua移除引用lua中向表中添加数据lua中表中移除数据lua表中连接数据lua表中数据排序获取lua表长度获取表中最大值 UnityC#中LuaTableUnityC#中LuaArrayTable、LuaDictTable、LuaDictTable<K,V>…

SpringCloud复习:(3)LoadBalancerInterceptor

使用Ribbon时&#xff0c;execute方法会由RibbonLoadBalancerClient类来实现 它会调用重载的execute方法 getLoadBalancer默认会返回ZoneAwareLoadBalancer&#xff08;基类是BaseLoadBalancer).此处调用的getServer方法就会根据负载均衡策略选择适当的服务器来为下一步的htt…

【Unity】RenderFeature应用(简单场景扫描效果)

【Unity】RenderFeature应用&#xff08;简单场景扫描效果&#xff09; RenderFeature 是一个用于渲染图形的概念&#xff0c;通常在图形引擎或游戏引擎中使用。它是一个模块化的组件&#xff0c;负责处理特定的渲染功能&#xff0c;例如阴影、光照、粒子效果等。 点击地面生成…

【网络】序列化反序列化

序列化反序列化 一、序列化反序列化1、概念2、序列化作用3、序列化框架的选择 二、Json1、介绍2、简单使用 一、序列化反序列化 1、概念 在前文《网络编程套接字》中&#xff0c;我们实现了服务器与客户端之间的字符串通信&#xff0c;这是非常简单的通信&#xff0c;在实际使…

p5.js 到底怎么设置背景图?

本文简介 点赞 关注 收藏 学会了 在 《p5.js 光速入门》 里我们学过加载图片元素&#xff0c;学过过背景色的用法&#xff0c;但当时没提到背景图要怎么使用。 本文就把背景图这部分内容补充完整&#xff0c;并且会提到在 p5.js 里使用背景图的一些注意点。 背景图的用法…