《网络是怎样连接的》计网第六章:服务器端

在这里插入图片描述

八、服务器端

1.等待连接模块

服务器程序启动并读取配置文件完成初始化操作后运行,创建套接字,之后进入等待连接的暂停状态,当客户端发起连接,此模块会恢复运行并接受连接,将套接字移交给客户端通信模块

2.客户端通信模块

使用已连接套接字与客户端进行通信

3.具体过程

1.分配套接字内存,bind写入端口号,listen使其处于等待连接状态,accept接受连接等待包的到来,包到来后复制套接字副本将控制信息写入(新的套接字能够避免新的包来临时没有套接字等待),交给客户端通信模块

2.套接字的查找匹配:客户端IP 和端口号,服务器IP和端口号

4.全过程:

  1. 网卡MAC模块接收电信号或光信号,并转换成数字信号,根据包末尾的帧校验序列FCS检验错误,检查MAC头部,存储在网卡的缓冲区
  2. 网卡申请中断,CPU执行网卡驱动,从网卡缓冲区读取数据,根据以太类型将包交给TCP/IP协议栈
  3. 检查IP头部,检查分片,若分片则暂时存放在内存中等所有分片全部到达,判断IP头部协议号字段交给相应的模块TCP/UDP模块
  4. TCP模块寻找套接字,复制副本,写入发来的控制信息,分配接收和发送缓冲区,生成ACK号,服务器向客户端发送数据的序号初始值(接收缓冲区的剩余大小),生成TCP头部,委托IP模块发给客户端
  5. 发送给客户端,并接受客户端返回的ACK号
  6. 后续数据包发送后,TCP模块会找到对应套接字,并判断前后序号是否一致,信息有无丢失,无误后返回客户端
  7. 数据被进入接收缓冲区后,应用程序会调用Socket的read来读取
  8. 数据处理完之后,调用Socket的write将响应消息交给协议栈,使用套接字的描述符找到连接,协议栈…
  9. 断开时,服务器程序调用close,TCP产生FIN=1的头部并委托IP发给客户端,客户端会返回ACK号,之后客户端close生成FIN=1的TCP头部发给服务器,服务器再返回ACK,完成断开

5.数据处理

发送的数据如果是针对程序,那么Get方法将URI后面的参数传给程序;POST将消息体中的数据传递给程序。并委托操作系统进行执行,最终嵌入HTML文档中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值