【网络是怎么连接的】—— 2.1 创建套接字

目录

2.1.1 协议栈的内部结构

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

2.1.3 调用 socket 时的操作


2.1.1 协议栈的内部结构

TCP/IP 软件分层结构

协议栈内部包括TCP/UDP/IP,浏览器、邮件等一般应用程序使用 TCP 收发数据,DNS 查询等收发较短的控制数据使用 UDP

在互联网上传送数据时,数据被分成一个个网络包 , IP 协议负责将网络包发送给通信对象。另外,IP还包括 ICMP 协议ARP 协议。 

ICMP: 用于告知网络包传送过程中产生的错误以及各种控制消息。

ARP :用于根据 IP 地址查询相应的以太网 MAC 地址 。

接下来,网卡驱动程序负责控制网卡硬件,网卡负责完成实际的收发操作。


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

协议栈内部有一块内存空间用于存放控制通信操作的控制信息,包括通信对象的 IP 地址、端口号、通信操作的进行状态等。其实可以说,套接字就是这些控制信息。

协议栈在执行操作时需要参阅这些控制信息。例如,数据发出后协议栈需要等待响应信息,但如果数据丢失,不能一直等,而需要经过一段时间后重发,这时候套接字就需要记录是否收到响应以及经过了多长时间。

在 Windows 中可以用netstat 命令显示套接字内容,(Win+R,输入cmd回车,输入netstat回车)

如果加上参数 -ano 还会显示 所有套接字/IP地址和端口号/使用该套接字的程序PID

这里的每一行相当于一个套接字,当然套接字还有一些其他控制信息图中没显示。

另外,状态LISTENING表示等待对方连接,ESTABLISHED表示完成连接并正进行通信。

该行表示正在使用IP地址127.0.0.1的网卡与IP地址为127.0.0.1的对象进行通信,本机使用6000的端口,而对方使用54587的端口。 

而第一行这个则表示PID为960的程序正在等对方连接,IP0.0.0.0表示还没开始通信,也就没有绑定IP地址和端口,另外,如果是UDP协议的话,显示 * ,不绑定对方地址和端口。


2.1.3 调用 socket 时的操作

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

 应用程序调用 socket 申请创建套接字,协议栈执行操作。

协议栈首先会分配用于存放一个套接字所需的内存空间,并写入初始状态的控制信息。接下来,将表示这个套接字的描述符(1.4.2中已介绍,用来区分协议栈中的多个套接字)告知应用程序。

应用程序收到描述符后,向协议栈进行收发数据委托时就需要提供这个描述符。通过描述符确定了相应的套接字,协议栈就能够获取所有的相关信息。


本节完。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值