推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

「linux网络编程」socket、端口、进程的关系

   2023-07-31 网络整理佚名1700
核心提示:呢,是网络编程中的概念,对TCP/IP协议进行了抽象和实现,并为应用层提供接口。这里的应用A,可以是FTP应用,它属于用户进程,通过与内核中的网络协议栈进行交互。linux服务端的网络并发,详细解读网络io与线程进程关系为了定义出这个端口,就要依靠某种程序在计算机启动之前自动加载到内存,强行控制计算机打开那个特殊的端口。FTP:定义了文件传输协议,使用21端口。

的引入是为了解决不同计算机之间的进程间通信问题。

端口是TCP/IP协议中的一个概念,描述了TCP协议上相应的应用程序,可以理解为基于TCP的系统服务,或者系统进程! 如下图所示,FTP需要占用特定的TCP端口。

它是网络编程中的一个概念,它对TCP/IP协议进行抽象和实现,并为应用层提供接口。 这里的应用程序A可能是FTP应用程序,属于用户进程,与内核中的网络协议栈交互。

它是核心,是枢纽,是进程与网络建立关系的必经之路!

1.内核如何转发数据包?

网络数据首先到达网卡,然后进入内核,由网络协议栈进行处理。 那么内核是如何分配数据的呢? 它怎么知道如何将数据交给特定的用户进程呢?

这个时候就需要发挥作用了!

具体的四元组存储在:源ip+端口,目的ip+端口;

1> bind 到特定 ip 和 port 的socket 对应 [src ip, src port) <=> (*, *)] ;
2> connect 到特定目的ip+port 的 socket 对应 [src ip, src port) <=> (dst ip,  dst port)];
3> accept 返回了的 socket 对应  [src ip, src port) <=> (dst ip,  dst port)];

那么内核就可以根据数据包的四元组信息来锁定具体的一个。 是的,系统中的所有四元信息必须是唯一的,不能重复!

2 进程与进程之间有什么关系

每个进程在内核中都有一个表,该表保存了该进程申请和占用的所有描述符。 从进程的角度来看,其实和文件没有什么区别,只是通过描述符获取的对象不同而已。 接口对应的系统调用也不同。

那么这个过程是一一对应的吗?

其实它是一种资源,就像文件一样。 当一个进程打开时,另一个进程也可以使用它,但它是特殊的。

理论上,可以将描述符传递给其他进程,以便其他进程可以调用该描述符的接口。 这种场景确实很少使用,也没有进行过实际验证。

当然,父子进程之间以及线程之间的共享是比较常见的。

3 进程和端口

其实进程和端口之间并没有什么直接或必然的关系,关键还是!

抓包查看tcp协议数据包详细信息:

总结

本质是一种资源,其中包含端到端的四元组信息,用于标识数据包的归属。 因此,虽然tcp协议的端口号只有65535,但是一个进程可以拥有的数据并不限于此(受进程最大文件描述符数据的限制);

相关视频推荐

100行代码,实现网络协议栈,准备linux环境

linux服务器的网络并发,详细解读网络io与线程进程的关系

学习地址:C/C++ Linux服务器开发/后台架构师【零音教育】-学习视频教程-腾讯课堂

需要C/C++ Linux服务器架构师学习资料加采集(资料包括C/C++、Linux、技术、Nginx、、MySQL、Redis、、、ZK、流媒体、CDN、P2P、K8S、、TCP/IP、协程、DPDK等),免费分享

PS:1.端口介绍

随着计算机网络技术的发展,原有的物理接口(如键盘、鼠标、网卡、显示卡等输入输出接口)已不能满足网络通信的要求,TCP/IP协议作为标准网络通信协议解决了这个问题。 这个沟通难题。 TCP/IP协议被集成到操作系统的内核中,相当于在操作系统中引入了一种新的输入/输出接口技术,因为TCP/IP协议引入了所谓的(套接字)API。 有了这样的接口技术,计算机就可以通过软件与任何有接口的计算机进行通信。 端口是计算机编程中的接口。

