**
一、TCP/IP 协议族常用协议
** 1、IP 定义了 TCP/IP 的地址,寻址方法,以及路由规则。 IP 地址由两部分组成,即网络号和主机号。故一个完整的 IPv4 地址往往表示为 192.168.0.1/24 或 192.168.0.1/255.255.255.0 这种形式。
2、IPv6 提供了一些 IPv4 没有的新特性,并且有几乎用不完的地址,但目前还在部署过程中,尤其是国内除高校和科研机构外并不常用, 暂不讨论。
TCP/IP 协议的基本思想是通过网间连接器( Gateway)将各种不同的网络连接起来,在各个网络的低层协议之上构造一个虚拟的大网,是用户与其他网的通讯就像与本网的主机通讯一样方便。
3、个人对网络的理解
个人理解:网络在本质上就是一个个局域网互相连接起来形成的,当一个pc请求数据的时候,首先会在当前局域网中查找,如果找不到,会通过网关(或者路由器)在上一级局域网中查找,如果还找不到,依次往上一级局域网中查找,最终一直查到根节点。这也就解释了为什么访问国外网站速度很慢,而访问国内网站速度很快,从下图可以看出cn访问cn内资源都没有经过根节点,从cn访问us的资源要经过根节点才可以。 这是通过域名系统(DNS)实现的,参考:https://blog.csdn.net/qq_36741413/article/details/124984603 4、TCP/IP通讯流程
TCP/IP 的设计,是吸取了分层模型的精华思想——封装。每层对上一层提供服务的时候,上一层的整个数据结构是黑盒,作为一个整体直接作为本层的数据同时在本层加上自己的信息比如ip、端口号、mac。而不需要关心上一层协议的任何细节。
网络是分层的,对于应用层而言不用关系具体的底层是如何工作的,只需要按照协议将要发送或接收的数据打包好即可。 打包好以后都通过dev_queue_xmit函数将数据发送出去,接收数据的话使用 netif_rx 函数即可。 上面这个模型是最一般的模型,但是在 Linux 中,真正用到的模型是下面这样子的:
- 应用层( Telnet, Ftp,等等)
- 传输层( TCP 和 UDP)
- 网络层( IP 和路由)
- 网络底层(相当于 OSI 模型中数据链路和物理层)
所以当发送数据的时候虽然socket()只带了本地的地址,但是经过层层封装之后带上了所有的信息(数据、mac、端口号、在互联网中的唯一ip地址),最后通过物理层把数据发送出去。 因此就减少了开发者的工作量,只关注数据,经过下面的层层封装的协议过程不用考虑。
**
二、客户机/服务器模型
**
1、网络上进行通信的各端点,很多时候是作为遵循客户机/服务器模型的。
一般来说,服务器端具有以下特征:
- 被动通信;
- 始终等待来自客户端的请求;
- 自己参与通信的网络接口和端口必须确定;
- 处理客户端的请求后将结果(响应)返回给客户端。
而客户端的特征如下:
- 主动通信;
- 需要发起请求;
- 自己参与通信的网络接口和端口可以不确定;
- 发起请求后需要等待服务器回应结果。
服务器可以是有状态的也可以是无状态的,无状态的服务器不会保留两个请求之间的任何信息,而有状态的服务器会记住请求之间的信息。一个简单的客户机/服务器通信过程如图 17.4 所示。实际上的服务器一般都能同时并发处理多个客户端的请求。
|