【好书精读】网络是怎样连接的 之 委托协议栈发送消息

 (该图由AI制作 学习AI绘图 联系我)

目录

数据收发操作概览

创建套接字阶段

连接阶段:把管道接上去

通信阶段:传递消息

断开阶段:收发数据结束


数据收发操作概览

知道了 IP 地址之后 就可以委托操作系统内部的协议栈向这个目标 IP地址发送消息
要发送给 Web 服务器的 HTTP 消息是一种数字信息 digital data
收发数字信息这一操作不仅限于浏览器,对于各种使用网络的应用程序来说都是共通的。

和向 DNS 服务器查询 IP 地址的操作一样 这里也需要使用 Socket 库中的程序组件 不过 查询 IP 地址只需要调用一个程序组件就可以了 而这 里需要按照指定的顺序调用多个程序组件

建立管道的关键在于管道两端的数据出入口 这些出入口称为 套接字

  1. 服务器一方先创建套接字然后等待客户端向该套接字连接管道
  2. 客户端也会先创建一个套接字然后从该套接字延伸出管道最后管道连接到服务器端的套接字上
  3. 当双方的套接字连接起来之后通信准备就完成了
  4. 将数据送入套接字就可以收发数据了
  5. 当数据全部发送完毕之后 连接的管道将会被断开管道断开后 套接字也会被删除
都是由操作系统中的协议栈来执行的

创建套接字阶段

应用程序 浏览器 委托收发数据的过程

首先是套接字创建阶段

Socket 库中的 socket 程序组件 )。

调用 socket 之后 控制流程会转移到 socket 内部并执行创建套接字的操作
套接字创建完成后 协议栈会返回一个描述符 应用程序会将收到的描述符存放在内存中
出示描述符 ,协议栈就能够判断出我们希望用哪一个套接字来连接或者收发数据了
应用程序是通过“描述符”这一类似号码牌的东西来识别套接字的。
描述符:应用程序用来识别套接字的机制
IP 地址和端口号:客户端和服务器之间用来识别对方套接字的机制

连接阶段:把管道接上去

需要委托协议栈将客户端创建的套接字与服务器那边的套接字连接起来
应用程序通过调用 Socket 库中的名为 connect 的程序组件来完成这一操作 )。
当调用 connect 协议栈就会执行连接操作 当连接成功后 协议栈会将对方的 IP 地址和端口号等信息保存在 套接字中 这样我们就可以开始收发数据了

通信阶段:传递消息

通过 Socket 库委托协议栈来完成: 将数据送入套接
应用程序需要在内存中准备好要发送的数据: 根据用户输入的 网址生成的 HTTP 请求消息就是我们要发送的数据
调用 write时 需要指定描述符和发送数据 图 
当消息返回后 ,需要执行的是接收消息的操作:Socket 库中的 read 程序组件委托协议栈来完成的 ③’) 需要指定用于存放接收到的响应消息的内存地址 这一内存地址称 为接收缓冲区

断开阶段:收发数据结束

要调用 Socket 库的 close 程序组件进入断开阶段(图 ④)

套接字之间的管道会被断开 套接字本身也会被删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值