- day3
- 一、服务器模型
- 1.循环服务器模型
- 同一个时刻只能响应一个客户端的请求
-
- 同一个时刻只能响应一个客户端的请求
- 2.并发服务器模型
- 2.1含义
- 同一个时刻可以响应多个客户端的请求,常用的模型有多进程模型/多线程模型/IO多路复用模型。
- 2.2多进程模型
- 每来一个客户端连接,开一个子进程来专门处理客户端的数据,实现简单,但是系统开销相对较大,更推荐使用线程模型。
-
- 每来一个客户端连接,开一个子进程来专门处理客户端的数据,实现简单,但是系统开销相对较大,更推荐使用线程模型。
- 2.3多线程模型(重点)
- 每来一个客户端连接,开一个子线程来专门处理客户端的数据,实现简单,占用资源较少,属于使用比较广泛的模型。
-
- 每来一个客户端连接,开一个子线程来专门处理客户端的数据,实现简单,占用资源较少,属于使用比较广泛的模型。
- 2.1含义
- 1.循环服务器模型
- 二、网络调试
- 1.ping
- 作为平时网络连通检测使用最多的命令,它的作用主要为:
- ● 用来检测网络的连通情况;
- ● 根据域名得到服务器IP;
- ● 根据ping返回的TTL值来判断数据包经过路由器数量。
-
- 2.netstat
- 作用:测试网络状态
- netstat -a //查看所有网络连接状态
- netstat -at //查看tcp所有网络状态
- netstat -au //查看udp所有网络状态
-
- 1.ping
- 三、网络协议头分析
- 1.数据的封装与传递过程
-
- 2.以太网帧完整帧格式
-
- ●对于网络层最大数据帧长度是1500字节
- ●对于链路层最大数据长度是1518字节(1500+14+CRC)
- ●发送时候,IP层协议栈程序检测到发送数据和包头总长度超过1500字节时候,会进行自动分包处理,接收端在IP层进行包重组,然后才继续往上传递
-
- 1.数据的封装与传递过程
- 四、wireshark与包头分析
- 1.步骤
- 双击需要的网卡,开始抓包
- 捕获器选择:
- windows如果连接有线网络,选择本地连接/以太网;如果连接无线网络,选择WLAN;如果只是在本机上的通信,选择NPCAP Loopback apdater或Adapter for loopback traffic capture。
- 过滤条件:
- 过滤端口:tcp.port == 502
- 过滤IP:ip.addr == 192.168.1.156(自己的ip地址)
- 以上条件同时过滤,通过&&连接
- 2..wireshark与对应的OSI七层模型
-
- 3.三次握手
- 3.1过程
- (1).第一次握手:客户端发送SYN包(SYN=1,seq=J),并进入SYN_SENT状态,等待服务器端返回确认包。
- (2).第二次握手:服务器端收到SYN包,确认客户端的SYN,发送ACK包(ACK=1,ack = J+1),同时发送一个SYN包(SYN=1,seq=K),并进入SYN_RCVD状态。
- (3).第三次握手:客户端收到服务器的SYN包以及ACK包,进入ESTABLISHED状态,同时向服务器端发送ACK包(ACK=1,ack=K+1)此时三次握手包发送完毕,服务器进入ESTABLISHED状态。
- 3.2过程图
-
- 3.1过程
- 4.四次挥手
- 4.1过程
- (1).第一次挥手:主动关闭方发送一个FIN包(FIN=1,seq=M)给被动方,进入FIN_WAIT_1状态
- (2).第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1,ack=M+1);并进入CLOSE_WAIT状态。主动方接收到ACK后进入FIN_WAIT_2状态.如果有数据没有发送完毕,则继续发送,直到发送完毕为止
- (3).第三次挥手:被动方发送一个FIN包(FIN=1,seq=N),进入LAST_ACK状态。
- (4).第四次挥手:主动方收到FIN包,回复一个ACK包(ACK=1,ack=N+1).被动方收到主动方的ACK包后关闭连接
- 4.2过程图
-
-
- 为什么客户端在TIME-WAIT阶段要等2MSL?
- 为了确保服务器端能收到客户端发送的ACK,1MSL允许ACK到达服务端,另1MSL允许服务端重传的FIN到达客户端。
-
- 4.1过程
- 5.TCP如何保证可靠性?
- (1).通过三次握手建立可靠连接。
- (2).通过应答确认机制和重传机制确认数据准确到达,通过给每个数据增加序列号,确保数据包达到不失序。
- (3).通过四次挥手实现断开连接时数据的完整性。
- 1.步骤
- 五、数据库编程
- 1.手工创建
- 使用sqlite3工具,通过手工输入SQL命令行完成数据库创建。用户在Linux的命令行界面中输入sqlite3可启动sqlite3工具
- https://docs.qq.com/doc/DQ294RlF0YXBxTkxS?nlc=1
- 使用sqlite3工具,通过手工输入SQL命令行完成数据库创建。用户在Linux的命令行界面中输入sqlite3可启动sqlite3工具
- 2.代码
-
- 1.手工创建
- 一、服务器模型