封装
每一层对用户数据进行加工处理
比方说,应用层为数据加上了一个Appl首部,封装之后发给传输层,传输层加入了TCP首部,封装之后发给了网络层,网络层加入了IP首部,封装之后发给了链路层,链路层加入了头尾部分,封装之后通过网卡发出
分用
刚刚是发送数据的过程,在接收数据的时候,就需要把这个过程反向执行,这个过程也叫做分用
具体来说,像是剥香蕉一样,收到一个以太网数据帧之后,每层会识别首部,然后确定接收数据的上层协议
协议是通过目的端口号、源IP地址和源端口号进行解包的(感觉这个地方是对应了不同的协议层)
客户-服务器模型
存在两种模型:
- 重复型(通常用于UDP协议)
服务器等待一个客户端访问
处理这个客户端请求(此处只能为一个客户服务)
发送响应
继续等着 - 并发型(一般用于TCP协议)
服务器等待客户端访问
接到访问后,创建一个新的服务器处理请求,处理结束之后返回响应,然后关闭新的服务器
之前的服务器继续等待
我觉得造成这种原因的本质是:
TCP协议中可以明确知道每个客户端的,因为建立了可靠的信息传输通道,因此可以多个并行
但是在UDP协议中,信息是一窝蜂传进来的,如果使用并行的方式,可能会造成问题
端口号
服务器通过知名端口号进行识别,对于不同的服务,端口号不同,因此就会使用不同的协议进行解包、分用
端口号分类:
1-255:知名端口号
256-1023:Unix系统预留
1024-5000:常用的临时端口分配
大于5000:为其他服务器预留