建立完tcp请求再发起http请求
开启系统代理之后,以clash verge为例 127.0.0.1:7897,假设hci.baidu.com的IP为153.37.235.50
发起对hci.baidu.com的HTTP请求,由于开启了系统代理不进行DNS解析,浏览器调用socket()获得一个socket,调用socket.connect(目标IP127.0.0.1,目标端口7897)建立socket连接(127.0.0.1:58789127.0.0.1:7897,内部会随机分配可用端口)内部可以根据需要建立TCP连接或者进行UDP通信(UDP不建立连接)。把HTTP数据包交给操作系统内核的通信模块封装,在封装到网络层时,查看到目标IP,根据路由表会到达到达回环网卡(loopback:lo0网口),有数据到了触发中断,操作系统内核网络模块拿到数据解封装,到达传输层查看网口是7897,把解封装的HTTP数据包交给clash,clash根据规则决定是直连还是发给代理服务器,【如果是www.google.com 根据规则要加密再发给代理服务器,发起DNS请求选中的代理节点的IP(如果有域名的话),clash调用connect发起连接[10.15.120.206:59591代理节点IP:端口],内部随机分配端口59591,把数据交给操作系统内核封装,到达网络层时,查看到目标IP,根据路由表交给en0网口,由于不在同一网段所以发给网关。】这个域名是直连,不加密,进行DNS解析,直接与目标服务器建立连接,clash调用connect发起连接(10.15.120.206:59591==153.37.235.50:80),内部随机分配端口59591。把数据交给操作系统内核封装,到达网络层时,查看到目标IP,根据路由表交给en0网口,由于不在同一网段所以发给网关。
- DNS请求代理节点的IP
- 与代理服务器传输的数据
网络通信本质上就是进程间通信
这个命令的含义是:
sudo
: 表示以管理员权限执行后续的命令,因为lsof
需要管理员权限才能列出所有进程的信息。lsof
: 是一个用于列出当前系统打开文件的工具,包括网络连接等信息。-i
: 选项表示只显示网络相关的信息。-P
: 选项表示不将端口号解析为服务名,而是以原始的数字形式显示。-n
: 选项表示不将网络地址解析为主机名,而是以原始的数字形式显示。grep 1033
: 使用grep
命令筛选出包含字符串"1033"的行,这里是指筛选出与进程ID为1033相关的信息。
因此,整个命令的作用是以管理员权限列出所有的网络连接信息,并且筛选出与进程ID为1033相关的部分。