
过完明天就放假了,我们可以出去看树下的小花花啦 ,五一快乐!—— 作者的碎碎念
上一篇文章域名相对应的IP是通过什么机制查询到的,里面写到了通过DNS机制可以拿到域名相对应的IP。拿到了IP以后,我们就可以委托操作系统内部的协议栈向服务器发送消息了。发送给Web服务器的HTTP消息是一种数字消息,收发数字消息不仅仅是浏览器,各种使用网络的应用程序都是共通的,通过DNS服务器查询IP地址和收发数字消息这一操作都适用于任何的网络应用程序,也都是需要使用Socket库中的程序组件。
“输送管道”连接的过程
使用Socket库收发数据操作如图

- 创建套接字 (服务器程序一般在启动时就创建好套接字)
- 将管道连接到服务器端套接字上
- 收发数据
- 断开管道并删除套接字。
这些阶段都是操作系统中的协议栈来执行,委托操作就是调用Socket库中的程序组件来执行收发数据的操作。这些作为程序员应该都可以理解,就是平时我们经常做的事情,写代码来完成数据收发的功能。看下整个过程的图

解释一下图中标出的几个点:
- 准备,是在创建套接字,创建完成会返回一个描述符存放在内存中,这个描述符就是用来区分每一个套接字的。
- 连接,就是与服务器那边的套接字连接起来。图中写的不详细,连接时候是有三个参数的,创建套接字时的描述符、服务器IP地址以及端口号。描述符用来告知哪一个套接字去执行连接操作,IP地址用来查询到要访问的服务器,端口号用来识别到某个套接字。打个很简单的比喻,小红要打电话(家庭号码7136967)找小李,那么小红就是描述符,电话号码是IP地址,小李是端口号。
- 发送,就是消息收发的阶段。
- 断开,套接字管道被断开,本身也会被删除。HTTP协议规定,web服务器发送完消息后要主动执行断开操作,断开操作传达到客户端后,客户端套接字也进入断开操作。
在HTTP协议的1.1版本前,将HTML文档和图片作为单独对象处理,每一次获取数据,都要执行连接、发送消息、接受响应消息、断开的过程,重复连接断开效率低,所以后来HTTP1.1版本就改善了这个缺点,能够在一次连接中收发多个请求响应方法。
怎么理解套接字
刚刚一直在说套接字,感觉很抽象,它本身也只是一个概念而已,我们就理解为它是包含了很多的控制信息的一个东西,比如包含IP地址、端口号、通信操作进行的状态等等。协议栈在执行操作的时候需要参考这些东西,是根据套接字中记录的控制信息来工作的。为了便于理解,来看看真正的套接字,windows中用netstat命令显示套接字,如下图

参考《网络是怎样连接的》对这张图的第8行的解释,它表示PID为4的程序正在使用IP地址为10.10.1.16网卡与IP地址为10.10.1.80的对象进行通信,本机使用103端口,对方使用139端口,139是Windows文件服务器的端口,也就能看出这个套接字是连接到一台文件服务器的。
看完第8行的解释,再加上用心的看完整张图对各项数据的文字解释,应该就懂了。套接字包含的各项信息代表的意思,都是可以靠死记硬背去记住,稍加理解,就可以掌握。
以上就是本文的内容了,介绍了委托操作系统内部的协议栈向服务器发送消息,再结合前两章的内容,HTTP协议之发送和响应消息重点和域名相对应的IP是通过什么机制查询到的?,三章的内容把我们输入URL到访问服务器的这个过程大致的捋了一遍,但是网络是很复杂的,接下来的文章,就是更深入的去理解里面的知识。
本篇文章的图都是出自《网络是怎样连接的》的一书。