一、计算机网络体系结构分层
OSI 七层模型 | TCP/IP 概念层模型 | 功能 | TCP/IP 协议 |
应用层 | 应用层 | 文件传输,电子邮件,文件服务 ,虚拟终端 | TFTP,HTTP,SMTP,FTP,SNTP,DNS,Telnet |
表示层 | 数据格式化,代码转换,数据加密 | 没有协议 | |
会话层 | 解除或建立与的接点的联系 | 没有协议 | |
传输层 | 传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BCP,ICMP |
数据链路层 | 链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据型式在物理媒体上传数数据 | ISO2110,IEEE802,IEEE802.2 |
- 建立连接
cd /proc/$$/fd
exec 8<> /dev/tcp/www.baidu.com/80
$$当前进程ID
fd:文件描述符
执行完后再执行 ll
可以查看到多了一个socket连接
- 传送数据(http协议:规范标准)
echo -e 'GET / HTTP/1.0\n' >&8
GET / HTTP/1.0:HTTP 协议规定的 Request 请求头最小的写法
GET: 请求方法
/: URL请求资源
HTTP/1.0: HTTP 协议版本
-e 识别\n换行符
echo 打印Request信息重定向到文件描述符8 Socket里,Socket会发送到百度
- 查看结果
cat <& 8
三、传输控制层 TCP三次握手四次挥手
-
三次握手
在socket通过TCP协议进行数据连接时,客户端在连接上服务端后会有一个三次握手的过程- 客户端:我可以和你传输数据吗
- 服务端:可以
- 客户端:好的我来了
-
四次挥手
在socket端开连接时,会有一个四次挥手的过程- 我要断开连接了
- 好的,我先处理完手中的任务
- 好的,我等你
- 断开吧
-
三次握手>数据传输>四次分手 成为一个最小粒度,不可被分割
-
查看当前所有Socket连接信息:netstat -natp
n: 显示ip地址,不要用逻辑名称
a: 所有
t: 查看当前所有的socket链接
p: PID,显示通信是哪个进程的ID号
四、网络层下一跳寻址
cat /etc/sysconfig/network-scripts/ifcfg-eth1
IPADDR=192.168.79.101
GATEWAY=192.168.79.2
NETMASK=255.255.255.0
IP地址,点分字节,通信每一个点的标识符,IP是端点间,MAC地址是节点间的
TCP/IP协议:基于下一跳的机制, 每一台互联网设备的内存中,不需要存储全网数据,只需要存周边一步之内的数据
IP地址与掩码发生二进制的按位与计算: 192.168.79.101 & 255.255.255.0
得出这台机器的网络号是:192.168.79.0; 当前机器是这个网络中的第101号。
1. 查看路由表
路由表:存储了本地计算机可以到达的网络目的地址范围和如何到达的路由信息。路由表是TCP/IP通信的基础,本地计算机上的任何TCP/IP通信都受到路由表的控制。
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.79.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
0.0.0.0 192.168.79.2 0.0.0.0 UG 0 0 0 eth1
- U 表示该路由可以使用。
- G 该路由是到一个网关(路由器)
1) 网络地址(Network Destination)、网络掩码(Netmask)
网络地址和网络掩码相与的结果用于定义本地计算机可以到达的目的网络地址范围。
2) 网关(Gateway,又称为下一跳服务器)
在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是0.0.0.0。如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。
3) 接口(Interface)
接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。
(4) 跃点数(Metric)
跃点数用于指出路由的成本,通常情况下代表到达目标地址所需要经过的跃点数量,一个跃点代表经过一个路由器。跃点数越低,代表路由成本越低;跃点数越高,代表路由成本越高。当具有多条到达相同目的网络的路由项时,TCP/IP会选择具有更低跃点数的路由项。
#route add 添加路由
#使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了
route add -net 192.168.88.88 netmask 255.255.255.255 gw 192.168.79.102
#删除一条路由,删除的时候不用写网关
route del -net 192.168.79.0 netmask 255.255.255.0
2. 路由确定过程
当TCP/IP需要向某个IP地址发起通信时,它会对路由表进行评估,以确定如何发送数据包。评估过程如下:
(1) TCP/IP使用需要通信的目的IP地址和路由表中每一个路由项的网络掩码进行相与计算,如果相与后的结果匹配对应路由项的网络地址,则记录下此路由项。
(2) 当计算完路由表中所有的路由项后,
(a) TCP/IP选择记录下的路由项中的最长匹配路由(网络掩码中具有最多“1”位的路由项)来和此目的IP地址进行通信。
(b) 如果存在多个最长匹配路由,那么选择具有最低跃点数的路由项。
© 如果存在多个具有最低跃点数的最长匹配路由,那么:均根据最长匹配路由所对应的网络接口在网络连接的高级设置中的绑定优先级来决定(一般有线(eth0) > 无线 (wlan0) > 移动信号(4G))。
(d) 如果优先级一致,则选择最开始找到的最长匹配路由。
五、链路层数据包的封装
传输层及其以下的机制由内核提供,应用层由用户进程提供,数据在传输之前,必须要进行封装。链路层也可以叫做以太网帧格式。
arp -a
? (192.168.79.1) at 00:50:56:c0:00:08 [ether] on eth1
? (192.168.79.2) at 00:50:56:ec:ef:30 [ether] on eth1
ARP:解释局域网内的IP地址到网卡硬件地址的映射。
通过ARP数据报表,来返回下一个路由器的MAC地址,封装数据。每到一个路由器,确认MAC地址并修改下一跳的MAC地址,再重新打包,再继续传。
六、网络请求过程
-
应用层向内核发起通信请求
-
传输控制层(如果是tcp协议,制作握手包)
-
网络层(进行路由判定)
-
链路层(通过arp协议获取mac地址,封装数据包,其中包括源ip地址、源端口号、目标ip地址、目标端口号、当前机器MAC地址和下一跳MAC地址)