Wireshark数据包分析学习笔记Day28
使用描述符来指代套接字的原因如下:
(1)等待连接的套接字中没有客户端IP地址和端口号。
(2)使用描述符这一种信息比较简单。
服务器接收电信号的过程和客户端发送的过程相反,是从模拟信息转换为数字信息。
网卡的MAC模块将网络包从信号还原为数字信息,校验FCS并存入缓冲区。网卡需要通过中断将网络包到达的事件通知给CPU。
网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈。
分片的包,则将包暂时存放在内存中,等所有分片全部到达之后将分片组装起来还原成原始包;如果没有分片,则直接保留接收时的样子,不需要进行重组。
协议栈的IP模块会检查IP头部,(1)判断是不是发给自己的;(2)判断网络包是否经过分片;(3)将包转交给TCP模块或UDP模块。
如果收到的是发起连接的包,则TCP模块会(1)确认TCP头部的控制位SYN;(2)检查接收方端口号;(3)为相应的等待连接套接字复制一个新的副本;(4)记录发送方IP地址和端口号等信息。
收到数据包时,TCP模块会(1)根据收到的包的发送方IP地址、发送方端口号、接收方IP地址、接收方端口号找到相对应的套接字;(2)将数据块拼合起来并保存在接收缓冲区中;(3)向客户端返回ACK。
TCP模块的断开操作,服务器程序会调用Socket库的close, TCP模块会生成一个控制位FIN为1的TCP头部,并委托IP模块发送给客户端。
Web服务器程序在组装网络包、还原数据之后,会运行其中指定的程序(实际是委托操作系统来运行),然后将数据传递给已运行的程序。
可以根据响应消息开头的Content-Type头部字段的值来进行判断。
CGI指的不是CGI程序本身,而是连接程序与Web服务器程序的接口规格。所以说,客户端发送的消息是通过CGI这样一个接口,从Web服务器程序进入CGI程序的。