读《网络是怎样连接的》第六章 总结
这章可以说是非常简单了,基本都是之前的东西.那么,我们开始吧.
第五章我们知道了数据包最终都是要到达web服务器的,不管是用了负载均衡技术还是缓存的技术, 其 让用户接收的的响应数据都是通过 web服务器产生的, 那么,我们这一章就聊聊 数据包到达了 web服务器发生了什么吧.
服务器与客户端的区别
复习以下如何接收包
web服务器如何形成响应数据
浏览器得到了相应数据,如何生成显示内容
一. 服务器端与 客户端有什么区别呢?
嗯哈,很明显,性能就是巨大的区别 啊,,,但是,,我们先不关注这个,我们看看tcp连接 与 收发数据包 的层面,两者有什么区别.
tcp 连接层面:
在这个层面, 我们知道, 两端通讯, 首先各自都要生成表示 自身的 socket标识符. (客户端的端口号按应用不同而设置,服务器端的端口号根据规则设定,如web服务器就设定80)
然后,客户端向服务器端发送SYN=1的tcp控制信号(还有像序号、窗口大小等东西)。
在客户端进行一系列骚操作之前, 服务器端 需要先监听连接, 发现有人在试图连接后,就把我们原先在服务器端建立的socket 标识符复制产生一个 新的套接字,然后把客户端发送过来的配置信息放进去(如,客户端的ip、端口、需要、窗口大小等),
之后, 这个socket需要 给 客户端返回一个tcp控制信息 的响应,(ack=1 、 序号、窗口大小等高速客户端),然后客户端再返回一个确认响应就好了.
收发数据包:
这个与客户端是完全一样的, 因为不管 服务器的硬件和操作系统如何变化 ,其网络服务的组件都是一样的,不然网络就太复杂了.
所以,服务器收发数据包 也是用的网卡.
二. 接收数据包
复习一下:
网卡里的MAC模块在 PHY把 网络中传输的信号转换成一般的 电信号后, 就进行了如下操作:
1.接收电信号, 并把电信号转换成数字信号( 利用报头中的时钟信号)
2.利用 FCS进行校验. (正确,则进行下一步,否则就丢弃该包)
3.检测MAC首部。的MAC接收地址是不是MAC 模块中的MAC地址,不是就丢掉, 是的话就放入 网卡的缓冲区中.
ok,接下去就看看谁在接力了:
在数据在缓冲区后, 中断程序告知cpu ,数据到了,你来取一下, cpu知道后,就中断当前的工作, 调用网卡驱动程序冲网卡的缓存中读数据, 并根据 MAC中的以太网类型判断协议种类, 把数据送给处理该协议的软件(如IP协议 就——》TCP/IP协议栈)
再之后呢?
ip 模块在接力:
1.看看 ip是不是发给自己的(不是就转发出去)
2.网路包是否经过分片(等所有分片全部到达后组装回原来的 原始包)
3.检测ip头部的协议字段(tcp就是06),那么就把包给TCP模块处理
不慌,TCP模块在操作:
1.根据收到的包的放松方IP和端口, 接收方的ip和端口, 在 套接字表中找到对应要通讯 的是 哪个套接字
2.将数据块拼合起来放在接收缓冲区中(检查发送的序号, 序号正确就把包放入缓冲区拼接起来)
3.返回ACK
这时,数据都存到了缓冲里面,接下来,应用程序会调用Socket.read() 把数据取走,然后分析数据,作出响应.
三. 如何形成响应
先不急着做响应, 我们起码得先看看请求的是什么, 如果是文本(html、、、),那么我们直接从文件中读取文档,然后将其作为响应消息返回就好了, 如果是CGI程序( 不太明白 ), 那么 我们就要运行这个程序,把必要的参数传给它,然后把程序运行结束产生的数据嵌入HTML文档 作为响应返回.
补: web服务器的访问控制
就是 我们访问的目录其实是假的,是虚拟目录, 在我们所看到的根目录之外其实还有其他目录存在,不过我们被限制了访问罢了.
三种 访问控制的规则:
1.客户端ip
2.客户端域名
3.用户名和密码
只有满足条件的客户端可以访问服务器的数据.
四. 浏览器如何显示内容
要显示内容,首先要看看响应消息中的数据属于哪种类型,web可以处理的类型包括 文本、图像、声音和视频等.每种类型的显示方式都不同,所以先确定数据的类型才行.
浏览器查看响应头, 响应头中有个存在 名为 Content-Type : text/html。 (左边为 主类型, 右边为 子类型)
ok,接下来我们看看具体如何显示内容:
对于图片文本这类的数据,浏览器可以自行显示: 浏览器解释标签的含义,按照指定的样式显示文档内容,实际的显示操作由操作系统完成, 浏览器负载对操作系统发出指令.
对于其他内容的数据(eg: ppt),浏览器会调用相应的程序来帮忙. 将数据传给帮忙的程序,然后改程序负责显示相应的内容.
---------------------
原文:https://blog.****.net/a3765421/article/details/83988581