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

https://blog.csdn.net/shang_0122/article/details/104273944?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164516566216780261952215%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164516566216780261952215&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-104273944.first_rank_v2_pc_rank_v29&utm_term=%E5%A5%97%E6%8E%A5%E5%AD%97&spm=1018.2226.3001.4187

引出套接字

我们知道网络应用通信(应用层)的实质是进程之间的通信
如:两个主机(电脑)上的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)

总结

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值