协议栈——创建套接字

news2024/12/24 8:29:19

前面几篇文章讲解的是应用程序使用Socket间接通知协议栈进行的连接,通信阶段,那么从现在开始讲解协议栈和网卡驱动的故事

回顾上篇文章,我们从第一阶段创建套接字,协议栈返回描述符讲起~~~

协议栈结构

首先来看下协议栈的大致结构:

应用程序

代表客户端,浏览器,电子邮件等程序,这些程序发出请求委派给下一层的Socket

Socket程序

解析器也是Socket的一部分用于DNS服务查询域名的IP地址,其他部分就是委派操作系统的协议栈去处理数据了

操作系统

操作系统的协议栈分为两部分,上半部分为TCP/UDP协议;下半部分为IP协议;IP协议部分用于接受TCP,UDP的请求进行填充额外控制信息,数据在网络中如果超过一定长度(后面讲解)是需要切割分成一个一个包进行传输的,而IP协议就是用于收发网络包的。在图中还可以看到有ICMP和ARP,ICMP用于表示网络包传输过程中出现的错误,ARP是用于根据IP查询MAC地址(为什么需要MAC地址呢?因为操作系统是委托网卡的,网卡需要知道MCA地址)

驱动程序

网卡驱动程序用于控制网卡,IP协议向网卡驱动程序发送的数字信号接下来会被网卡转换数为电信号在网线中传输

套接字

协议栈的内部会有一块记录通信对方的ip端口,通信状态,使用这块内存的应用pid的内存空间等,这个内存空间就是套接字存储的内容,这些内容叫做控制信息

协议栈需要根据套接字所存储的控制信息进行下一步的操作。

netstat命令用于查看套接字内容

  • proto协议类型tcp或者udp协议
  • localaddress “:”前面代表本机使用的ip地址(ip地址本来是网卡才有的,因为计算机内部有很多网卡,所以也就说计算机有很多ip地址);后面代表使用的端口号(根据套接字生成的一个数字)
  • foreignaddress:和loacladdress一样的格式,两者都是建立连接后才会显示数字的默认是0
  • state是这个套接字的连接状态
  • pid:使用这个套接字的应用程序,由于一个应用程序会有很多个网络请求因此也有多个套接字

应用程序通过socket向协议栈发起创建套接字的请求时,协议栈会创建出一块内存并写入这个套接字刚创建完成的初始化状态,并将代表这个套接字的描述符返回给应用程序。

