[基础]计算机网络的基础梳理

参考自 https://www.jianshu.com/p/c793a279f698

OSI七层模型 (自底向上解释)

物理层

定义

规定了网络的一些电气特性

作用是负责传送0和1的电信号

常用协议

线路、无线电、光纤,网卡使用MAC地址

数据链路层

定义

单纯的0和1没有意义,需要规定解读方式:多少个电信号算一组?每个信号位的意义?

作用是在物理层的上方,确定了0和1的分组方式

常用协议

以太网协议,使用MAC地址

  • ”以太网“规定,一组电信号构成一个数据包,叫做 帧(Frame)=标头(Head)+数据(Data)
  • 因此链路层的数据包就叫做”以太网数据包", 其中"标头“包含数据包的一些说明,比如发送者、接受者、数据类型等等。
    • 如何标识发送者和接受者?通过网卡的MAC地址来标识。数据包必须是从一块网卡传送到另一块网卡。每块网卡出厂的时候都有独一无二的MAC地址,通常用12个十六进制数表示。
      \

如果知道接受方的MAC地址,如何发送?

  • 使用类似广播的方式,它向本网络(局域网)内的所有计算机发送,让每个计算机自己比对是否为接受方(即比对标头中的接受方是否是自己的MAC地址)
  • 因为只是在本机所在的局域网内,因此需要区分出哪些MAC地址是属于同一个子网 [互联网是由一个个子网组成更大的子网,一级级组网最终构成互联网]
  • 由此引出网络层,通过引入一套新的地址,来区分哪些计算机属于同一个子网,这套地址叫做”网络地址“,也就是 IP地址

\
\

网络层

定义

引进一套新的地址(即IP地址),作用是区分不同的计算机是否属于同一个子网络。

常用协议

IP协议,使用MAC地址+IP地址

  • IP地址有IPv4 和 IPv6两个版本。

  • IP地址有32位,由两部分组成:前半部分代表网络,后半部分代表主机。

    • 同一个子网内的电脑IP地址中网络部分应该是一致的,主机部分则代表不同电脑(主机)的编号。
  • 子网掩码:用于说明地址中哪一部分是网络,子网掩码也有32位,其中网络部分全为1,主机部分全为0。通过将当前IP地址与子网掩码进行按位与运算,来判断是否在同一个子网。

\

如何通信?

  • 如果在同一个子网内,则按照链路层的方法,广播+MAC寻址的方式发送数据包
  • 如果不在同一个子网内,则需要用“路由”的方法来实现不同子网之间的互相通信
    \

路由器提供了一个隔绝“外网”和"内网"的方法,路由器只有一个"外网"地址,连在路由器上的设备在外网看来都属于同一个IP地址(即路由器的外网IP地址),而在路由器内部的"内网",则这些设备的IP地址由路由器分配,各不相同
\
\
\

传输层

定义

有了MAC地址和IP地址,已经可以在互联网上的任意两台电脑建立通信了。然而还需要一个参数,表示这个数据包到底供哪个程序(进程)使用(比如是在聊天还是在浏览网页),这个参数就叫做“端口”,其实就是每个使用网卡的程序(进程)的编号。每个数据包发送到主机特定的端口,所以不同的程序就能取到自己想要的数据包。

作用是建立“端口到端口“的通信,而网络层的功能是建立”主机到主机“的通信。

只要确定主机和端口,就能实现程序之间的交流

传输层建立的是“端口到端口”之间的通信,即“进程间通信“:1.主机内部进程间通信,由操作系统决定;2.跨主机进程间通信或网络进程间通信,也叫”socket“通信

那么,Socket是什么?
  • 从编程语言的角度,socket是一个无符号整型变量,用来标识一个通信进程。两个进程通信,总要知道这几个信息:双方的ip地址和端口号,通信所采用的协议栈。socket就是和这些东西绑定的,实现socket可以使用unix提供的接口,也可以使用wIndows提供的winSock。
  • socket本质是编程接口(API),对TCP/IP的封装。TCP/IP只是一个协议栈,必须要具体实现,同时还要提供对外的操作接口(API),这就是Socket接口。通过Socket,我们才能使用TCP/IP协议,因此有了一系列我们知道的函数接口——connect、accept、send、read、write等。
    \
    \

常用协议

TCP、UDP协议,使用MAC地址+IP地址+端口号

主要作用就是在应用层的数据包标头加上端口号。

[待补充] TCP的”三次握手“,“四次握手”
\
\
\

会话层

表示层

应用层

==[待补充] ==

\
\
\

协议 protocol

  • 是一种双方都明白或者必须遵守的实现约定
  • 互联网协议簇(Internet Protocol Suite)是全球通用的协议标准。其中两个最重要的协议是TCP和IP协议,通常把基于TCP和IP协议的所有协议统称为”TCP/IP协议(簇)“

