1.数据收发操作


见图1.17,收发数据的两台计算机之间连接了一条数据通道。将数据通道想象成一条管道,数据可输入管道达到另一端,且这个管道是双向的。
总体来说收发过程分成四个阶段:
(1)创建套接字(创建套接字阶段)
(2)将管道连接到服务器端的套接字上(连接阶段)
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)
管道在连接时由客户端发起,断开时由双方。
探索浏览器(四) 委托协议栈发送消息

2.创建套接字阶段


类似于访问DNS服务器一样,我们也需要调用Socket库特定程序组件。访问DNS服务器时,我们调用一个叫gethostbyname的程序组件(解析器),那么这次我们会按一定顺序调用Socket组件(图1.18):
①首先创建套接字,我们调用Socket库的socket程序组件即可,同调用解析器过程一样。
②创建完后,协议栈返回描述符用来识别不同的套接字,即每一个数据收发操作都有不同的套接字。
③接下进入连接阶段,见第三节。
探索浏览器(四) 委托协议栈发送消息

3.连接阶段:把管道接上去


现在需要把客户端的套接字和服务器端的套接字连接起来。通过Socket库中的connect组件可完成,它需要指定描述符、服务器IP地址和端口号这三个参数。
①描述符
②服务器IP地址:之前通过DNS服务器已经解析到了。
③端口号:由于客户端和服务器可以有多个套接字,仅凭IP地址无法识别是哪个套接字,所以再加上套接字即可完成。

【补充:描述符和端口号区别】
(1)描述符:应用程序用来识别本机套接字的机制(例如客户端可以有多个应用程序创建套接字,并连接不同的服务器。用描述符来识别属于本程序的套接字) (2)IP 地址和端口号:客户端和服务器之间用来识别对方套接字的机制(不同服务器有规定的端口号,如Web服务器规则为80端口,而客户端调用协议栈发放数据时,协议栈会随机分配一个端口号)

eg.为什么多个客户端可以连接同一个服务器端口
参考:https://blog.csdn.net/qq_25665807/article/details/77884936

4.通信阶段:传递消息


当套接字连接起来后,套接字即可完成传递操作:
①首先用户输入网址生成的HTTP请求消息(发送数据)
②调用write时候,需要指定些描述符和发送数据,然后委托协议栈将数据发送到服务器
③接下来,服务器收到树,并返回给客户端响应消息。
④客户端通过Socket库中的read程序组件委托协议栈接受响应消息,并存放在缓冲区内。

5.断开阶段:收发数据结束


收发数据结束,Socket库的close组件将断开,最终管道断开。
在HTTP1.0工作中, 文档和图片都作为单独的对象来处理,每获取一次数据,就要执行一次连接、发送请求消息、接收响应消息、断开的过程。因此一个网页包含很多图片,就必须冲断多次连接、收发数据、断开操作,非常麻烦。而在HTTP1.1协议中,当所有数据都请求完成后,浏览器会主动触发断开连接的操作。

相关文章:

  • 2021-11-20
  • 2021-06-03
  • 2021-11-22
  • 2021-10-03
  • 2021-10-16
  • 2021-09-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-19
  • 2021-07-14
  • 2022-01-07
  • 2021-07-25
  • 2021-12-01
相关资源
相似解决方案