有了这些端口,这些端口是如何工作的呢? 例如,为什么一台服务器可以同时是Web服务器、FTP服务器、邮件服务器等? 最重要的原因之一是各种服务使用不同的端口来提供不同的服务。 例如,TCP/IP协议通常规定Web使用80端口,FTP使用21端口等,邮件服务器使用25端口。这样,通过不同的端口,计算机就可以与外界进行通信,而无需互相干扰。

据专家分析,服务器端口最大可以为65535个,但实际上常用的端口只有几十个,可见未定义的端口相当多。 这就是为什么这么多的黑客程序可以采用一定的方法来定义特殊的端口来达到入侵的目的。 为了定义这个端口,需要依靠某种程序在计算机启动前自动加载到内存中,并强制控制计算机打开那个特殊端口。 该程序就是后门程序,这些后门程序通常被称为特洛伊木马程序。 简单来说,这些木马程序在入侵之前,首先通过某种手段在个人计算机中植入一个程序,打开某个端口(某些),俗称后门(后门),将这台计算机变成一台电脑。 开放性极高的FTP服务器(用户拥有极高的权限),然后通过后门就可以达到入侵的目的。

2. 端口的分类

端口可以​​根据其引用对象以不同的方式进行分类。 一般来说,根据端口的性质可以分为以下三类:

(1)可识别端口(Well):此类端口也常称为普通端口。 此类端口的端口号范围为0到1024,它们与某些特定的服务紧密绑定。 通常这些端口的通信清楚地表明了某种服务的协议,并且这种端口不能再重新定义其功能对象。 例如:端口 80 实际上始终用于 HTTP 通信,而端口 23 专用于服务。 这些端口通常不会被特洛伊木马等黑客程序利用。

(2)注册端口(Ports):端口号范围从1025到49151。它们与某些服务松散绑定。 也就是说,有许多服务绑定到这些端口,这些端口也用于许多其他目的。 这些端口大多没有明确的服务对象定义,不同的程序可以根据实际需要自行定义,比如后面要介绍的远程控制软件和木马程序中这些端口的定义。 记住这些常见的程序端口在木马程序的防护和查杀中是非常有必要的。 后面会详细列出常见木马所使用的端口。

(3)动态和/或私有端口(和/或Ports):端口号范围从49152到65535。理论上,常用的服务不应该分配在这些端口上。 事实上,一些特殊程序,尤其是一些木马程序,非常喜欢使用这些端口,因为这些端口往往不被注意到,很容易隐藏。

根据提供的服务方式的不同,端口可以分为两种类型:TCP协议端口和UDP协议端口。 由于计算机之间要进行通信,所以一般使用这两种通信协议。 上面介绍的连接方法是与接收器直接连接。 信息发送后,您可以确认信息是否已到达。 放到网上然后发送出去,不管信息是否到达,即上面介绍的无连接方式。 这种方式多采用UDP协议,IP协议也是一种无连接的方式。 对应使用上述两种通信协议的服务提供的端口,分为TCP协议端口和UDP协议端口。

使用TCP协议的常见端口主要有以下几种:

(1)FTP:定义文件传输协议,使用端口21。人们常说,当某台计算机打开FTP服务时,就启动了文件传输服务。 下载文件和上传主页都使用FTP服务。

(2):用于远程登录的端口。 用户可以以自己的身份远程连接到计算机。 通过该端口可以提供基于DOS模式的通信服务。 比如以前的BBS是纯字符界面,支持BBS的服务器就会开放23端口对外提供服务。

(3) SMTP:定义了简单邮件传输协议,现在很多邮件服务器都使用该协议来发送邮件。 比如这个邮件服务端口是常见的免费邮件服务中使用的,所以在电子邮件设置中经常会看到有这样一个SMTP端口设置栏,而服务器开放了25端口。

