什么是网络
1. OSI七层网络模型协议
网络模型 | 说明 |
---|---|
应用层 | 与用户交互的,或独立在后台运行、对外提供服务的软件,如浏览器,tomcat,应用软件 |
表示层 | 协议、语义、段落的划分、字符串的表示、加密 |
会话层 | 传输的控制、session、会话的保持 |
传输控制层 | 如何建立连接,如何传输,状态是确认还是失败的控制->TCP\UDP |
网络层 | 设备当中的路由、如果找.到节点、如何通讯、数据包怎么发 |
链路层 | 点与点之间的通讯的协议->P2P\以太网 |
物理层 | WI-FI、4G、光纤 |
2. TCP/IP协议
2.1 应用层(HTTP协议、TCP协议、SSH协议)
第一步:建立socket连接,得到IO
第二步:传输数据(http协议:规范标准)
浏览器只需要把http协议的请求准备好,往下调用传输控制层(建立socket,得到IO,传输数据),最终得到请求返回的数据,浏览器再进行解析渲染。
cd /proc/$$/fd
proc:操作系统进程
$$:程序的进程ID号
fd:文件描述符
0:输入、1:输出、2:报错
exec 8<> /dev/tcp/www.baidu.com/80
8<>:创建一个文件描述符8,输入输出两个方向的IO,都指向/dev/tcp/www.baidu.com/80这个磁盘目录,
8最终指向一个socket套接字通信,/dev/tcp/www.baidu.com/80这个磁盘目录,在内核中被转换成一个socket套接字,已经和百度建立了握手,创建了tcp通信,才可以用应用层的协议来传输协议规范,即http协议来通讯获取百度主页
echo -e 'GET / HTTP/1.0\n' >&8
cat 0<& 8
echo:发送请求,通过重定向打印到文件描述符8的socket里,通过socket将Http请求头‘GET / HTTP/1.0\n’发送给百度
cat:读取返回文件,能从标准输入读文件
-e:将\n转义
>&:>表示命令重定向,会将‘GET / HTTP/1.0\n’命令输出到文件描述符8,&符号代表8不是文件,而是文件描述符
0<& 8:来自于文件描述符8
2.2 传输控制层(TCP协议、UDP协议)
- TCP协议:面向连接的,可靠的传输方式(三次握手->数据传输->四次分手,为最小粒度,不可被分割)
1.1 三次握手:ACK确认,开辟线程、对象、资源,描述符、建立连接,此时没有传输应用层的数据,只有建立连接之后,才开始传输数据,后续通讯无需再握手确认
1.2 四次分手:因为最多65535个端口,所以连接完了之后必须要进行分手。两端都必须发送分手包和收到对方的分手确认包,才能断开连接 - UDP协议:不用连接的,不可靠的传输方式
传输控制层只创建握手包,需要调用网络层进行网络梳理、再到链路层知道下一步去哪、最终到物理层网卡,做二进制编码,才能把握手包发出去,再回来,再发送确认包(确认包中如果带着应用层的协议请求数据,就可以收到对方的响应回来的数据)
netstat -natp
n:显示IP地址,不用逻辑名称显示,a:所有,t:TCP,p:PID,进程ID号
socket即为两端的ip:port进行连接
本地地址192.168.150.14:22同时被多个外部来源地址192.168.150.1连接,但他们的连接端口号各不相同,是各自独立的连接,可以进行各自的IO传输,互不影响
2.3 网络层(路由表)
网络层只负责在路由表做路由判断,找到下一跳地址。
2.3.1网卡信息文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0
cat:读取一个文件,读取网卡信息文件
ifcfg:接口配置,if:interface
eth0:第一块以太网
四个维度:IP地址(网络号+主机号,点分字节,一个字节有8个二进制位,即0~255)、掩码(IP和掩码做二进制按位与,可得到网络号)、网关、DNS域名解析
2.3.2 路由表
route -n
2.3.3 下一跳机制
每一个互联网的设备,内存不需要存全网的IP地址,只需要存它周边一步之内的IP地址。根据路由表判定,找到它的下一个IP地址。
百度的域名转换为目标地址61.135.169.121,拿百度的IP地址到路由表的每一行条目做路由判定,与子网掩码做按位与运算之后,可得到下一跳地址。与子网掩码为0.0.0.0进行按位与运算,结果为0.0.0.0,与目标匹配,得到下一跳地址,即默认网关地址192.168.150.2。
网关为0.0.0.0表示与目标地址在同一局域网,不需要进行下一跳。
2.4 链路层(arp协议)
arp -a
arp协议:DNS会解析IP地址与全网域名之间的映射,arp会解析IP地址与网卡硬件地址的映射,arp是同一局域网内的,受限于同一局域网,可以得到同一局域网内有哪些IP,这些IP在网卡的mac地址是多少。
链路层得到mac之后,会封装一个数据包,包内有3个地址:最外层是链路层的mac地址,即下一跳地址,下一层是数据包的目标地址最终的IP地址,最里层是端口号,最终到服务器是哪个端口号对应的进程。这3个地址最终确定了数据从主机发出去之后,最终到达哪个设备的哪个端口号对应的进程。TCP/IP协议是基于下一跳机制,硬件mac地址是节点间的,每一次跳跃,都会变化,IP地址和端口号是端点到端点的,不会发生变化。