计算机网络
行业相关
技术相关
开发
- 前端
html
css
Javascript
相关框架
- 后端
php
java
python
- 全栈
- 其他开发
非开发
- 甲方
* 运维工程师
* 腾讯
* 美团
- 乙方
* 实施工程师
* 技术支持
* 华为
* 深信服
* 绿盟
* easystack
* 神州数码
* 华讯
非技术
- 管理岗
- 销售
- 文员
云计算开发工程师
Linux基础
企业服务
- 网站
- 数据库
- 缓存
- …
运维自动化
- 脚本
- 监控
- 自动化工具
- …
高级运维技能
- 版本控制
- 网络安全
- …
网络
数据网络
数据=信息,信息的传递组成了数据网络。
信息通过物理介质从一台设备传递到另外一台设备。
- 网线,铜丝,高低电平,只能传递两种状态,1 0
- 光纤,玻璃丝,有无光线,只能传递两种状态,1 0
数据如果想被传递,就必须转化为1 0 状态,也就是二进制。
文字
ascii 8bit(位)=1Byte(字符)
unicode 32bit=4Byte 万国码
utf-8 24bit=3Byte
GBK(GB2312) 16bit=2Byte
图像
位图: 使用像素点来保存一张图片 ,放大会失真
jpeg RGB 0-255
png RGBA (A代表透明度)
gif
bmp
...
矢量图: 使用数学公式,在坐标上画图,放大后不会失真
ai
esp
...
视频
mp4(普遍)
avi
rmvb(要有相应的版权才行,更加节省空间)
...
声音
采样率
将各种信息编码转换为二进制,然后通过物理介质交换,组成了数据通信网络的基础原理。
OSI七层模型
为了更加方便的规范网络的分工我们将网络通信的过程定为7个层次,每个层次都有独立,但不是完全独立的功能设计
应用层 L7*
给用户提供交互接口
表示层 L6
对数据进行压缩,解压缩,编码,解码,加密,解密
会话层 L5
管理会话
网页的会话现在已经使用session来保持了,当你登录成功网站的时候,网站服务器就会产生一个session代码发给你,之后你就可以用这个代码去证明自己是对的人。
上面三层被称为高层,现在由socket进行统一管理,开发人员和软件不需要区分的那么详细。
传输层 L4*
** 将数据进行分段重组,对数据的传输进行控制,对数据的缺失进行检查,对系统服务进行区分**
通过网络层和数据链路层,数据已经可以准确的到达目的地的电脑上了,然而一台计算机可以同时多个任务一起运行,可以理解为计算机可以提供多个不同的服务。
计算机通过端口号port来识别不同的服务,以及使用端口号来作为应用区分。
端口号有大家约定好的端口号功能
访问一个地址的时候,一般会写成协议名://地址
windows系统会在C:/Windows/System32/drivers/etc/service文件中查找这个协议,然后找到对应的端口号
传输层会将数据进行分段,分段的好处有
- 可以共享带宽
- 当传输中断的时候可以做到断点重传
传输层在设计的时候就需要对数据进行分段和重组,为了保障数据的完整性,还需要对重组的数据进行验证。
传输层用于规范数据的传输方式,提供端口号用于区分不同的应用。
如果遇到4层的防火墙,或者相关的应用,就说明可以对应用进行识别。
分段重组
为了更好的共享和管理网络,我们会对数据进行分段,并且在接受到之后进行重组
在网卡上我们规定了最大传输单元,正常情况下是1500字节
定义数据的传输方式
TCP
可靠的数据传输,所有重要的数据都必须得到对方的确认
三次握手
https://iproute.cn/2020/03/06/TCP-%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA/ 四次挥手
确认号与序列号
用于保障数据的可靠传输
四次挥手
滑动窗口
UDP
尽力而为的数据传输,所有的数据都不需要被对方确认
端口号
一个IP地址有65536个端口号,每个端口号都允许运行一个服务
在电脑上一个进程可以占用一个或者多个端口号,当有数据到达对应端口号的时候,就可以获得对应进程的处理
常用的端口号:C:\Windows\System32\drivers\etc\service
http: 80/tcp
https: 443/tcp/udp
ssh: 22/tcp
telnet: 23/tcp
ftp: 20/tcp 21/tcp
dns: 53/tcp/udp
rdp: 3389/tcp/udp
vnc: 5900/tcp
网络层 L3*
网络层是用于连接各个不同局域网的
MAC地址是网卡出厂自带的,但是具体使用的位置未知。
逻辑地址IP,Internet Protocol,用于标识设备在网络上的唯一位置
在实际数据转发的过程中,可以理解为邮政编码,网络上的路由器设备会根据IP地址来转发,最终将数据转发到目的设备所在的局域网,转发到局域网之后的操作就是由局域网内的设备来操作。
路由器连接多个局域网,然后根据每个局域网标识的IP地址段来转发数据。通过IP地址可以识别出不同的局域网,并且使用路由器设备进行数据的远距离转发
IP地址
由32位二进制组成,是一个逻辑地址,和MAC不一样,MAC地址是跟着设备走的,类似于你的名字
IP地址是根据网络位置不一样而变化的
MAC地址相当于你的姓名,IP地址相当于你的位置,只有在IP地址所在的局域网才可以找到你的MAC地址
IP地址的组成
网络位
用于标识IP地址所属的局域网
如果主机的IP地址网络位是一样的,那就表示这些主机是处于同一个局域网的
网络位由子网掩码来标识长度,子网掩码是32位二进制,可以与IP地址一一对应
子网掩码位为1表示IP地址对应的位就是网络位
主机位
用于在同一个网络中区分不同网络节点的
主机位全为0,表示这个地址是网段号
主机位全为1,表示这个地址是广播地址
数据链路层 L2*
负责将物理层的二进制进行成帧
一般认为物理层是不可靠的,会由于外接因素丢数据。
数据链路层会通过CRC循环冗余校验对所有的二进制进行计算,并且和数据帧尾部的FCS(帧尾校验序列)进行比对。
负责校验数据帧中的目的地址是不是本机,如果不是,就丢弃。
数据链路层将目的地址+源地址+类型+数据+FCS,一起生成二进制,传递给物理层
或者将物理层的二进制校验结束,然后把数据提取出来,交给网络层
类型字段用于告知计算机上层应用应该如何理解数据,也即用来告诉计算机上层的二进制使用什么标准去读取
MAC地址(media access control),是网卡上厂商设置的,并且是全球唯一的*,由48位二进制组成,按照8位一组,用16进制表示。
在windows上按下"田+R",输入"ncpa.cpl",然后双击WLAN,查看详细信息,里面有物理地址,就是MAC地址
MAC地址
48位二进制,前24位是组织唯一标识符,是由IEEE规定和颁发
后24位由厂商根据生产和销售批次自定义
交换机构成局域网,局域网内的设备可以通过mac地址直接通信。
- 可靠性
通过CRC计算出校验值,接收方去比对校验值来排除物理层数据损坏的问题,如果发现数据损坏,就直接丢弃。 - 可达性
必须标注出来源和目的的MAC地址,用于数据可达。
物理层 L1
定义数据传输介质的电气标准
弱电工程师 综合布线
线的质量和美观
网线 传递高低电平 二进制
五类 短距离千兆 1G
超五类 2.5G
六类 短距离万兆 10G
超六类
建议不超过100M
光纤 传递光信号 二进制
多模 超过40KM 40G
单模 超过100KM 100G
接口
电口
RJ45
RJ11
BNC
光口
LC
SC
光模块
SPF
QSPF
补充
DoD模型
DoD模型是美国国防部定义的,可以看做精简版的OSI模型
TCP
tcp是传输层为了保障数据的可靠性而设计的协议,这个协议中包含通信过程和数据的格式这两种标准
三次握手
通过三次握手,可以让双方都确认到对方双向连通。
主机A起始产生随机序列号作为初始值,向主机B发起同步请求
主机B收到主机A的同步请求之后也产生随机初始值作为序列号,并且将主机A的序列号+1作为自己的确认号回复给对方
主机A收到主机B的请求之后,将对方的确认号作为自己的序列号,对方的序列号+1作为自己的确认号回复给对方。
序列号与确认号
序列号和确认号除了保障三次握手以外,最主要的功能就是保障数据的完整性,数据链路层的帧尾校验序列可以保障每一个二进制都是对的,但是却没法保障收到的数据总数是对的。
主机B收到主机A的数据之后,会将A的序列号+收到的数据字节数作为ACK回复给主机B
主机A以此来判断主机B是不是接受完整的数据
四次挥手
四次挥手需要保障双方都已经发送完毕
TCP有限状态机
TCP滑动窗口
TCP/IP详解有详细的内容,如果以后打算做网络底层开发建议看
UDP
发送数据的时候不需要对方确认,也不知道对方是否正确获得消息。
IP
IP地址是由网络位和主机位组成的,网络位相当于手机号码的前7位决定你的运营商和归属地,主机位用来区分在同一个运营商套餐归属地下的不同机主。
IP地址的网络位一样,说明在同一个局域网下,主机位用于标识在这个局域网下的主机。
IP是由32位二进制组成,为了方便记忆,每8位一个段,用.分开,将二进制转为十进制来便于使用。
网络位
早期的时候,人们想了一个馊主意来快速识别是否在一个局域网,那就是给IP地址分类,不同的类别网络位是固定的。
A 1.0.0.0~126.255.255.255 网络位就是前8位,记作/8
B 128.0.0.0~191.255.255.255 网络位就是前16位,记作/16
C 192.0.0.0~223.255.255.255 网络位就是前24位,记作/24
127开头的所有合法地址都被保留用作本地测试
按照类别来判断网络位的行为被称为有类地址划分,这么做的缺点很明显,如果你公司被分配到一个A类的IP地址,那么你公司的这个局域网最多允许2^24个主机,就是一千六百多万台,而这么多主机在一个局域网是无法实现的。而你需要为这么多IP付钱。
子网掩码
后来人们想要自由的划分网络位的长度,但是怕别人不知道是多少位,所以就在IP地址后面加上子网掩码用于标识,子网掩码有两种标识方式:
- 子网掩码
32位二进制和IP地址长度一样,就可以一一对应。
子网掩码位是1,表示对应IP位是网络位。
00001010 00000011 00000000 01011000
这个是IP地址10.3.0.88
11111111 11111111 11111111 11111100
这个是子网掩码255.255.255.252
- 前缀长度
直接把网络位长度标识在IP地址后面10.3.0.88/30
主机位
主机位全为0,保留下来,用于标识整个局域网,称为网段,比如192.168.1.0/24可以表示你家的所有主机。
主机位全为1,保留下来,用于在本局域网中发送广播,比如192.168.1.255/24这个地址可以向整个局域网所有节点发送
ARP
Address Resolution Protocol,地址解析协议,知道对方的IP地址,不知道对方的MAC地址,就会发送一个广播用于查询,当查询到了之后,就会记录在arp表格中下次使用。