当前位置: 首页 > java >正文

Linux C学习路线全概括及知识点笔记3-网络编程

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

1,TCP/IP 协议分层结构总览(了解功能即可)

TCP/IP 模型共分为四层,从上到下依次为:

层级名称主要协议功能概要
应用层 (Application Layer)HTTP, FTP, DNS, SMTP 等提供用户应用服务,定义应用数据的格式和交换规则
传输层 (Transport Layer)TCP, UDP提供端到端的传输控制和错误校验,保证数据可靠或快速传输
网络层 (Internet Layer)IP, ICMP, ARP实现跨网络通信,负责逻辑寻址和路由选择
网络接口层(或链路层) (Link Layer)Ethernet, PPP, MAC等管理物理连接,定义数据在本地网络中如何传输

1.1 各层功能详解

1.1.1 应用层(Application Layer)

        功能职责:

                (1)为用户提供网络应用服务

                (2)定义应用数据的格式、编码、会话控制等

        典型协议:

协议功能说明
HTTP网页浏览(超文本传输)
FTP文件传输
SMTP邮件发送
POP3/IMAP邮件接收
DNS域名解析(将域名转换为IP地址)
Telnet远程登录

PS:你在浏览器输入网址并回车,实际使用的是HTTP协议与服务器通信。

1.1.2 传输层(Transport Layer)

功能职责:

        (1)端到端的通信控制

        (2)建立/管理/终止连接

        (3)数据分段、重组

        (4)流量控制、差错检测与纠正

协议典型:

协议特性适用场景
TCP面向连接、可靠、顺序、校验网页、文件传输、邮件等
UDP无连接、不保证顺序或完整性视频直播、DNS、语音等实时场景

PS:如果你下载文件,通常使用TCP;而如果在看直播,则往往用的是UDP。

1.1.3 网络层(Internet Layer)

功能职责:

        (1)实现IP地址之间的通信

        (2)路由寻址和转发

        (3)分片与重组

典型协议:

协议功能说明
IP逻辑寻址与分包转发
ICMP网络错误/状态信息传递(如ping)
ARP将 IP 地址解析为 MAC 地址

说明:

        IP协议是核心,提供无连接的传输服务(不保证可靠性)

        ICMP是网络层的“诊断助手”,如ping命令使用它

        ARP在局域网中用于解决“IP->MAC”的问题

1.1.4 网络接口层(Link Layer)

又成链路层、主机到网络层(Host-to-Network Layer)

功能职责:

        (1)实际的数据帧传输

        (2)硬件地址识别(如MAC)

        (3)帧校验、介质访问控制等

典型协议/技术:

技术或协议功能说明
Ethernet以太网,局域网最常用的链路协议
PPP点对点协议,多用于拨号接入
WLAN/Wi-Fi无线局域网
MAC 协议媒体访问控制,控制谁可发数据

PS:数据包经过这一层,被封装成帧并在实际网线上(或无线)传输

1.2 整体数据传输过程示意

        以一个网页请求为例(如访问 https://www.baidu.com):

        (1)应用层(HTTP):构造网页请求

        (2)传输层(TCP):将请求封装成可靠的数据段

        (3)网络层(IP):决定如何将数据段送往目标服务器的IP地址

        (4)链路层(以太网/Wi-Fi):将数据帧通过物理媒介发送出去

服务器响应时则逆向传输回来。

1.3 总结与记忆建议

层级关键词功能一句话记忆
应用层用户交互用户与网络的接口(让程序会说话)
传输层端到端通信保证数据“准时准量”到对方(握手或快传)
网络层寻址与路由找到目的 IP 的路径(决定去哪儿)
网络接口层局域链路传输数据如何走“最后一公里”(怎么走、给谁送)

2,什么是Socket API?

        Socket(套接字)是应用层与传输层之间通信的编程接口,本质上是一个通信端点。Socket编程允许我们在用户空间使用TCP或UDP协议,进行网络通信。

        TCP/IP 协议栈中的 传输层(TCP/UDP)被Socket抽象为统一接口,因此不同协议的通信流程具有高度一致性,区别在于细节控制。

2.1 Socket 编程核心 API(UNIX/Linux平台)

下表是主要的 socket API 函数及其用途:

函数说明适用于
socket()创建 socket 对象TCP/UDP
bind()绑定本地地址和端口TCP/UDP
listen()监听连接请求(TCP 专用)TCP
accept()接受连接请求,返回新的 socket(TCP)TCP
connect()主动连接服务器TCP
send()/recv()发送和接收数据TCP
sendto()/recvfrom()发送和接收数据(指定目标地址)UDP
close()关闭 socketTCP/UDP

2.2 TCP Socket 编程流程

TCP服务器端流程图:

TCP客户端流程图:

2.3 TCP示例代码

2.3.1 TCP服务端(C语言示例)

int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sd = {0,};
sd.sin_family = AF_INET;
sd.sin_addr.s_addr = htnol(INADDR_ANY);
sd.sin_port = htons(12345);bind(sockfd, (struct sockaddr *)&sd, sizeof(sd));
listen(sockfd, 5);int connfd = accept(sockfd, NULL, NULL);
char buffer[1024] = {0};
recv(connfd, buffer, sizeof(buffer), 0);
send(connfd, "Hello from server", 17, 0);close(connfd);
close(sockfd);

2.3.2 TCP客户端(C语言示例)

int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sd = {0, };
sd.sin_family = AF_INET;
sd.sin_port = htons(12345);inet_pton(AF_INET, "1237.0.0.1", &sd.sin_addr);connect(sockfd, (struct sockaddr *)&sd, sizeof(sd));send(sockfd, "Hello from client", 17, 0);
char buffer[1024] = {0, };
recv(sockfd, buffer, sizeof(buffer), 0);close(sockfd);

2.4 UDP socket编程流程

UDP服务器端流程:

UDP客户端流程:

2.5 UDP示例代码

2.5.1 UDP服务端

int sockfd = socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in serd = {0, }, clid = {0, };
skcklen_t len = sizeof(clid);serd.sin_family = AF_INET;
serd.sin_addr.s_addr = htonl(INADDR_ANY);
serd.sin_port = hton(12345);bind(sockfd, (struct sockaddr *)&serd, sizeof(serd));char buffer[1024] = {0, };
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&clid, &len);
sendto(sockfd, "UDP server reply", 16, 0, (struct sockaddr *)clid, &len);close(sockfd);

