网络协议原理

网络结构

高并发、负载均衡、高可用

在这里插入图片描述
OSI七层模型:应用层、表示层、会话层、传输控制层、网络层、链路层、物理层
TCP/IP四层模型:应用层、传输控制层、网络层、链路层、物理层

在这里插入图片描述

应用层

只有应用层是用户层
对应HTTP协议、SSH协议
访问baidu

cd /proc/$$/fd //$$为进程ID号;fd是文件描述符
pwd
exec 8<> /dev/tcp/www.baidu.com/80    
echo -e 'GET / HTTP/1.0\n' >& 8
cat 0<& 8  //读取
第一步:建立连接
第二步:传输数据(http协议:规范标准)
第三步:应用层协议

//linux中一切皆文件,转换成socket

exec 8<& -  //关闭

传输控制层

对应TCP和UDP协议
操作系统的内核层

TCP协议
3次握手、4次分手、 (3次握手->数据传输->4次分手为最小粒度)
3次握手后,才开始数据传输,每一次传输都需要确认
相关命令: netstat -natp (查看网络进程)

为什么是3次握手?
从方向和IO解释,
1.client发送请求 syn
2.服务端发送syn和ack
3.服务端还需要再一次确定 ack

为什么是4次分手?
socket 套接字 = (源ip:port + 目标ip:port)
socket里面的套接字(里面有一个资源,端口号是有限的,一台计算有65535个端口号),必须归还端口号
1.client发送到服务端,我想断开连接 (fin)
2.服务端发送client,确认断开连接
3.服务端发送client,我也想断开连接
4.client发送服务端,我也确定了断开连接

释放资源

在这里插入图片描述

三次握手>数据传输>四次分手成为最小粒度,不可被分割

//查看协议表格
netstat -natp

xxx@dev-standlone:/proc/8434/fd$ netstat -natp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      28893/java      
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:50090           0.0.0.0:*               LISTEN      29270/java      
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      4158/redis-server *
tcp        0      0 127.0.0.1:11883         0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -        

网络层

IP 和 route
端口
1.占用2个字节,即最大65535个端口,其中0-1024系统占用;
2.TCP和UDP是分开的,每一个都是65535端口
3.一台计算机理论上可以跑13万多个程序

路由
采用下一跳机制:每一台机子都只存放下一跳的地址,通过下一跳继续找到目标地址

IPADDR=192.168.150.14
NETMASK=255.255.255.0
GATEWAY=192.168.150.2
DNS1=223.5.5.5

IP地址
ip地址称为点分字节,一个字节8位,最大255,理论最大值是255.255.255.255

IPADDR=192.168.150.14
子网掩码
IP地址与子网掩码做二级制位& ,得出网络号(192&255=192,168&255=168,150&255=150,14&0=0)192.168.150.0,你是这个网络里面的第14号

NETMASK=255.255.255.0
网关
GATEWAY=192.168.150.2
服务器地址
DNS1=223.5.5.5

路由表
1.第一行
目标网络: 192.168.150.0
Gateway:0.0.0.0 //表示这个网络192.168.150.0,不需要下一跳
子网掩码 :255.255.255.0

gateway中4个0,表示不需要下一跳,这个网络有具体的网络号

2.第三行:
目标网络 0.0.0.0
gateway 192.168.150.2
子网掩码 0.0.0.0
表示需要通过网关下一跳
在这里插入图片描述

实例ping www.baidu.com(61.135.169.121)
1.61.135.169.121与255.255.255.0子网掩码做位&,得到网络61.135.169.0,与目标地址 192.168.150.0不匹配
2. 61.135.169.121与第三行子网掩码0.0.0.0,得到0.0.0.0,与目标地址0.0.0.0相匹配,可以得到下一跳地址,即 默认网关192.168.150.2

实例二 ping www.qq.com (220.194.111.149)

  1. 与第一条的子网掩码255.255.255.0做位&,得到网络220.194.111.0,与目标地址 192.168.150.0不匹配
    2.与第三条的子网掩码0.0.0.0 做位&,得到网络号0.0.0.0,与目标地址 0.0.0.0相匹配,可以得到下一跳地址,即网关192.168.150.2

通过这两个实例,我们可以看到,第三条的路由表可以匹配任意网络

寻找下一个网关

route -n

root@ubuntu:/proc/2180/fd# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.2     0.0.0.0         UG    100    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

数据链路层

基于下一跳地址,通过arp协议获取mac地址,封装一个数据包(共三层 1.源端口号和目标端口号 2. 源IP地址 和目标IP地址 3.源mac地址和目标mac地址
在这里插入图片描述

通过网关找到最终的地址
网卡地址
什么是arp -a ?
arp是一个协议,DNS会解析域名和地址地址的映射,apr会解析同一个局域网中IP地址和网卡硬件地址的映射;DNS是全网的,arp是同一局域网内的

192.168.150.2 这是我们要找的网关,映射成了00:50:56:f7:53:2b这个mac地址(网卡地址)
在这里插入图片描述链路层结束后,会封装一个数据包,里面有3个地址,最外层是链路层的mac地址(下一跳的mark地址),中间是最终要给的地址(比如百度 220.194.111.149),最里面是哪个端口号要给的哪个进程 (始终都是mark地址会发生变化)

问题一、如何实现计算机跨域访问
计算机1 (192.168.1.4)想访问计算机4(192.168.3.4)

1.计算机通过路由表 找到下一跳,192.168.1.1,即路由器地址,并封装包
(1)源192.168.1.4 的IP 和 端口
(2)源 192.168.1.4的mac地址
(3)目标 192.168.3.4的IP和端口
(4)目标192.168.1.1的mac地址(下一跳的mac地址)

2.路由器地址 存放了两个网络的地址,即192.168.1.1 和192.168.3.1,发现目标的ip,发现路由表中可以直接访问192.168.3.1这个网络,通过arp协议,替换mac地址,然后进行转发
(1)源192.168.1.4 的IP 和 端口
(2)源 192.168.3.1的mac地址
(3)目标 192.168.3.4的IP和端口
(4)目标192.168.3.4的mac地址(下一跳的mac地址)

3.192.168.3.4收到这个数据包,发现mac地址、ip都是自己的,然后通过端口号找到对应的进程
在这里插入图片描述
问题二:如果获取到mac地址的
arp协议:计算机通过交换机,发送到路由器,发送内容为源mac和ip,目标mac(这里是假的ffff)和ip; 路由器收到后,又转发回去(发送真实的mac),这样就可以获取到真实的mac和ip

在这里插入图片描述

结论:TCP/IP协议,是基于下一跳的机制,IP是端点间;mac地址是节点间的

物理层

网卡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值