计算机网络——到底什么是套接字?

引出套接字

我们知道网络应用通信(应用层)的实质是进程之间的通信
如:两个主机(电脑)上的qq是通过电脑运行qq这个程序(进程)通过网络传输数据进行聊天

根据五层理论模型,应用层接收的是传输层的数据。

那么问题来了😁
1.传输层是直接连接的应用层嘛
2.一台主机上有很多进程,如何把传输层的数据发送到特定进程

这就引出了今天的主角——套接字(套接字API)
在这里插入图片描述

什么是套接字(套接字API)

在大多数教材上是没有对这两个概念区别的,所以我看书的时候怎么都不能给它下一个定义。其实这两个概念可以分开看

套接字:是传输层通信端点抽象,仅仅是一个名词
套接字API:网络编程接口(函数集合)

套接字与套接字API的关系:API创建了套接字,并完成了套接字的功能,所以一般教科书中不分这两者的概念

套接字的功能

从上图的可以看出,传输层真正连接的是套接字,通过套接字将数据发送给特定的进程

传输层如何标识套接字
通过ip地址+端口号标识套接字,套接字绑定了主机端口号
ip地址对应相应主机
进程监控相应端口

注意:一台主机上一个端口号只能对应一个进程,一个进程可以监控多个端口

所以网上给的定义:套接字=ip地址+端口号
ip地址及端口号会封装到传输层的数据(报文)中

调用套接字API

而这相关的操作通过调用套接字API完成
基于传输层协议TCP
在这里插入图片描述
基于传输层协议UDP
在这里插入图片描述
常用的Socket API函数

  1. scoket():创建并返回套接字
  2. bind():套接字绑定本地端口

仅仅介绍两个吧,其他函数通过上图就可以看出哪些在tcp或者udp中使用,哪些在客户机或者服务机上使用

套接字的分类

主要是根据传输层两个协议分的

1.流式套接字。基于TCP,TCP协议是将数据看作无记录无边界的字节流,实现数据无差错、无重复的传输。所以称接受此类数据的套接字为流式套接字,内设流量控制。

2.数据报套接字。基于UDP,数据包以独立的形式发送传输过程数据可能被丢失。所以称接收此类数据的套接字为数据报套接字。

3.原始套接字。该套接字允许对较低层协议(如IP或ICMP)进行直接访问。基本上很少用

为什么要有套接字(套接字API)

是为了支持开发人员开发基于网络通信的应用,所以OS提供了基于TCP或者UDP的应用程序编程接口,就是套接字(套接字API)

总结

套接字位于传输层及应用层之间,是一个应用编程接口,应用程序通过调用此接口进行传输接收数据

我觉得弄懂了套接字及工作方式,两边的传输层及应用层就好理解了

  • 71
    点赞
  • 222
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿成长轨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值