首页 > 系统相关 >Linux网络:网络字节序及socket套接字

Linux网络:网络字节序及socket套接字

时间:2024-07-08 21:55:00浏览次数:18  
标签:sockaddr 字节 int 网络 地址 socket Linux 端口号 序及

目录

一、认识端口号

二、浅谈TCP及UDP协议

三、网络字节序

四、socket编程

4.1常见接口

4.2sock API

4.2.1sockaddr

4.2.2sockaddr_in

4.2.3in_addr


一、认识端口号

端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 + 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用。 我们之前在学习系统编程的时候 , 学习了 pid 表示唯一一个进程 ; 此处我们的端口号也是唯一表示一个进程 . 那么这两者之间是怎样的关系? 端口号是在网络层的概念,而pid是在操作系统层的概念,将两者分开进行各自的维护可以大大降低耦合性,实现互不影响互不干扰的效果,真正意义上做到低耦合。 我们上网,无非就是两种动作:a.把远处的数据拉取到本地b.把我的数据发送到远端。 大部分的网络通信行为,都是用户触发的。计算机中,谁表示用户呢?进程!

二、浅谈TCP及UDP协议

TCP(Transmission Control Protocol 传输控制协议): 传输层协议   有连接   可靠传输   面向字节流 UDP(User Datagram Protocol 用户数据报协议): 传输层协议  无连接  不可靠传输  面向数据报

三、网络字节序

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分: 1、发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出; 2、接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存; 3、因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址. 4、TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节. 5、不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据; 6、如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可 为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。 这些函数名很好记,h表示host,n表示network,l表示32位长整数,s表示16位短整数。 例如htonl表示将32位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送。 如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回; 如果主机是大端字节序,这些 函数不做转换,将参数原封不动地返回。

四、socket编程

4.1常见接口

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);

// 绑定端口号 (TCP/UDP, 服务器) address的结构体大小要转换为socklen_t 格式
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);

4.2sock API

socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及UNIX Domain Socket. 然而, 各种网络协议的地址格式并不相同。 IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位地址类型, 16位端口号和32位IP地址. IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6. 这样,只要取得某种sockaddr结构体的首地址, 不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容. socket API可以都用struct sockaddr *类型表示, 在使用的时候需要强制转化成sockaddr_in; 这样的好处是程序的通用性, 可以接收IPv4, IPv6, 以及UNIX Domain Socket各种类型的sockaddr结构体指针做为参数。

4.2.1sockaddr

sockaddr在头文件#include <sys/socket.h>中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下:

struct sockaddr {  
     sa_family_t sin_family;//地址族
    char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息               
   }; 

4.2.2sockaddr_in

sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下:

4.2.3in_addr

in_addr 用来表示一个 IPv4 的 IP 地址 . 其实就是一个 32 位的整数

标签:sockaddr,字节,int,网络,地址,socket,Linux,端口号,序及
From: https://blog.csdn.net/2201_75880188/article/details/140235254

相关文章

  • matlab中神经网络预测模型的调用
    本章以一道多自变量的例题来表述如何用调用matlab的包进行神经网络预测目录一、问题提出二、训练集,验证集和测试集三、使用神经网络进行训练1.导入数据2.选择训练方法四、结果解读1.性能图2.回归图3.训练方法比较4.保存结果五、进行预测一、问题提出如图所示,现在有401个x变量共......
  • MATLAB神经网络拟合工具的使用
     本文以MATLABR2022a为例,介绍使用软件自带的神经网络拟合工具箱。首先,准备好需要分析的数据,包括预测变量、响应,在试验分析中分别对应试验因素、试验结果。每一组预测变量均对应一个响应,试验中一组试验因素对应一个试验结果。预测变量的数量、响应的数量分别对应神经网络中的......
  • 如何安全隐藏IP地址,防止网络攻击?
    当您想在互联网上保持隐私或匿名时,您应该做的第一件事就是隐藏您的IP地址。您的IP地址很容易被追踪到您,并被用来了解您的位置。下面的文章将教您如何隐藏自己,不让任何试图跟踪您的活动的人发现。什么是IP地址?首先,让我们稍微讨论一下什么是IP地址。您需要知道的是,每......
  • 如何安全隐藏IP地址,防止网络攻击?
    当您想在互联网上保持隐私或匿名时,您应该做的第一件事就是隐藏您的IP地址。您的IP地址很容易被追踪到您,并被用来了解您的位置。下面的文章将教您如何隐藏自己,不让任何试图跟踪您的活动的人发现。什么是IP地址?首先,让我们稍微讨论一下什么是IP地址。您需要知道的是,每......
  • 网络安全——文件上传漏洞
    目录一、文件上传漏洞概述二、文件上传漏洞原因三、常见绕过上传技术四、实战模拟PASS1(绕过JS)PASS2(绕过contnet-type)PASS3(绕过黑名单)PASS4(htaccess重写解析绕过)PASS5(黑名单大小写绕过)PASS6(空格绕过)PASS7(windows系统特征绕过)PASS8(NTFS交换数据流::$D......
  • Linux-网络安全私房菜
    目录前言入门基本指令篇章man帮助手册字符集设置cdlsdatemkdirtouch-d-m修改主机名rmshredrename重命名mv移动tar打包与压缩打包但是不压缩打包且压缩更新包文件解压对应的包zip压缩文件命令cat查看显示行号交互写入(追加)显示空行more和lesshead和tailheadtail(能够实时监测内容)-......
  • Linux应急响应——知攻善防应急靶场-Linux(1)
    目录查看history历史指令查看开机自启动项异常连接和端口异常进程定时任务异常服务日志分析账户排查总结靶场出处是知攻善防Linux应急响应靶机1前景需要:小王急匆匆地找到小张,小王说"李哥,我dev服务器被黑了",快救救我!!挑战内容:黑客的IP地址遗留下的三个flag开机后桌面找到......
  • Franka Linux 设置实时内核 PREEMPT_RT
    为了使用控制您的机器人libfranka,工作站PC上的控制器程序必须在内核下以实时优先级PREEMPT_RT运行。本节介绍了修补内核以支持 PREEMPT_RT并创建安装包的过程。内核不支持NVIDIA二进制驱动程序PREEMPT_RT。 sudoapt-getinstallbuild-essentialbccurlca-certific......
  • RockyLinux9.4升级Linux内核6.X️
    RockyLinux9.4升级Linux内核6.X......
  • 网络安全--计算机网络安全概述
    目录网络信息系统安全的目标网络安全的分支举例P2DR模型信息安全模型访问控制的分类多级安全模型网络信息系统安全的目标保密性保证用户信息的保密性,对于非公开的信息,用户无法访问并且无法进行非授权访问,举例子就是:防止信息泄露。完整性保证用户的信息完整性,就是不允......