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

相关文章
|
27天前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
44 6
|
27天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
38 2
|
1月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
1月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
145 5
|
1月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
36 1
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
33 1
|
2月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
279 3
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
2月前
|
网络协议 安全 网络安全
Cisco-网络端口地址转换NAPT配置
Cisco-网络端口地址转换NAPT配置
|
2月前
|
运维 监控 安全