【好书精读】网络是怎样连接的 之 创建套接字

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

目录

协议栈的内部结构

套接字的实体就是通信控制信息

真正的套接字

调用 socket 时的操作



从应用程序收到委托后 协议栈通过 TCP 协议收发数据的操作可以分为 4 个阶段 首先是创 建套接字 在这个阶段 我们将介绍协 议栈的内部结构、套接字的实体,以及创建套接字 的操作过程 到这 大家应该可以对套接字到底是什么样的一个东西有一个比较具体 的理解

协议栈的内部结构

图中最上面的部分是网络应用程序

浏览器电子邮件客户端Web 服务器电子邮件服务器等程序

应用程序的下面是 Socket 库,其中包括解析器 解析器用来向 DNS服务器发出查询
再下面就是 操作系统内部 其中包括协议栈
协议栈的 上半部分 有两块 分别是负责用 TCP 协议收发数据的部分和负责用 UDP 协议收发数 据的部分
浏览器、邮件等一般应用程序收发数据时用 TCP;
DNS 查询等收发较短的控制数据时用 UDP
下面一半 是用 IP 协议控制网络包收发操作的部分
IP 中还包括 ICMP A 协议和 ARP B 协议。
ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息 ARP 用于根据 IP 地址查询相应的以太网 MAC 地址

IP 下面的网卡驱动程序负责控制网卡硬件 而最下面的网卡则负责完成实际的收发操作 也就是对网线中的信号执行发送和接收的操作

套接字的实体就是通信控制信息

在协议栈内部有一块用于存放控制信息的内存空间 这里记录了用于 控制通信操作的控制信息
例如通信对象的 IP 地址 端口号 通信操作的进行状态等
本来套接字就只是一个概念而已 并不存在实体 如果一定要赋予它一个实体 我们可以说这些控制信息就是套接字的实体 或者说 存放控制信息的内存空间就是套接字的实体
协议栈在执行操作时需要参阅这些控制信息
协议栈是根据套接字中记录的控制信息来工作的

真正的套接字

 

图中每一行相当于一个套接字,当创建套接字时,就会在这里增加一行新的控制信息

举个例子:

比如第 8
它表示 PID B 4 的程序正在使用 IP 地址为 10.10.1.16 的网卡与 IP 地址为10.10.1.18 的对象进行通信
此外我们还可以看出 本机使用 1031 端口 对方使用 139 端口 139 端口是 Windows 文件服务器使用的端口
因此 我们就能够看出这个套接字是连接到一台文件服务器的
我们再来看第 1 这一行表示 PID 984 的程序正在 135 端口等待另一方的连接 其中 本地 IP 地址和远程 IP 地址都是 0.0.0.0 这表示通信还没开始 IP 地址不 确定

调用 socket 时的操作

浏览器调用 socket connect Socket 库中的程序组件时 协议栈内部是如何工作的

浏览器委托协议栈使用 TCP 协议来收发数据

创建套接字的阶段如图 ①所示

应用程序调用 socket 申请创建套接字 协议栈根据应用程序的申请执行创建套接字的操作
创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态。
将表示这个套接字的描述符告知应用程序(描述符相当于用来区分协议栈中的多个套接字的号码牌)
收到描述符之后 应用程序在向协议栈进行收发数据委托时就需要提供这个描述符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值