C语言 网络编程(五)Socket和端口

简介: Socket 是 TCP/IP 五层网络模型中应用层的编程接口,用于实现不同主机间应用程序的双向通信。它作为网络通信的端点,连接应用层与网络协议栈,提供可靠的流式或非流式数据传输服务。Socket 包括流式(SOCKET_STREAM)、数据报(SOCK_DGRAM)和原始套接字(SOCK_RAW)三种类型,分别适用于不同场景。通过 IP 地址和端口号,Socket 能准确识别并转发数据包至指定进程。端口号分为知名端口(1-1023)、注册端口(1024-49151)和动态端口(49152-65535),确保数据准确交付。

Socket

什么是 Socket

TCP/IP 五层⽹络模型的应⽤层编程接⼝称为 Socket API,Socket(套接字) 本身有 "插座" 的意
思,它是对⽹络中不同主机上的应⽤进程之间进⾏双向通信的端点的抽象。

⼀个套接字就是⽹络上进程通信的⼀端,提供了应⽤层进程利⽤⽹络协议交换数据的机制。

从所处的地位来讲,套接字上联应⽤进程,下联⽹络协议栈,是应⽤程序通过⽹络协议进⾏通信的接⼝。

socket 可以看成是两个⽹络应⽤程序进⾏通信时,各⾃通信连接中的端点,这是⼀个逻辑上的概念。

为什么需要 Socket

普通的 I/O 操作:

打开⽂件->读 / 写操作->关闭⽂件

⽹络通信:

TCP/IP 协议被集成到操作系统的内核中,引⼊了新型的 “I/O” 操作,本质
为内核借助缓冲区形成的伪⽂件既然是⽂件,那么我们可以使⽤⽂件描述符引⽤套接字。
与管道类似,Linux系统将其封装成⽂件的⽬的是为了统⼀接⼝,使得读写套接字和读写⽂件的
操作⼀致。

img_82.png

Socket 套接字类型

流式套接字 (SOCKET_STREAM):

提供了⼀个⾯向连接、可靠的数据传输服务,数据⽆差错、⽆重复的发送且
按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收⽅。数据被看
作是字节流,⽆⻓度限制。

数据报套接字 (SOCK_DGRAM):

提供⽆连接服务。数据包以独⽴数据包的形式被发送,不提供⽆差错保证,
数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字 (SOCK_RAW):

可以对较低层次协议如 IP、ICMP 直接访问。

⽹络通信的本质是不同主机,不同进程之间的通信。
img_83.png

两个不同主机,不同进程之间的通信。A 主机需要知道 B 主机的 IP 地址 + 端⼝号。

IP 地址

IP 地址是⽹络上⼀个主机的唯一标识,⽤于在⽹络中标识主机。

Internet 中的主机要与别的机器通信必须具有⼀个 IP 地址

IPV4 中 IP 地址为 32bit

每个数据包都必须携带⽬的 IP 地址和源 IP 地址,路由器依靠此信息为数据包选择路由

我们每个⼈电脑有不同的 CPU,不同 CPU 对数据的存储⽅式不同,分为⼤端模式和⼩
端模式,那么不同的 CPU 数据的存储⽅式不同,如何定义⽹络数据流的存储⽅式呢?

为了统⼀标准,TCP/IP 协议规定,⽹络数据流采⽤⼤端字节序 (低地址存储⾼字节位).
img_84.png

端口号

为了区分⼀台主机接收到的数据包应该转交给哪个进程来进⾏处理,使⽤端⼝号来区分。

TCP 端⼝号与 UDP 端⼝号独⽴

端⼝号⼀般由 IANA (Internet Assigned Numbers Authority, 互联⽹数字分配机构) 管理

端口分类

众所周知的端⼝ : 1 ~ 1023

已经登记的端⼝ : 1024~49151

动态或私有端⼝ :49152~65535

已公用的端口号

80 : HTTP 超文本传输协议

21 : FTP 文件传输协议

22 : SSH 安全 shell

23 : TELNET 远程终端

25 : SMTP 简单邮件传输协议

43 : WHOIS 网络信息查询

53 : DNS 域名系统

69 : TFTP 简单文件传输协议

img_85.png

img_86.png

相关文章
|
5月前
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
|
7月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
189 20
|
8月前
|
安全 网络协议 网络安全
【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态
如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。
158 30
|
8月前
|
监控 安全 网络协议
计算机端口:网络通信的桥梁
计算机端口是网络通信的逻辑通道,支持数据传输和服务识别。本文介绍端口定义、分类(知名、注册、动态端口)、作用及管理方法,涵盖常用知名端口如HTTP(80)、HTTPS(443)等,并强调端口安全配置的重要性,帮助读者全面理解这一关键组件。
456 6
|
7月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
155 0
|
10月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
231 6
|
10月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
10月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
223 2
|
10月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
648 5
|
11月前
|
运维 监控 安全

热门文章

最新文章