Socket实现服务器搭建

Socket实现服务器搭建_第1张图片

一、前言:

Socket上篇文章已经介绍过了 他是实现网络编程的基础 。

在服务器模型中通常都是多个客户端一个服务器端,那么服务器是如何处理多个客户端的请求?

1.顺序处理 依次处理--效率低下

2.并发处理

        2.1 多线程并发(线程池)

        2.2 多进程池

        2.3 I/O转接接口 select epoll -可在单线程处理多任务请求     +多线程效率更高

        2.4 libevent 高并发框架

若客户端内部任务较复杂,需要同时进行上传和下载 ,可建立多个连接实现不同任务。创建套接字连接池(与线程池搭配使用),每个连接处理多个流程。

数据TCP/IP传输过程

Socket实现服务器搭建_第2张图片

 问题解惑:协议是什么?为什么要需要协议?

个人理解:在数据传输是数据通常要以二进制传输数据。接收方与发送方要保证能够接收(TCP建立连接 IP地址寻找到目标主机 )以及接受到的内容一致(HTTP FTP等类似编码解码)。所以需要制定协议完成数据的传输。

注:在应用层以下通常不需要程序员完成,均由内核完成。

数据传输存储简图

Socket实现服务器搭建_第3张图片

在计算机通信过程中为了使通信双方能够正常通信,正常的编译码,所以需要对传输单元(比特 字节 等)传输顺序进行规定。由此引出字节序。

二、字节序

字节序,就是字节的顺序,最小单位是字节,即大于一个字节类型的数据在内存中存放顺序。(单字符无顺序以及字符串无顺序问题;int long 有顺序问题) 

在各体系计算机中通常采用两种字节存储机制:Big-Endian和Little-Endian,即 大小端

Socket实现服务器搭建_第4张图片

2.1 Little-Endian -> 主机字节序 (小端)   --低低 高高

据的低位字节存储到内存的低地址位, 数据的高位字节存储到内存的高地址位
我们使用的PC机,数据的存储默认使用的是小端
2.2 Big-Endian -> 网络字节序 (大端)--低高 高低

数据的低位字节存储到内存的高地址位, 数据的高位字节存储到内存的低地址位
套接字通信过程中操作的数据都是大端存储的,包括:接收/发送的数据、IP地址、端口。

在主机 通过网络传输过程中

主机发送数据: 小端转为大端       接受数据:将大端转为小端 存储

问:0x12 34 56 78 占多少个字节?

答:0xff=255 占一个字节  小于0xff均为一个字节存储,  那么0x12 0x34 0x56 0x78 各占一个字节 一共占四个字节

内存对齐

问:0x12 34 56 78 大端小端各自如何存储?

答 0x12 34 56 78 为由高位字节到低位字节 因此 

大端 78 56 34 12

小端 12 34 56 78

持续更新...


作者: 苏丙榅
链接: https://subingwen.cn/linux/socket/?highlight=soc
 

你可能感兴趣的:(服务器,运维,tcp/ip,linux,网络)