介绍

对于内核对象,它们的缓冲区由操作系统内核维护,引用计数,并且可以在多个进程中使用。 至于称其为“句柄”和“文件描述符”,是一样的。 它只是内核向用户进程开放的一个整数。

() 创建一个内核对象。 或者稍后,您可以读取和写入句柄。 因为只有在之后,才会设置内核对象中的ip和port。

在使用编程的时候,我们都知道网络通信之前首先要建立连接,而连接的建立是通过对网络的一些操作来完成的。 那么,建立连接的过程大致可以分为以下几个步骤:

1)创建一个套接字。

2)为分配一个地址,这不是通常的网络地址概念。

3) 建立连接。

下面详细解释 1. 创建。

当使用套接字时,我们实际上创建了一个数据结构。 该数据结构的主要信息是指定连接的类型和使用的协议。 另外,还有一些关于连接队列操作的结构字段(这里不再涉及)。

当我们使用该函数时,如果成功,它将返回一个int类型的描述符,该描述符指向内核中先前维护的数据结构。 我们的任何操作都通过该描述符应用于该数据结构。 就像我们创建文件后得到一个文件描述符一样。 对文件的操作是通过文件描述符进行的,而不是直接作用于inode数据结构。 我之所以用文件描述符来举例,是因为该数据结构也与inode数据结构密切相关。 它并不独立存在于内核中,而是位于一个VFS inode结构中。 因此,还有一些比较抽象的特征,我们可以通过文件操作来进行不恰当的类比,加深理解。

前面提到,当建立时,我们可以像文件描述符一样获得一个描述符。 就像我们操作文件一样,我们可以通过向写入数据来将数据发送到我们指定的地方。 这个地方可以是远程主机或本地主机。 如果有兴趣,也可以使用该机制来实现IPC,但是效率比较低,试试吧(没试过)。

2. 为套接字分配一个地址。

根据建立套接字的目的,分配套接字地址有两种方式:服务器端使用bind,客户端使用bind。

绑定:

我们都知道,只要使用IP,prot就可以区分一个tcp/ip连接(当然这个连接指的是一个连接通道,如果要区分特定主机之间的连接,就需要第三个属性)。

我们可以使用bind函数为服务器端例程中使用的套接字分配通信地址和端口。

这里我们说用于通信的IP地址和端口的组合构成了一个地址,而指定特定的用于通信的IP和端口的组合的过程就是分配这个地址。 要分配地址,必须用一个数据结构来表示具体的地址,而这个数据结构就是。 我不会谈论它的使用,因为本文档的目的是澄清概念而不是解释如何使用它。 Bind函数的作用就是将这个标有地址信息的特定数据结构与关联起来,即给一个地址。 但在具体实现上,两者是如何联系在一起的,我还不知道。

特定地址的生命周期是从绑定成功后到连接断开为止。 可以创建一个数据结构和地址数据结构,但是在没有bind之前,他们两个是没有关系的,而bind之后,他们两个就有了关系。 这种关系将一直保持到连接结束为止。 当连接结束时,数据结构和地址数据结构仍然存在,但它们不再相关。 如果您想使用此套接字在该地址上重新连接,则需要重新绑定它们。 再次注意,我所说的连接是连接通道,而不是特定主机之间的连接。

Bind指定的IP通常是本机IP(一般不指定,而是用来声明),最重要的作用是指定端口。 服务器端进行bind后,用于准备该地址的连接。

:

对于客户端来说,它不会使用bind(也不是不可以,但是没有意义),他们会使用函数来建立与地址的关系。 其中是它想要连接的服务器端的地址。 在与地址建立关系的同时,它也在尝试建立远程连接。

3.建立连接。

为了准备建立连接,服务器需要两个步骤:bind; 客户端有一个步骤: 。 如果服务器有一个,并且客户端得到了确认,则建立连接。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON