当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/108215.html

相关文章:

  • 封装el-menu
  • Rust 所有权机制
  • 鸿蒙自定义UI组件导出使用
  • 28.医院管理系统(基于springboot和vue)
  • 实时渲染技术如何助力3D虚拟展厅?
  • 人脸识别技术:从算法到深度学习的全面解析
  • npm更新包时This operation requires a one-time password.
  • 数学家陶哲轩在形式证明帮助下发现论文中错误
  • moviepy处理手机端图片旋转问题
  • JAVA同城服务智慧养老小程序怎么开发?
  • 企业微信接入芋道SpringBoot项目
  • sql--索引使用
  • sharepoint2016-2019升级到sharepoint订阅版
  • python DevOps
  • uniapp实现瀑布流
  • Android问题笔记四十二:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法
  • 一个Binder的前生今世 (二):Binder进程和线程的创建
  • 爬取抖音用户的个人基本信息
  • Latex报错 “Paragraph ended before \Gin@iii was complete“
  • 万字解析设计模式之工厂方法模式与简单工厂模式
  • 竞赛选题 深度学习图像修复算法 - opencv python 机器视觉
  • 4.5 final修饰符
  • hive使用中的参数优化与问题排查
  • Kafka KRaft模式探索
  • 【unity小技巧】unity排序问题的探究
  • 如何使用 Rask AI 进行视频本地化