1.OSI七层网络参考模型
- ISO于1984年制定
物理层: 建立断开物理连接
数据链路层:物理寻址,差错校验
网络层:逻辑寻址
传输层:建立端口到端口的连接
会话层:会话管理
表示层:数据展示
应用层:用户接口
- tcp/ip 协议簇(实际应用五层网络模型)
/ | 常见协议 | 数据格式 | 设备 |
物理层 | 比特流(二进制流) | 网卡 | |
数据链路层 | 数据帧(mac) | 交换机 | |
网络层 | IP/ICMP/ARP... | 数据包(IP) | 路由器 |
传输层 | TCP/UDP... | 数据段(port) | 防火墙 |
应用层 | HTTP/FTP/DNS... | 数据 | 计算机 |
2. 数制转换
2.1其他进制转十进制,位权展开法
设进制为a, 数值为xyz,转换函数记为f(xyz),则数字个数为3,有如下公式
f(xyz) = x*a^(3-1) + y*a^(3-2) + z*a^(3-3)
= x*a^2 + y*a^1 + z
套用上述公司做如下示例:
11111
- 十进制 -> 十进制:
11111 = 1*10^4 + 1*10^3 + 1*10^2 + 1*10^1 + 1 = 10000 + 1000 + 100 + 10 + 1 = 11111
- 二进制 -> 十进制:
11111 = 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1 = 16 + 8 + 4 + 2 + 1 = 31
- 八进制 -> 十进制:
11111 = 1*8^4 + 1*8^3 + 1*8^2 + 1*8^1 + 1 = 4096 + 512 + 64 + 8 + 1 = 4681
十六进制... 略
2.2 十进制转其他进制,短除倒叙取余
该方法没有推到出公式,描述一下计算方式如下:
设进制为a,数值为xyz,使用xyz递归除以a,直到余数除不尽a为止,所有的余数放到一个集合中,然后倒叙拼接余数。
100
- 十进制 -> 二进制
100 / 2 -> 商:50 余:0
50 / 2 -> 商:25 余:0
25 / 2 -> 商:12 余:1
12 / 2 -> 商:6 余:0
6 / 2 -> 商:3 余:0
3 / 2 -> 商:1 余:1
1 / 2 -> 商:0 余:1
倒叙拼接:1100100
- 十进制 -> 八进制
100 / 8 -> 商:12 余:4
12 / 8 -> 商:1 余:4
1 / 8 -> 商:0 余:1
倒叙拼接:144
十进制 -> 十六进制
100 / 16 -> 商:6 余:4
6 / 16 -> 商:0 余:6
倒叙拼接:64
3. IP与子网掩码
3.1IP地址介绍
IP地址分为IPV4和IPV6两种
IPV4由32位二进制组成,以点分形式显示为4组十进制数字(0-255)
- IPV4分为A、B、C、D、E五类地址
A类 范围:1.0.0.0-126.255.255.255 ,网络位为前8位,主机位为后24位(2进制),范围大
B类 范围:128.0.0.0-191.255.255.255,网络位为前16位,主机位为后16位(2进制)
C类 范围:192.0.0.0-223.255.255.255,网络位为前24位,主机位为后8位(2进制),范围小
D类 范围:224.0.0.0-239.255.255.255,组播地址
E类 范围:240.0.0.0-254.255.255.255,科研保留
- IPV4私有地址
私有地址包括3组,私有地址不能在Internet上使用
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255
- IPV4特殊地址
255、127、0为特殊地址
3.2子网掩码
- 子网掩码是用来计算IP所属网段的,同一网段内的设备才可以互相通信。
- 子网掩码由32位二进制组成,网络部分全为1,主机部分全为0。
- 因此子网掩码对应只有255和0两种取值。
- 子网掩码与IP地址进行二进制逻辑与计算可得到对应的网段。
例如,IPV4:192.168.2.101 子网掩码:255.255.255.0
- 二进制逻辑与运算口诀:11为1,否则为0.
11000000 10101000 00000010 01100101 192.168.2.101 IPV4
11111111 11111111 11111111 00000000 255.255.255.0 子网掩码
11000000 10101000 00000010 00000000 192.168.2.0 计算得网段
- 计算器计算如下:
192 and 255 -> 192
168 and 255 -> 168
2 and 255 -> 2
101 and 0 -> 0
以上为计算器算得
......
计算得出当前IP192.168.2.101对应网段为:192.168.2.0
192为C类地址,因此主机位为后8位,所以该网段192.168.2.0可用IP地址为192.168.2.1-254
4.网络通信设备介绍
4.1网络传输介质
- 网络传输信号:
数字信号,不连续的,计算机内部识别的是这种信号,类似开、关,开代表1,关代表0
模拟信号,连续的,电话线传输的就是这种信号。
- 有线传输介质:
双绞线,传播速率 2.3*10^8m/s,包含568A 568B两种
直通线,不同设备连接
交叉线,相同设备连接
全反线,配置线连接
光纤,传播速率 2*10^8m/s
通过以上两种有线介质的速率相比较,其实光纤的传播速率要比双绞线还低一些,但是光纤上网快这是常识,网上科普一番,加上自己的思考,大致得出如下结论:
光纤传播的光信号频率远高于电波,频率越高携带的有效载荷就越多,因此携带的信息也就越多,
传播速度都差不多是每秒20万公里,谁携带的信息越多,肯定就越快。
以上结论基于一个常识:
电、可见光、紫外线、红外线等等都属于电磁波。
c=λ*f c为光速即电磁波在真空中的传播速度,λ为波长,f为频率。那么,c是固定的,f和λ的值就互有高低。
参考下图可以有个清晰的理解。
- 无线介质:
无线介质主要指电磁波,包含无线电、红外线、紫外线、可见光、激光等等
蓝牙、wifi、GPS、卫星电话等都属于无线介质网络传输范畴。
4.2网卡、中继器
mac地址,由48位二进制组成,前24位为厂商标识,后24位为厂商内部编号,显示为12位16进制,两两以-分显示,例如:61-3E-69-FC-4D-E2
dos查看mac地址命令:ipconfig/all |findstr "物理地址"
中继器用于放大网络信号延长传输距离
4.3 交换机
- 数据帧格式(以太网帧):
目的mac 源mac 类型 数据 帧校验序列
6byte 6byte 2byte 46-1500byte 4byte
类型:指上层网络协议,例如IP协议
最小的数据帧大小=6+6+2+4+46=64byte
- 交换机
交换机主要使用于企业中局域网内网络通信
交换机属于七层网络模型中数据链路层设备
交换机识别mac地址来进行数据转发
交换机可以分割冲突域实现全双工通信
1.交换机工作原理:
收到来自源主机的数据,存储源主机mac
交换机查询mac列表,未知目标主机
广播到所有主机 (广播)
目标主机收到数据后响应交换机,存储目标主机mac
交换机收到目标主机的响应转发给源主机 (单播)
源主机再次发送数据到交换机
交换机查询mac列表,已知目标主机mac
交换机转发数据给目标主机(单播)
目标主机响应交换机
交换机转发目标主机的响应给源主机
...
交换机mac地址表的过期时间为默认300秒
2.单、双工:
单工:指的是数据传输方向为单向的,只能发,或只能收 (单信道)
半双工:同一时刻数据传输方向为单向,但是不同时刻可以双向传输 (单信道)
全双工:数据传输方向为双向,能发能收 (双信道)
3.冲突域
当多个主机通过一个接口与交换机进行数据交互时,会产生冲突,导致通信效率降低。
交换机内部通过矩阵结构连接各个接口以降低冲突的可能,各个接口之间都使用独立的线路通信,参考下图理解:
4.广播域
交换机只分割冲突,所有端口都属于同一个广播域,所以任何一个接口广播,其他接口都可以收到数据。
5.交换机相关操作命令:(略)
ensp华为交换机模拟器
5.IP协议
-
IP协议报文格式
数据链路层的格式:目的mac、源mac、协议类型
以下使用wireshark网络抓包工具抓取的一个IP报文来解释说明
version[版本]:4 #IP协议包括IPV4或IPV6,占用4bit
Header length[首部长度]:20 #表示当前IP报文首部占用字节数。--占用4bit
Differentiated services feild[优先级与服务类型](区分服务字段):#用于区分数据的优先级,例如图片、视频、语音,字符串等其中语音数据的优先级最高。--占用8bit
Total length[总长度]:60 #当前IP数据包总长度占用60字节。--占用16bit
Identification[标识]:0x3970(14704) #用于标记当前包在一份完整数据中的序号。--占用16bit
Flags[分段标志]:0x02 (Don`t Fragment) #由于带宽的不同,数据包可能需要分片,该字段表示当前数据包是否需要分片。--占用3bit
Fragment offset[分段偏移]:0 #如果需要分片,该字段表示分片的个数。--占用13bit
Time to live [TTL]:128 #当前IP数据包在网络中每经过一个路由器-1,直到为0则被丢弃,--占用8bit
Protocol[协议]:ICMP (1) #表示当前数据包交给的上层对应的协议号,1表示ICMP。ICMP是比较特殊的一种网络层传输协议,它配合着IP数据报的提交,ICMP是封装在IP数据报中进行发送的,只是看起来有点类似TCP传输层的协议 --占用8bit
Header cheksum[首部校验和]:0x8B08 #指当前数据包校验结果,--占用16bit
Source[源地址]:192.168.2.101 # --占用32bit
Destination[目的地址]:192.168.2.102 # --占用32bit
##以上为IP报文首部,共占用160bit=20byte
可选项:#占用0-40byte, 通常为空,因此IP报文头部通常占用20byte
数据: #数据包
-
常用网络抓包工具
tcpdump, linux系统网络抓包工具,sendip、tcpreply为发包工具
wireshark
科来网络分析系统
6.TCP/UDP协议
6.1tcp协议概述
tcp协议为OSI七层模型中传输层的协议
tcp协议在java编程语言中没有对应实现,java编程语言中通过socket封装了C语言库的socket,所以java的Socket其实是在调用C语言的实现,由于不熟悉C语言,目前还不清楚tcp具体的实现是在C层面还是汇编层面?知道的大神评论区科普一下。
java当中的java.net.SocketImpl即是基于tcp协议,java.net.DatagramSocket基于udp协议。
6.2tcp数据报文
tcp报文在IP报文首部的后面
以下使用wireshark网络抓包工具抓取的一个tcp报文来解释说明:
Source Port[源端口]:telnet[23] #占用16bit
Destination Port[目标端口]:49296 #占用16bit
Sequence number[序列号]:19 #占用32bit
Next Sequence number[下一个序列号]:25 #占用32bit
Acknowledgement number[确认序列号]:10 #占用32bit
Header Length[tcp报文首部长度]:20bytes #占用4bit
Flags标志位,包含以下子字段起到控制阀的作用:#占用
Acknowledgement:#确认序列号开关,回复另一端时的确认位,值为1
SYN:1 #请求连接开关,发起连接请求时该值为1
FIN:#请求断开开关,发起断开请求时该值为1
PUSH:#类似紧急指针开关,开启时数据不缓存直接进入进程,值为1
Reset:#连接建立完成的开关,值为1
Urgent:#紧急指针开关
Reserverd: Not Set
Nonce:Not Set
cwr:Not Set
Window size[窗口大小]:8192 #用于说明可接收数据的字节大小,不同接口之间带宽不同可能接收的数据大小不同 --占用16bit
Checksum[校验和]:0x8ab7 [validation disabled] #校验和 --占用16bit
保留位:#默认为空,抓包不显示 --占用6bit
6.3tcp可靠性原理
下图抓包素材来自计算机网络通信原理教程,仅供个人学习使用
- 三次握手
第一次握手,client发送syn,seq(client)到server,请求建立连接
第二次握手,server回复syn、ack,ack=seq(client)+1,seq(server),允许建立连接
第三次握手,client回复server,ack = seq(server) + 1,seq = seq(client)+1,建立连接
开始传输数据
......
以下模拟tcp三次握手:
FLAGS[SYN=1],seq=x
client ----------------------------------------------------------------------------> server
FLAGS[SYN=1,ack=1],seq=y,ack=x+1
client <---------------------------------------------------------------------------- server
FLAGS[ack=1],seq=x+1,ack=y+1
client ----------------------------------------------------------------------------> server
- 四次挥手
断开连接可由客户端与服务端任意一方发起请求
第一次挥手,client发送fin、ack,seq(client),请求断开连接
第二次挥手,server回复fin、ack,ack=seq(client)+1,seq(server),确认断开
第三次挥手,server发送fin、ack,ack=seq(client)+1,seq(server),请求断开
第四次挥手,client回复fin、ack,seq=seq(client)+1,ack=seq(server)+1,确认断开
以下模拟tcp三次握手:
FLAGS[FIN=1,ack=1],seq=x
client ----------------------------------------------------------------------------> server
FLAGS[ack=1],seq=y,ack=x+1
client <---------------------------------------------------------------------------- server
FLAGS[FIN=1,ack=1],seq=y,ack=x+1
client <---------------------------------------------------------------------------- server
FLAGS[ack=1],seq=x+1,ack=y+1
client ----------------------------------------------------------------------------> server
7.dns
dns即域名解析,域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成,之所以使用域名替换IP是为了方便人的记忆。
IPV4 域名解析根服务器13台,其中主根1台在美国,辅根12台,9台在美国,日本、英国、瑞典各1台。
IPV6 域名解析根服务器25台
dns域名空间结构:根域、顶级域、二级域
根域:"."
顶级域:".com"、".org"、".net"、".edu"、".gov"、".mail"、等等
.com:商业机构
.org:非盈利非政府组织机构
.gov:政府组织机构
.net:网络机构
.edu:教育机构
.mail:邮箱
.cn:中国
.us:美国
.jp:日本
.uk:英国
.int:国际组织
...
二级域:
...
域名长度限制255个字符
dns解析原理:
- 递归查询:主机向本地dns服务器查询,由本地dns向上级dns查询上级dns再向上级dns查询的过程,下图为递归查询。
- 迭代查询:主机向本地dns服务器查询,由本地dns多次向其他dns查询的过程,下图为迭代查询。
8.VLAN/TRUNK
9.HTTP协议
http(hyper text transfer protocol)超文本传输协议。
- http请求报文格式如下:
请求行:HttpMethod、uri、http协议版本
请求头
空行
请求数据
- http响应报文格式如下:
状态行:http协议版本、http状态码、OK
响应头:
空行
响应正文
- http常见状态码:
200响应成功
302重定向
400请求语法错误 401未认证授权 402预留 403认证成功但权限不足 404找不到对应资源 407需要代理授权 408超时
500服务端处理请求错误 504网关请求远端服务超时 505不支持的http协议版本
- http常见请求头
Accept:可接受的响应MEME类型,示例:application/json
Authorization:请求时填的认证信息,示例:Basic d2ViQXBwOjEyMzQ1Ng==
Cookie:由上一次请求服务端Set-Cookie设置的cookie,示例access_token=xxx;refrush_token=xx;
Content-Length:请求体长度,8进制
Content-Type:请求体MEME类型,示例:application/json
user-agent:浏览器标识符,示例:Mozilla/5.0 (Windows NT 10.0; WOW64) ... Chrome/70.0.3538.67 Safari/537.36
origin:发起一个针对跨域资源共享的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin的消息头,表示访问控制所允许的来源),该请求头一般由浏览器添加。
- http常见响应头:
Access-Control-Allow-Origin:指定哪些网站可以跨域资源共享,*表示所有,示例:
Allow:对于特定资源允许的HttpMethod,示例:GET
Cache-Control:从服务器端到客户端之间的所有缓存机制,是否允许缓存,及缓存时间,示例:no-cache
Content-Encoding:响应资源所使用的编码类型,示例:utf-8
Content-Language:响应内容使用的语言,示例:zh-cn
Content-Type:响应体的MEME类型
Content-Length:响应体长度
Expires:指定一个过期时间,超过则认为响应过期
Refresh:默认5秒后,重定向到该响应头指定的url,示例:5; url=http://itbilu.com
Set-Cookie:设置HTTP CookieStatus:http状态码,示例:200 OK
- 常见网络攻击手段:
- XSS 攻击[跨站脚本攻击],攻击者在 Web 页面中插入恶意脚本,当用户浏览页面时,促使脚本执行,从而达到攻击目的
- Dos攻击[分布式拒绝服务],发送大量请求,使服务器瘫痪
- CSRF攻击[跨站请求伪造],用户本地存储cookie,攻击者利用用户的cookie进行认证,然后伪造用户发出请求