网络是怎样连接的(1)
- 在浏览器的搜索栏中输入www.baidu.com
- 浏览器也是一个应用程序,将URL看作https://www.baidu.com/index.html
- 根据HTTP协议生成HTTP请求(一种文本形式而不是二进制形式)
- HTTP请求中包含:URI(对什么)和方法(做什么)
- URL如上的情况,URI就是index.html这个处于服务器中的文件,做的方法就是GET方法。
- 生成的HTTP请求有三部分:请求行(方法 URI HTTP版本)消息头(一些配置信息)消息体(GET方法没有消息体,POST方法就有相应表单中的数据消息体,需要发送给服务器)
- HTTP请求由浏览器生成之后,需要调用Socket解析器,解析器一层层访问DNS服务器,得到域名对应的IP地址。
- 有了IP地址和HTTP请求之后,浏览器应用程序需要控制流程转移,调用OS中的Socket库,Socket库本质上是利用了操作系统中的协议栈发送消息。
- 具体调用Socket库发送消息的过程是:
- 客户端初始化,生成一个套接字描述符,并且随意分配一个端口
- Socket库connect函数向服务器发起连接,连接的具体服务器套接字在IP:80位置上,客户端将自己套接字的端口告知服务器,两个套接字之间形成管道,连接完成。
- 客户端write发送HTTP请求。
- 服务器接收到请求,生成HTTP响应(HTTP响应包括了状态行,消息头,消息体)
- 客户端read接收HTTP响应,将HTTP响应写入相应的缓冲内存区域。
- 控制流程回到浏览器,浏览器读取缓冲内存区域,显示HTTP响应中的消息体的内容(HTML代码是文本形式,图片二进制,视频二进制)