【网络】socket套接字基础知识
目录
IP地址和端口号
源IP地址和目的IP地址
端口号
源端口号和目的端口号
TCP/UDP协议
网络字节序
大小端
如何定义网络数据流地址
网络字节序和主机字节序的转换
socket编程接口
sockaddr结构
IP地址和端口号
源IP地址和目的IP地址
在IP数据包头部中,会有两个地址,一个叫做源IP地址,一个叫做目的IP地址。源IP地址是指发送数据包的主机的IP地址,而目的IP地址是指接收数据包的主机的IP地址。
在互联网中,每个主机都有一个唯一的IP地址,用于标识该主机的身份和位置。在数据包传输过程中,源IP地址和目的IP地址是用于确定数据包的来源和目的地的重要信息,以便正确地将数据包传输到目标主机。
但是,光有IP地址是不够的。假设你现在用微信向你的好朋友发送了一条消息,有了IP地址能将消息发送到对方的机器上。但是还需要一个特定的标识来区分这个数据要给哪一个程序进行解析。
基于上述的问题,引出端口号的概念,通过IP地址+端口号就能将数据发送给指定主机的某一个程序了。主机的唯一性由公网IP标识,而主机上的服务进程由端口号标识。
端口号
端口号(port)是传输层协议的内容。
●端口号是一个2字节16位的整数。
●端口号用来标识一个进程,告诉操作系统,当前的数据要交给哪一个进程来处理。
●IP地址+端口号能够标识网络上的某一台主机的某一个进程。
●在同一台主机上,同一个端口号不能标识多个进程。不同主机上的标识各自进程的端口号可以相同。
●一个进程可以绑定多个端口号,但一个端口号不能被多个进程绑定。
小疑问:如果端口号的功能是用来标识一个进程,为什么不用PID呢?两者之间有什么关系。
答:1.如果使用PID,进程每次重新启动,PID都可能会更改,PID变了,网络部分也要进行修改。采用端口号的方式,操作系统是操作系统,网络是网络(解耦)。2.服务器的唯一性不能做任何改变(IP+Port)。3.不是所有的进程都需要提供网络服务或者请求,但是所有进程都需要PID。
源端口号和目的端口号
源端口号和目的端口号在计算机网络中用于标识数据包发送和接收的进程或应用程序。源端口号是发送方计算机上的端口号,目的端口号是接收方计算机上的端口号。在TCP/IP协议中,源端口号和目的端口号都是16位的整数,取值范围是0~65535。
TCP/UDP协议
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)都是互联网协议中的传输层协议,用于在网络上传输数据。
TCP是一种可靠的、面向连接的协议,它通过三次握手建立连接,保证数据的可靠传输。TCP在传输数据时,会对数据进行分段,并为每个分段进行编号,接收方会对每个分段进行确认,如果发送方没有收到确认,就会重新发送数据。TCP还会对数据进行流量控制和拥塞控制,以避免网络拥塞和数据丢失。
●传输层协议●有连接●可靠传输●面向字节流
UDP是一种不可靠的、无连接的协议,它不会对数据进行分段和编号,也不会进行确认和重传。UDP适用于需要快速传输数据的应用,如实时音视频传输、在线游戏等。由于UDP没有TCP那么多的控制机制,因此它的传输效率更高,但也更容易出现数据丢失和网络拥塞的问题。
●传输层协议●无连接●不可靠传输●面向数据报
总的来说,TCP适用于需要可靠传输的应用,而UDP适用于需要快速传输的应用。需要注意的是上述的可靠和不可靠是中性词,只是特点不同,适用场景不同。
网络字节序
内存中的多字节数据相对于内存地址由大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流同样有大端小端。
●发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出。
●接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存。
●网络数据流的地址规定:先发出的数据是低地址,后发出的数据是高地址。
●TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。
●不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据。
●如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可。
大小端
小端模式下,数据的低位字节存储在内存的低地址处,高位字节存储在内存的高地址处。
大端模式下,数据的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。
如何定义网络数据流地址
TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。
网络字节序和主机字节序的转换
在上述的函数名中,h表示host,n表示network。l表示32位长整数。s表示16位短整数。如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回。如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。
socket编程接口
// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
sockaddr结构
在我们进行网络通信的过程中,套接字的种类不止一种,比如:网络套接字编程,原始套接字和unix域间套接字。
网络套接字(Socket),它提供了一组用于网络通信的函数和数据结构,使得应用程序可以通过网络与其他应用程序进行通信。通过网络套接字,应用程序可以实现不同计算机之间的数据传输和通信。
原始套接字(Raw Socket),它允许程序直接访问网络协议栈,从而可以发送和接收任意类型的网络数据包,包括未经处理的数据包。相比于传统的套接字接口,原始套接字提供了更高的灵活性和更细粒度的控制,但也需要更多的编程工作和更高的权限。
域间套接字(Domain Socket),它只能在同一台计算机上的进程之间进行通信。与传统的网络套接字不同,域间套接字不需要经过网络协议栈的处理,因此具有更高的性能和更低的延迟。域间套接字通常用于本地进程之间的通信,比如在同一台计算机上的不同进程之间共享数据或者进行进程间通信等。
如果给不同的套接字各自设计一套接口就太麻烦,所以使用sockaddr结构的方式,通过给一套接口传递不同的参数,就解决了所有网络或者其他问题下的通信问题。
下述示意图以sockaddr_in(inet,网络通信)与sockaddr_un(unix,域间套接字)两个套接字类型为例:
在我们想要进行网络通信的时候,填充的是sockaddr_in(inet,网络通信)与sockaddr_un(unix,域间套接字)的字段。在参数传递的时候强转成sockaddr传递。
不管传递的参数是什么,在函数内部都当做sockaddr看待,根据前两个字节在做判断强转回去。这样一来,通过一套接口就可供不同的套接字调用。
相关文章:

【网络】socket套接字基础知识
目录 IP地址和端口号 源IP地址和目的IP地址 端口号 源端口号和目的端口号 TCP/UDP协议 网络字节序 大小端 如何定义网络数据流地址 网络字节序和主机字节序的转换 socket编程接口 sockaddr结构 IP地址和端口号 源IP地址和目的IP地址 在IP数据包头部中,会…...

Go语言介绍以及Go语言环境安装
初步介绍: Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源&am…...

FPGA纯verilog实现CameraLink视频接收和发送,附带工程源码和技术支持
目录 1、前言2、CameraLink协议基础3、目前我已有的CameraLink收发工程4、设计方案5、CameraLink解码模块详解6、CameraLink编码模块详解7、vivado工程详解8、上板调试验证9、福利:工程代码的获取 1、前言 FPGA实现CameraLink视频编解码目前有两种方案:…...

k8s中的service、api-server、kube-proxy有什么区别
在Kubernetes(K8s)中,Service、API Server和kube-proxy是三个不同的组件,它们在集群中扮演着不同的角色和功能。下面我将为你解释它们之间的区别: 1. Service(服务): Service是K8s中…...

记录::opencv编译,cmake编译vs动态库
环境:window7,cmake-gui,vs2013 opencv:3.4.4 opencv_contrib:3.4.4(nonfree模块,主要为了用sift) 链接:https://pan.baidu.com/s/1OXg2IRaxTLTVqM2PVR2ZFA 提取码&a…...

网易SmartAuto,中文编程就是爽
上一篇我们应该用中文编程发出来后,果不其然不少人很不以为然,还有直说“骗钱的,估计也没人会上当”。这样的反应是在预料之中。 行胜于言,我今天讲一个我们已经用了好几年的产品,用来做UI自动化测试的SmartAuto&#…...

适配器模式那么强大,该怎么使用呢?
适配器模式是一种常用的设计模式,它可以将两个不兼容的接口进行转换,从而使它们之间可以进行交互。在业务开发中,我们经常需要将不同的系统或服务进行整合,而这些系统或服务往往有着不同的接口和数据格式。适配器模式提供了一种解…...

[极客大挑战 2019]PHP1
既然提到了备份网站估计也是存在着网站备份文件,可以先用御剑扫一下 啥都没扫出来,但是上回做文件备份的题目时收集了一些关于常用备份文件的文件名和后缀,可以直接使用burp抓包爆破,果然爆破出一个www.zip文件 访问下载好文件就有…...

PID 学习
采样数据: X 1 , X 2 , X 3 . . . , X ( k − 1 ) , X k X_1,X_2,X_3...,X_(k-1),X_k X1,X2,X3...,X(k−1),Xk E k S v − X k E_kS_v-X_k EkSv−Xk ( S v S_v Sv 是用户设定值) 比例算法: O U T P K p ∗ E k O U T 0 OUT_PK_p*…...

002. java.lang.NumberFormatException: Infinite or NaN,怎么破?
你好,我是YourBatman:当我老了,也写代码;不为别的,只为爱好。 📚前言 如果你工作超5年,100%遇到过这个异常:java.lang.NumberFormatException: Infinite or NaN Infinite中文释义…...

Vue常用的修饰符
Vue常用的修饰符有哪些有什么应用场景 修饰符是什么 在Vue中,修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理 分类、有5种 表单修饰符事件修饰符鼠标按键修饰符键…...

freertos笔记-任务切换
红叶何时落水 任务切换,调用PendSV #define taskYIELD() portYIELD() #define portYIELD() \ { \portNVIC_INT_CTRL_REG portNVIC_PENDSVSET_BIT; \ 通过向中断控制和壮态寄存器 ICSR 的 bit28 写入 1 挂起 PendSV 来启动 PendSV 中断\__dsb( portSY_FULL_READ…...

企业电子招投标采购系统源码之登录页面-java spring cloud
信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...

接口测试|Fiddler弱网测试
Fiddler进行弱网测试 弱网测试 概念:弱网看字面意思就是网络比较弱,我们通称为信号差,网速慢。 意义:模拟在地铁、隧道、电梯和车库等场景下使用APP ,网络会出现延时、中断和超时等情况。 在这里插入图片描述 Fidd…...

