套接字及分层模型(一)

2023-11-09

套接字通信

1.内核开发的工程师将网络相关的头文件存储到一个专门目录include/net中,而不是存储到include/linux
2.ISO/OS和TCP/IP参考模型
在这里插入图片描述
应用层:网络服务与最终用户的接口;
表示层:数据的表示,安全及压缩:格式(jpeg,ascii等)
会话层:建立,管理及终止会话;
传输层:定义传输数据的协议端口,以及流控和差错检测;(数据包一旦离开网卡就进入网络传输层)
网络层:进行逻辑地址建立、实现不同网络之间的路由选择;
数据链路层:建立逻辑链接、进行硬件地址寻址、差错检验等等这些功能(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

3.核心基本术语
数据帧----->数据链路层(帧头部和帧数据),帧头部包含接收方主机物理地址的定位等
IP数据由两部组成:数据体头部和帧数据,帧头部包括IP源地址和IP目标地址及其他信息。
数据包----->网络层
数据报----->无连接网络服务的网络层
数据段----->传输层
信息----->网络层以上,经常在应用层
元素----->数据链路层(异步传输模式和交换多兆位数据服务)
数据单元 (data unit):服务数据单元(SDU),协议数据单元(PDU)。

4.创建套接字
套接字不仅可以用于各种传输协议的IP链接,也可以用于内核支持的所有其他地址和协议类型(IPX,Appletalk,本地UNIX套接字,还有在<socket.h>中列出的许多其他类型)
(1)
在这里插入图片描述
sa_family:是地址族类型的变量(取值:AF_UNIX、AF_INET或AF_INET6),地址族类型通常与协议族类型相对应,一般可以混用。所有专用socket地址类型的变量在实际使用时都必须强制转换成通用socket地址类型(sockaddr),因为所有socket编程接口函数使用的地址参数的类型都是sockaddr。
sa_data:14字节协议族
这个数据结构用作bind,connect,recvfrom,sendto等函数参数,指明地址信息。
(2)
在这里插入图片描述
(3)
typedef uint32_t in_addr_t;
在这里插入图片描述
struct in_addr其实就是一个32位的IP地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

套接字及分层模型(一) 的相关文章

  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • shell脚本中是否有互斥/信号量机制?

    我正在 shell 脚本中寻找互斥 信号量 并发机制 考虑以下情况 除非 a 用户不关闭共享文件 否则 b 用户应该无法打开 更新它 我只是想知道如何在 shell 脚本中实现互斥量 信号量 临界区等 在 shell 脚本中实现锁定机制 文
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • Linux 阻塞与非阻塞串行读取

    I have 这段代码 https stackoverflow com questions 6947413 how to open read and write from serial port in c用于在Linux中从串行读取 但我不
  • 如果目录不存在,有没有办法让 mv 创建要移动到的目录?

    因此 如果我在主目录中并且想将 foo c 移动到 bar baz foo c 但这些目录不存在 是否有某种方法可以自动创建这些目录 以便你只需要输入 mv foo c bar baz 一切都会顺利吗 似乎您可以将 mv 别名为一个简单的
  • 是否可以在unix cut 命令中使用字符串作为分隔符?

    如果我想使用字符串作为分隔符来剪切文本列表 这可能吗 例如 我有一个目录 其中一系列 shell 脚本调用相同的 perl 脚本 abc pl 所以当我这样做时 grep abc pl 在该目录中 它给了我以下结果 xyz sh abc p
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 为什么“script”命令会生成 ^[ 和 ^M 字符以及如何使用 vim 搜索和替换删除它们?

    在linux上 使用bash shell 当我使用script命令时 生成的文件称为typescript 当我用 vim 打开该文件时 每一行都包含 M字符 并且有几行 由于我的彩色命令提示符 包含一个字符 我想用任何东西替换这些字符 从而
  • SVN 不断提示我输入密码并拒绝缓存我的凭据

    环境 Eclipse Indigo Ubuntu 11 04 Subclipse 1 6 SVN 客户端 Subclipse RabbitVCS 我通过 svn ssh 连接 我的网址如下所示 svn ssh 我的名字 我的域名 路径 我可
  • 如何从命令行执行 PHP 代码?

    我想执行单个 PHP 语句 例如if function exists my func echo function exists 直接使用命令行 无需使用单独的 PHP 文件 这怎么可能 如果您要在命令行中执行 PHP 我建议您安装phpsh
  • X 服务器使用什么像素格式?

    X 服务器使用什么像素格式 RGBA ARBG BGRA 如果有任何特定格式的话 Update 我专门寻找有关颜色分量顺序和位模式的信息 你的意思是帧缓冲区格式 或者所有支持的像素图格式 无论是哪一种 都取决于您的图形硬件 驱动程序和配置
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 如何防止 CMake 在构建时(而不是安装时)为共享库创建符号链接?

    我正在使用 CMake 在 Linux 上使用 Bullet3 构建一个项目 在构建整个解决方案时 它会构建附加了 SOVERSION 的 Bullet 输出库 并创建一个不带版本的符号链接 对于我的特定场景 我不喜欢这种行为 并且我不想编
  • _dl_runtime_resolve -- 共享对象何时加载到内存中?

    我们有一个对性能要求很高的消息处理系统 最近我们注意到第一条消息比后续消息花费的时间要长很多倍 当它通过我们的系统时 会发生大量转换和消息增强 其中大部分是通过外部库完成的 我刚刚描述了这个问题 使用 callgrind 将仅一条消息的 运
  • 从sourceforge下载最新版本

    我正在尝试在 bash 脚本中从 Sourceforge 下载最新版本的graphicsmagick wget q https sourceforge net projects graphicsmagick files latest dow
  • 为什么 RHEL 上的 bash 中 `read -t` 没有超时?

    Why read t在 RHEL5 或 RHEL6 上从管道读取时不会超时 这是我的示例 在从管道读取数据时 我的 RHEL 盒子不会超时 tail f logfile log grep something read t 3 variabl

随机推荐

  • Python 字符串Ⅱ

    Python 字符串格式化 Python 支持格式化字符串的输出 尽管这样可能会用到非常复杂的表达式 但最基本的用法是将一个值插入到一个有字符串格式符 s 的字符串中 在 Python 中 字符串格式化使用与 C 中 sprintf 函数一
  • Python之算法与时间复杂度

    目录 一 算法的概念 1 1 算法是计算机处理信息的本质 二 时间复杂度T n 2 1 程序执行的基本操作与时间复杂度 2 3 大O记法 2 4 常见时间复杂度 2 5 时间复杂度的几条基本计算规则 重点 2 6 python内置类型时间复
  • Palindrome(补全回文串+最长公共子序列的应用)hdu1513+poj1159+动态规划

    Palindrome Time Limit 4000 2000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 4277 Accepted S
  • 计算机网络基础知识归纳总结整理

    计算机网络基础 基础知识 1 网络模型 OSI分层 7层 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 TCP IP分层 4层 网络接口层 网际层 运输层 应用层 五层协议 5层 物理层 数据链路层 网络层 运输层 应用层 每
  • typeid与decltype

    C 在C 98标准中就部分支持动态类型了 C 98对动态类型支持就是C 中的运行时类型识别RTTI RTTI的机制是为每个类型产生一个type info类型的数据 程序员可以在程序中使用typeid随时查询一个变量的类型 typeid就会返
  • modelsim crack找不到文件packages on . Failed to load package info... 找不到文件 - mgls.dll 找不到文件 - mgls64.dll

    问题描述 最近下载了Modelsim SE 64 2020 4版本 按照提示操作后显示找不到文件packages on Failed to load package info 找不到文件 mgls dll 找不到文件 mgls64 dll
  • MATLAB 软件功能简介

    MATLAB 的名称源自 Matrix Laboratory 1984 年由美国 Mathworks 公司推向市场 它是一种科学计算软件 专门以矩阵的形式处理数据 MATLAB 将高性能的数值计算和可 视化集成在一起 并提供了大量的内置函数
  • imx6ull移植mplayer

    linux开发板播放许嵩的温泉 本文在imx6ul上移植mplayer 软件包 https download csdn net download qq 32605451 12510469 文件包含mplayer zlib alsa lib和
  • java包机制

    包机制是java中管理类的重要手段 开发中 我们会遇到大量同名的类 通过包我们很容易对解决类重名的问题 也可以实现对类的有效管理 包对于类 相当于文件夹对于文件的作用 我们通过package实现对类的管理 package的使用有两个要点 1
  • VS2013写代码时几个常用的快捷键

    0 查看函数具体实现 说明 组合键是同时按 非组合键是按住Ctrl依次按后面的键 1 格式化 格式化全部代码 Ctrl A K F 格式化选中的代码 Ctrl K F 2 注释代码 注释代码 Ctrl K C comment 反注释代码 C
  • Python基本函数:np.multiply()

    Python基本函数 np multiply 一 函数说明 二 函数用法 格式 np multiply a b 注意 文中用到了arange dot reshape函数以及转置 T 一 函数说明 由于multiply是ufunc函数 ufu
  • 【C++】string类浅拷贝的解决方式

    1 浅拷贝 对内存地址的复制 让目标对象指针和源对象指向同一片内存空间 最终在释放的时候造成了多次释放导致程序崩溃 如果类中设计到资源管理时 用户必须要显式实现拷贝构造函数以及赋值运算符重载 因为编译器默认是按照浅拷贝的方式生成的 2 深拷
  • MySQL错误:1146-table 'mysql.proc' doesn't exist

    出现错误原因为 误删除了mysql数据库 解决方案 运行安装程序setup exe修复 repair 博主在删除其他数据库的时候 调用命令drop 误删mysql原数据库 使用mysql安装程序的修复解决 其他mysql命令 source
  • Interview Questions : Linux Device Drivers and Linux Kernel

    本文转载至 http priyaranjan technicalzone blogspot com 2014 01 interview questions embedded system html 1 Describe different
  • 反应器(Reactor)模式-golang探索

    反应器模式 在以前的博文模式设计概述 反应器 Reactor 模式介绍过相关的概念和流程 当时使用了python但是从结果上来看并没有起到很明显的效果 最近在处理有关proxy的项目中 刚刚好涉及到有关性能的问题 故本文探索一下go的反应器
  • vue全局使用sass变量

    需求 框架需要使用scss 之后不想把很多重复的css一个一个写 就提取出来咯 到时候只需要更改scss文件就可以了 不用一个一个的找 1 下载sass 这我下的俩个版本 如果你们下载最新版不兼容可以参考我的版本下载 sass 1 66 1
  • etcd安装

    ETCD安装 windows版本 下载 下载地址https github com etcd io etcd releases 安装 其实也不用安装 下载解压后 得到如下 选中etcd exe 右键 属性 兼容性 以管理员身份运行此程序勾上
  • ajax实现前后端传输流文件(图片)

    ajax实现前后端传输流文件 图片 在参考了一众CSDN大神的帖子之后终于实现了从后端获取图片并正确显示在canvas中 下面是代码 var xmlhttp xmlhttp new XMLHttpRequest xmlhttp open G
  • 解决使用pip无法安装rasa与无限依赖告警:INFO: This is taking longer than usual. You might need to provide the....

    在直接使用 pip install rasa时几乎无限告警 INFO pip is looking at multiple versions of sanic to determine which version is compatible
  • 套接字及分层模型(一)

    套接字通信 1 内核开发的工程师将网络相关的头文件存储到一个专门目录include net中 而不是存储到include linux 2 ISO OS和TCP IP参考模型 应用层 网络服务与最终用户的接口 表示层 数据的表示 安全及压缩