DNS解析

  • Domain Name System,网域名称系统,端口53,它是将域名和IP地址相互映射的一个分布式数据库

实际例子

自顶向下的数据包结构

现在我们从一个用户的角度来自顶向下的过一遍,一个网络数据包的过程。首先我们设置了本机参数:

  • 本机的IP地址:192.168.1.100
  • 子网掩码:255.255.255.0
  • 网关的IP地址:192.168.1.1
  • DNS的IP地址:8.8.8.8

然后打开浏览器访问谷歌的网址:www.google.com,按下回车。这意味着,浏览器要向Google发送一个网页请求的数据包。
第一步:
主机会像DNS服务器发送请求,已知DNS服务器为8.8.8.8,于是向这个地址发送一个DNS数据包(53端口);然后,DNS服务器做出响应,告诉我们Google的IP地址是172.194.72.105。于是,我们知道了对方的IP地址。
第二步:
判断这个IP地址是不是在同一个子网络,这就要用到子网掩码。已知子网掩码是255.255.255.0,本机用它对自己的IP地址192.168.1.100,做一个二进制的AND运算,计算结果为192.168.1.0;然后对Google的IP地址172.194.72.105也做一个AND运算,计算结果为172.194.72.0。这两个结果不相等,所以结论是,Google与本机不在同一个子网络。
第三步:
因此,我们要向Google发送数据包,必须通过网关192.168.1.1转发,也就是说,接收方的MAC地址将是网关的MAC地址[链路层只能在同一个子网内,所以接受方的MAC地址只能是网关的MAC地址,但是接受方的IP地址不变(仍然是谷歌的IP地址)]。至此发送的各种必要参数已经基本确定了,数据包也可以发送了。

\
\
\

代理服务器

https://www.cnblogs.com/csguo/p/7250842.html

“代理”:我们或许会帮忙家人去办理一些杂务吧!举个例子来说,例如缴费或者是申办提款卡等等的, 由于你并不是『申请者本人』而是『代理人』的角色

代理服务器,与真实世界一样,当客户端有因特网的数据要求时, Proxy 会帮用户去向目的地取得用户所需要的数据。所以,当客户端指定 WWW 的代理服务器之后,用户的所有 WWW 相关要求就会通过代理服务器去捉取。

客户端向外部要求的数据事实上都是 Proxy 帮用户取得的,因此因特网上面看到要求数据者,将会是 Proxy 服务器的 IP 而不是客户端的 IPProxy server 因为直接对外网,相当于当了个炮灰,外网只能找到这个代理服务器,隐藏内网的机器,从而 起到防火墙的作用。

代理服务器有缓存(cache)的功能

代理服务器工作流程
  • 当客户端A对web服务器请求时,此端提出请求时,此请求会首先发送到代理服务器.
  • 代理服务器接收到客户端请求后,会检查缓存中是否存有客户端所需要的数据.
  • 如果代理服务器没有客户端A所请求的数据,它将会向WEB器提交请求.
  • WEB服务器响应请求的数据.
  • 代理服务器向客户端A转发Web服务器的数据.
  • 客户端B访问web服务器,向代理服务器发出请求.
  • 代理服务器查找缓存记录,确认已经存在WEB服务器的相关数据.
  • 代理服务器直接回应查询的信息,而不需要再去服务器进行查询,从而达到节约网络流量和提高访问的速度目的.

\
\
\

kexue上网:

waiwang有服务器,给你提供服务器的IP,和端口地址server_port

国内主机(客户端)通过酸酸乳连接该服务器,需要设置本机的IP地址和端口号client_port(当数据包传来时,如果端口号和酸酸乳进程的client_port一致,则说明该数据包是给酸酸乳进程的)

proxy server代理服务器,是在用浏览器的时候需要设置,因为所有的www请求都是发给proxy server,再由proxy server判断接受方是否在缓存内,若不在则转发给web服务器。因此可以将proxy server设置成localhost:client_port,即将本机的酸酸乳进程作为proxy server,当需要访问waiwang时,发送给该proxy server,由其转发给在外的服务器,从而。。。。。

总体来说应该是这样,但是还附加了一些其他防止被发现的机制,比如混淆参数是为了把域名改得混淆一点?

Ubuntu下面用不了全局代理,只能PAC(Proxy Auto Config)代理

PAC文件规定了一些规则,有些URL没有被强,可以绕过酸酸乳服务器直接访问;有些被强的则需要通过酸酸乳连接到waiwang服务器然后才能访问

而全局代理则是所有网页都用waiwang服务器访问

posted @ 2019-06-03 17:28  lunaY  阅读(297)  评论(0编辑  收藏  举报