原文链接:协议栈——创建套接字 - 掘金 (juejin.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python基础】数据容器的切片操作和集合

文章目录 前言一、切片操作1.1 什么是切片?1.2 如何使用切片? 基本切片带步长的切片省略起始和结束索引逆序切片二、集合2.1 什么是集合?2.2 如何定义集合?2.3 集合常用函数1. add()2. remove()3. discard()4. pop()5. clear() 总…

电子器件系列52:达林顿晶体管阵列

其实以前已经学到过,最近在网上看到有的厂家的规格书全部是中文的,一个叫华冠,还有一个叫中科芯,我直接贴它们家的规格书比较方便 其实都是达林顿晶体管阵列 b站上好多视频,搜索达林顿阵列就可以了,这个讲得…

[应用推荐]Web Scraper——轻量数据爬取利器

对于日常的简单网页内容爬取,学习Python等投入太高,可以考虑使用这个Chrome工具。 以下为收集的具体信息,按需取用。 以下内容来自web ScraperWeb Scraper - The #1 web scraping extensionThe most popular web scraping extension. Start …

[计算机入门] Windows附件程序介绍(工具类)

3.14 Windows附件程序介绍(工具类) 3.14.1 计算器 Windows系统中的计算器是一个内置的应用程序,提供了基本的数学计算功能。它被设计为一个方便、易于使用的工具,可以满足用户日常生活和工作中的基本计算需求。 以下是计算器程序的主要功能&#xff1a…

栈的概念|动态顺序栈的详细解析|静态顺序栈链式栈的代码参考

前言 今天我们将学习数据结构中的栈,它是一种特殊的线性表。why——在前面我们学习顺序表、链表它们都属于线性表,它们可以在任意位置进行插入和删除数据;但是今天我们学习栈,它只能在一端进行插入和删除。下面我们就来学习并实现…

[补题记录] Atcoder Beginner Contest 322(E)

URL:https://atcoder.jp/contests/abc322 目录 E Probelm/题意 Thought/思路 Code/代码 E Probelm/题意 有 N 个改进计划,每个计划可以执行一次;有 K 个参数,每个计划可以将所有参数提升固定值,即计划 i 可以为第…

[C国演义] 第十三章

第十三章 三数之和四数之和 三数之和 力扣链接 根据题目要求: 返回的数对应的下标各不相同三个数之和等于0不可包含重复的三元组 – – 即顺序是不做要求的 如: [-1 0 1] 和 [0, 1, -1] 是同一个三元组输出答案顺序不做要求 暴力解法: 排序 3个for循环 去重 — — N^3, …

leetcode 343.整数拆分、96.不同的二叉搜索树

343.整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36…

游戏设计模式专栏(五):三步学会原型模式

引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 原型模式在游戏开发中是一种重要的设计模式,…

做外贸独立站选Shopify还是WordPress?

现在确实会有很多新人想做独立站,毕竟跨境电商平台内卷严重,平台规则限制不断升级,脱离平台“绑架”布局独立站,才能获得更多流量、订单、塑造品牌价值。然而,在选择建立外贸独立站的过程中,选择适合的建站…

Spring Bean 作用域与生命周期

1 Spring Bean 作用域 Spring 3 中为 Bean 定义了 5 中作用域,分别为 singleton(单例)、prototype(原型)、 request、session 和 global session,5 种作用域说明如下:singleton :单例…

布局与打包

属性栏直接输入值,比代码更直观方便。 打包:

五、运算表达式

5、运算表达式 1.3、运算表达式 运算表达式只能用于属性上,而不能在[[]]中使用 1.3.1、算术运算 thymeleaf可以使用以下算术运算符: , - , * , / , %; 示例 TestServlet中添加两个整数值 request.setAttribute("num1", 6); …

前端搭建名言生成器(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ JS是什么?✨ 名言生成器✨ 页面搭建✨ 功能实现 ✨ 写在前面 在上周我们通过HTML、CSS实现了一个简单的‘我的相册‘页面的搭建,很多伙伴呢跟我说难道前端就只能做一些页面搭建的工作吗&#xff1…

带头双向循环链表

目录 1 链表的种类1.1 第一对1.2 第二对1.3 第三对1.4 常用 2 带头双向循环链表的实现2.1 创建2.2 初始化2.3 打印2.4 尾插2.5 尾删2.6 头插2.7 头删2.7.1 两个变量2.7.2 三个变量 2.8 查找x所在位置2.9 在pos节点前插入x2.10 删除pos节点2.11 销毁链表 1 链表的种类 1.1 第一…

AS环境,版本问题,android开发布局知识

项目模式下有一个build.gradle,每个模块也有自己的build.gradle Android模式下有多个build.gradle,汇总在一起。(都会有标注是哪个模块下的) C:\Users\Administrator\AndroidStudioProjects 项目默认位置 Java web项目与android项目的区别…

队列(循环数组队列,用队列实现栈,用栈实现队列)

基础知识 队列(Queue):先进先出的数据结果,底层由双向链表实现 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为对头 常用方法 boolean offer(E e) 入队 E(弹出元素的类型) poll() 出队 peek() 获取队头 int size 获取队列元素个数 boolean isEmpty(…

Spring Boot项目中热点场景详解(万字总结)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★

循环读取图像实例

list image files (::mageDirectory,Extensions,Options:ImageFiles) par_join算子用于在调用程序中等待所有在单独的子线程中启动的程序或算子,方法是将par_start(启动的线程)添加到相应的程序行中( by adding the par_start qu…

CleanMyMac X4.14.1最新版本下载

CleanMyMac X是一个功能强大的Mac清理软件,它的设计理念是提供多个模块,包括垃圾清理、安全保护、速度优化、应用程序管理和文档管理粉碎等,以满足用户的不同需求。软件的界面简洁直观,让用户能够轻松进行日常的清理操作。 使用C…