osi七层协议
互联网的本本质就是一系列的网络协议
osi七层协议

也有称为tcp/ip五层或四层协议
五层是将会话层和表示层,应用层同归到应用层
每一层都有不同的设备进行工作

每一层都有着不同的协议

用户感知到的是最上一层的应用层,对于每一层来说,上层都是依赖于下层
物理层:基于电器之间的电信号,高电压为1,低电压为0
数据链路层:将得到的电信号进行分组
以太网协议:ethernet规定:一组电信号构成一个数据包,即帧
每一个数据帧包含包头head和数据data两部分
head:固定18个字节,
发送者/源地址:6字节
接收者/目标地址:6字节
数据类型:6字节
data:最短46字节,最长1500字节
head + data:最短64字节,最长1518字节,超过长度分片发送
Mac地址:每块网卡出厂是烧制的唯一Mac地址,有48位二进制组成,而通常是以12位十六进制表示,并用:分隔成6部分,如 00:01:02:0a:82:cf
广播:拥有Mac地址后,同一网络之间的设备通过广播的形式通信
网络层:使用一套地址用来区分不同的区域网
IP协议:用来规定网络地址的协议,称之为IP地址
采用多为ipv4版本,由32位二进制表示,通常写成4段十进制,如 192.168.1.1(每个十进制由8个二进制表示)
范围为:0.0.0.0 - 255.255.255.255
ipv6版本,是由128位二进制组成,分成8段,每段包含4个十六进制数(每个十六进制是由4个二进制表示),以:隔开
如 ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
ipv6形式的地址前导的0是可以省略的,如 2001:0DB8:0000:0023:0008:0800:200C:417A → 2001:DB8:0:23:8:800:200C:417A
一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次
如 FF01:0:0:0:0:0:0:1101 → FF01::1101
ipv6也可以兼容ipv4,如 ::ffff:192.168.1.1 就是表示 192.168.1.1
IP地址分为两部分:网络部分和主机部分,注意IP地址只是标识了IP地址的种类,并不能从它的两部分判断其处于哪个子网内
子网掩码:标识子网特征的一个参数,形式等同IP地址,32位二进制,网络部分全为1,主机部分全为0,
如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0
IP地址分类:分成5类:A,B,C,D,E
公有IP
A类:范围:1.0.0.0 - 126.255.255.255/8(子网掩码是8,即255.0.0.0,表示前8位二进制是网络地址)
B类:范围:128.0.0.0 - 191.255.255.255.0/16(子网掩码是16,即255.255.0.0,表示前16位二进制是网络地址)
C类:范围:192.0.0.0 - 223.255.255.255/24(子网掩码是24,即255.255.255.0,表示前24位二进制是网络地址)
D类:范围:224.0.0.0~239.255.255.254不区分网络地址和主机地址,
D类地址是一种组播地址,D类地址的第一个字节以1110开始。目前D类地址被用在多点广播(Multicast)中
E类:范围:240.0.0.0~255.255.255.255,不区分网络地址和主机地址,E类地址是保留地址用于以后使用

私有IP
只能在局域网中使用,不能在Internet上使用
A类:10.0.0.0 - 10.255.255.255 表示 1 个A类IP网络地址
B类:172.16.0.0 - 172.31.255.255 表示 16个 B类网络地址(16-31)
C类:192.168.0.0 - 192.168.255.255 表示 256 个C类网络地址(0-255)
特殊IP
0.0.0.0不是一个真正的IP地址,而是一切不确定的网络地址的集合,表示未知网络地址
255.255.255:限制性广播地址,用于本网段内的广播地址
127.0.0.1 - 127.255.255.255:本机回环地址,用于测试,
判断是否同一子网的计算方式:知道子网掩码,就可以计算两个IP地址是否处于同一子网内,通过and位与方式计算,位与运算:1与1为1,1与0为0,0与0为0
例:
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
这两个IP地址通过与子网掩码进行位与运算,得到的结果相同,则这两个IP地址处于相同的子网
IP地址的作用:为计算机分配地址,并确定哪些地址处于同一子网
IP数据包:也分为head和data两部分,整个IP数据包直接放在以太网协议的data部分
head长度:20 — 60字节
data长度:最长为65515字节
而以太网协议的data部分最长只有1500字节,如果IP数据包超过这个长度,就要分片发送
arp协议:通过广播的方式获取对方Mac地址
工作方式,每台主机的IP地址都是已知的
先判断自己的IP地址和目标的IP地址是否处于同一子网,是则直接向目标IP发数据,不是则向网关IP发数据
发送方式是:源Mac -- 目标Mac -- 源IP -- 目标IP -- 数据
目标Mac用FF:FF:FF:FF:FF:FF代替
这个包会在发送端的网内以广播的形式传播,所有主机接收后拆包,发现是自己的IP则返回自己的Mac给发送端
传输层:建立端口与端口之间的通讯,端口的范围:0-65535,其中0-1023都是系统占用的端口号
TCP协议:可靠传输,包放在IP包的数据部分,tcp数据包没有长度限制,但为了保证数据传输的效率,一般不超过IP数据包长度
udp协议:不可靠传输,包放在IP包数据部分,报头占用8个字节,最长65535字节,正好放在一个IP包内
tcp/IP协议中,tcp的三次握手和四次挥手

第一次握手:客户端尝试连接服务端,客户端发送一个tcp的SYN标志位置为1的包,以及初始化序号(Sequence Number)为x

第二次握手:服务端接收SYN包,并返回ack包确认应答,同时向客户端发送一个SYN包,并初始化(Sequence Number)为y,
SYN标志位和ACK标志位均为1的同时将确认序号(Acknowledgement Number)加1,即x+1

第三次握手:客户端发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,即y+1,放在确定字段(ack)中发送给对方.并且在数据段放写x+1

SYN攻击:在三次握手过程中,服务端发送SYN和ACK包之后,状态就变成了SYN_RECV,在没有接收到客户端发回的确认ack包,是处于半连接状态
而SYN攻击就是虚拟出大量不存在的IP地址,向服务端发送SYN包,服务器收到包返回确认包,并等待客户端确认,而客户端是不存在的,服务端就会不停的发直至超时,这样大量的资源就会被占用,造成网络拥堵

tcp协议解除连接需要发送4个包,任何一方都可以发起结束,在socket编程中,任何一方执行close()操作都会发生挥手
补充:
为什么连接是三次握手,结束时四次挥手
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。
但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;
但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,
所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
应用层:用户使用的应用程序
经过osi七层对数据进行封包和解包,发送数据是封包过程,接收数据是解包过程

socket:应用层和传输层之间的一个抽象层,它把一系列的tcp/ip协议封装起来,并提供一组接口以供调用

osi七层模型图解


浙公网安备 33010602011771号