2.5.2 UDP客户端

int sockfd = socket(AF_INET, SOCK_DGRAM, 0);structt sockaddr_in serd = {0, };
serd.sin_family = AF_INET;
serd.sin_prot = htons(12345);
inet_pton(AF_INET, "127.0.0.1", &serd.sin_addr);sendto(sockfd, "UDP client hello", 17, 0, (sturct sockaddr *)&serd, sizeof(serd));
char buffer[1024] = {0, };
recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL);close(sockfd); 

2.6 TCP vs UDP 对比表格

特性TCPUDP
是否连接有连接(可靠)无连接(不可靠)
数据传输单位字节流(stream)报文(datagram)
是否保证顺序
是否保证可靠性是(有确认、重传、流控、拥塞控制)
适合场景文件传输、网页、邮件等实时语音、视频、DNS、NTP、广播等

2.7 Socket 编程核心函数原型与参数说明

1. int socket(int domain, int type, int protocol);
作用:创建一个套接字参数:domain:协议族,如 AF_INET(IPv4)或 AF_INET6type:套接字类型,如 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)protocol:通常设为 0(自动选择),或指定 IPPROTO_TCP / IPPROTO_UDP2. int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
作用:将 socket 绑定到本地地址(IP + 端口)参数:sockfd:由 socket() 返回的描述符addr:本地地址结构体指针,如 struct sockaddr_inaddrlen:地址结构体的长度(sizeof(struct sockaddr_in))3. int listen(int sockfd, int backlog);
作用:监听指定 socket,使其成为被动连接等待状态(仅用于 TCP)参数:sockfd:由 socket() 返回的描述符backlog:等待连接队列的最大长度4. int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
作用:从连接队列中取出一个连接(TCP 专用)参数:sockfd:监听 socket 的描述符addr:保存客户端地址信息的结构体指针addrlen:输入输出参数,指示地址结构体长度5. int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
作用:客户端发起连接请求(TCP)参数:sockfd:由 socket() 返回的描述符addr:服务器地址结构体指针addrlen:地址结构体长度6. ssize_t send(int sockfd, const void *buf, size_t len, int flags);
作用:向已连接的 socket 发送数据(TCP)参数:sockfd:连接 socket 的描述符buf:指向发送数据的缓冲区len:缓冲区长度flags:通常为 0,可指定 MSG_
http://www.xdnf.cn/news/13456.html

相关文章:

  • AI 视频创作技术全解析:从环境搭建到实战落地​
  • 2025年的WWDC所更新的内容
  • JS 原型与原型链详解
  • mac redis以守护进程重新启动
  • MySQL之事务与视图
  • 【笔记】Kubernetes 中手动及自动化证书更换步骤及注意事项
  • 如何开启自己计算机远程桌面连接功能? 给别人或异地访问
  • 8.Vue的watch监视
  • 从sdp开始到webrtc的通信过程
  • 第二十六课:手搓梯度增强
  • 深入浅出:C++深拷贝与浅拷贝
  • Jadx(开源AVA反编译工具) v1.5.0
  • 编译线程安全的HDF5库
  • Python环境搭建竞赛技术
  • 代码训练LeetCode(29)最后一个单词的长度
  • Github月度新锐热门工具 - 202506
  • PyTorch:让深度学习像搭积木一样简单!!!
  • 邮件限流器
  • 《Redis》持久化
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice实现word 文档中的table插入新行并赋值
  • 论文略读:RegMix: Data Mixture as Regression for Language Model Pre-training
  • CATIA高效工作指南——常规配置篇(四)
  • deepbayes: VI回顾和GMM近似推断
  • 分布式事务的炼狱:Spring Cloud 微服务架构下的数据一致性保障战
  • 时序数据库Influxdb3 core安装
  • 中兴B860AV1.1_晨星MSO9280芯片_4G和8G闪存_TTL-BIN包刷机固件包
  • Android 实现可拖动的ImageView
  • RTX4060安装cuda12.3 cudnn8.9
  • Neo4j批量数据导入完全指南:高效处理大规模数据
  • MyBatis-Plus 混合使用 XML 和注解