Linux-0.11 文件系统super.c详解
Linux-0.11 文件系统super.c详解 模块简介 该模块主要包含了对超级块的一些读写操作。 函数详解 lock_super static void lock_super(struct super_block * sb)该函数的作用是锁定bh块。 cli();//关中断while (sb->s_lock)//如果已经被锁定sleep_on(&(sb->s_wai…...

什么是ChatGPT、历史发展及应用领域
什么是ChatGPT ChatGPT是一种基于深度学习的自然语言处理技术,它可以生成高质量的自然语言文本,该技术是由OpenAI团队开发,旨在使计算机能够像人类一样理解和产生自然语言。ChatGPT使用了深度神经网络和自然语言处理技术,通过对大…...

Spring的创建与使用
目录 1.创建 Spring 项⽬ 1.1 创建一个 maven 项目 1.2 添加 spring 框架支持(spring-context/spring-beans) 2.将 Bean (对象) 存储到 Spring (容器) 中 2.1 在resources中创建一个spring配置文件 2.2 将 Bean 对象存储到 Spring 当中 2.2.1 创建 Bean 对象 2.2.2 将B…...

抖音Flutter插件的使用
Flutter是一个开源的移动应用程序开发框架,由谷歌开发,支持Android和iOS。随着Flutter的发展和成熟,许多人开始使用它来开发跨平台应用程序。本文将介绍如何使用抖音的Flutter插件,以增强Flutter应用程序的功能。 1. 安装Flutter…...

Debezium报错处理系列之六十八:No resolvable bootstrap urls given in bootstrap.servers
Debezium报错处理系列之六十八:No resolvable bootstrap urls given in bootstrap.servers 一、完整报错二、错误原因三、解决方法Debezium报错处理系列一:The db history topic is missing. Debezium报错处理系列二:Make sure that the same history topic isn‘t shared b…...

Python二级编程:分词去重
一、原题 参考编程模板,完善代码,实现以下功能。 利用 jieba 库实现中文分词。对分词后的列表进行去重处理,然后将分词结果中字符数大于等于 3 的词语&…...

Android Wifi开发——Wifi锁(十九)
有的时候我们需要 APP 在手机后台运行,但是会遇到手机一旦息屏或者断网,APP 无法正常运行的情况,这是因为手机屏幕关闭之后,并且其他的应用程序没有在使用 Wifi 的时候,系统大概在两分钟之后,会关闭 Wifi,使得 Wifi 处于睡眠状态。而 Wifi 锁 就是 Android 锁屏后 Wifi …...

Nginx的优化与防盗链
目录 一. 隐藏版本号方法一:配置文件隐藏版本号方法二:源代码隐藏版本号 修改用户与组缓存时间日志切割连接超时更改进程数配置网页压缩配置防盗链fpm参数优化 一. 隐藏版本号 可以使用 Fiddler 工具抓取数据包,查看 Nginx版本,也…...

STP协议
目录 STP的基本概念: 桥ID(Bridge ID): 根桥: 开销(Cost): RPC(根路径开销): Port ID: BPDU:(网桥协议…...

方法——检查参数的有效性
检查参数的有效性 绝大多数方法和构造方法对于传递给它们的参数都会有某些限制,比如对象引用不能为null,比如必须是正数等.你应该在文档中(或者注释中)清楚地指出所有这些限制,并且在方法体的开头检查参数,并且强制施加这些限制.如果做不到这一点,检测出错误的可能性就很小,即…...

七、Docker仓库之nexus搭建(四)
Nexus简介 使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启 Registry。在企业中把内部的一些工具包放入 Nexus 中是比较常见的做法,最新版本 Nexus3.x 全面支持 Doc…...

MySQL 锁机制
1.概述 锁是计算机协调多个进程或线程并发访问某一种资源的机制。 在数据库中,除去计算机硬件资源(CPU、RAM、I/O等)的争用外,数据也是一种供许多用户共享的资源。如何保证并发访问数据的一致性、有效性是所有数据库必须解决的一…...

HACKER KID: 1.0.1实战演练
文章目录 HACKER KID: 1.0.1实战演练一、前期准备1、相关信息 二、信息收集1、端口扫描2、访问网站3、扫描目录4、查看源码5、请求参数6、burpsuite批量请求7、编辑hosts文件8、DNS区域传输9、编辑hosts10、访问网站11、注册账号12、burpsuite抓包13、XML注入14、解密15、登录网…...

Android车载学习笔记1——车载整体系统简介
一、汽车操作系统 汽车操作系统包括安全车载操作系统、智能驾驶操作系统和智能座舱操作系统。 1. 安全车载操作系统 安全车载操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求极高,生态…...

Apache Doris
Apache Doris教程 1.Doris 简介 1.1 Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,…...

GB28181 对接海康平台,解决音视频卡顿问题
GB28181 对接海康平台,解决音视频卡顿问题 一、概述二、问题分析1、设备对比分析2、抓包对比分析3、验证分析结果三、总结四、讨论一、概述 设备使用GB28181协议对接海康平台时,发现音频和视频存在卡顿现象,不是一直卡顿,有时候卡有时候不卡,但是卡顿的时候音视频一起卡顿…...