Linux网络编程01

news2024/11/27 14:51:09

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

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

常见的协议
应用层(公开协议)
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)异步发送提高发送数据包的效率,同时目标主机返回的确认信息也要携带序列号信息
在这里插入图片描述

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

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

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

相关文章

2024年最新水果音乐制作软件FL Studio21需要多少钱呢?

水果,全称Fruity Loop Studio,简称FL Studio。是一款全能的音乐制作软件,经过二十多年的演化更迭,其各项功能非常的先进。其开创性的Pat\song模式,也为初学者的学习提供了便利。那么水果音乐制作软件FL Studio21需要多…

Proteus仿真--8位数码管滚动显示单个数字(仿真文件+程序)

本文主要介绍基于51单片机的8位数码管滚动显示单个数字(完整仿真源文件及代码见文末链接) 仿真运行视频 Proteus仿真--8位数码管滚动显示单个数字(仿真文件程序) 附完整Proteus仿真资料代码资料 百度网盘链接: https://pan.baidu…

基于Matlab违章车辆车牌识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、基于Matlab违章车辆车牌识别系统四. 总结 一项目简介 首先,车牌识别技术在提高高速公路收费站效率方面起着至关重要的作用。由于高…

03、SpringCloud -- 动态倒计时 及 当前用户的获取(用户未登录提示其登录)

目录 动态倒计时需求思路代码效果优化获取当前登录用户思路代码前端后端controllerservice接口impl实现效果问题修改动态倒计时 需求 根据不同时间展示不同状态,动态显示时间,如原型图: 思

【206.反转链表】

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

[javaweb]——HTTP请求与响应协议,常见响应状态码(如:404)

🌈键盘敲烂,年薪30万🌈 目录 HTTP概述 📕概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 📕特点: 📕插播…

故障诊断模型 | Maltab实现LSTM长短期记忆神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现LSTM长短期记忆神经网络故障诊断 模型描述 长短记忆神经网络——通常称作LSTM,是一种特殊的RNN,能够学习长的依赖关系。 他们由Hochreiter&Schmidhuber引入,并被许多人进行了…

【k8s】资源管理命令-陈述式

一、资源管理介绍 1、资源管理概念 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。 //kubernetes的本质就是一个集群系统,用户可以在集群中部署各种服务,起始就是在kubernetes集群中运行一个个…

查询计算机GUID码

如何查询计算机GUID码(全局唯一标识符) 1.快键键WINR进入注册表 2.找到\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography路径 3.双击MachineGuid项即可显示计算机GUID码

Latex报错 “Paragraph ended before \Gin@iii was complete“

大家看看自己的模版的前面 加载的包 里面是不是有个 \usepackage{graphics} 问题就在这里,我们需要把它改成\usepackage{graphicx}

XHSELL连接虚拟机的常见问题(持续更新)

问题一:找不到匹配的host key算法。 检查XSHELL的版本,如果是旧版本,就有可能不支持新的算法,解决方法就是安装最新版本的XSHELL。 注:本人使用xshell5连接ubuntu22.04.3,出现了上述问题,将xsh…

故障诊断入门书籍资料免费领取

前言 本期分享免费提供9本故障诊断领域相关的书籍资料,可自行下载 一、主要内容 二、书籍获取

H5游戏源码分享-手机捉鬼游戏

H5游戏源码分享-手机捉鬼游戏 一款考验手速的游戏 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>手机捉鬼 微信HTML5在线朋友圈游戏</title><meta name&…

openWRT SFTP 实现远程文件安全传输

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f516;系列专栏&#xff1a; C语言、Linux、 Cpolar ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我…

“体检报告健康解读技术传承人”授牌仪式圆满结束

2023年10月&#xff0c;全国卫生健康技术推广传承项目办公室将体检报告健康解读技术传承人证书授予中山大学麻醉学硕士、副主任医师、医说友道创始人许才燕医生。 10月13日&#xff0c;许才燕医生团队在广东佛山举行“解读体检报告 重构健康生态”体检报告健康解读技术传承人授…

launch4j jar转exe使用笔记

一、下载 网盘下载&#xff1a;https://pan.baidu.com/s/1b8g8qwePmufgm4rKao4icw?pwdxf28 官网下载&#xff1a;https://sourceforge.net/projects/launch4j/files/latest/download &#xff08;注&#xff1a;点击链接会自动下载&#xff09; jre下载&#xff1a;https://p…

C++ priority_queue 的使用

1. priority_queue 的介绍 下面是 priority_queue 的介绍&#xff0c;来自于&#xff1a;&#x1f3f9;priority_queue - C Reference (cplusplus.com) 的中文翻译&#xff0c;您可以尝试看看。 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一…

H5游戏分享-烟花效果

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

WIN11新版画图问题解决

1 白色背景被连同删除的问题 解决方法&#xff1a;加层 将层调整为新建的层&#xff0c;在这个层下画图就行。 2 QQ截图无法直接放在画图上的问题 使用QQ截图的时候&#xff1a; 解决方法&#xff1a;使用windows自带的截图工具 步骤&#xff1a; 1. 使用快捷键winshifts 2.…

矢量图形编辑软件illustrator 2023 mac中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软…