2010-08-14 17 views
0

我是网络初学者,我有几个关于网络的问题。 1)进程如何执行从网络上不同计算机发送的代码。通常一个进程的代码段在加载后不能被改变以确保保护。 (另外我可以执行一些任意代码来破坏进程的内存) 2)一个进程也可以听到多个端口吗?多个进程可以听到同一个端口?例如两个与端口80相关的https。如何区分这些进程以及如何确保保护? 3)另外我想知道如何在套接字中实现监听。它们是作为软件中断实现的吗?一个进程如何执行网络代码

任何好书的建议非常感谢。

感谢&问候,

像老鼠。

回答

2

问:一个进程如何执行从另一台机器发送的代码?
答:一般来说,这是一个坏主意,因为安全问题难以充分探索。但是,这可以通过将网络交付代码保存到单独的可执行文件然后启动这个新程序来完成。这也可以在大多数系统上完成,只需将接收到的原始字节视为代码;将字节加载到堆中(不是堆栈!),将地址转换为函数指针并调用它。虽然如此,但这几乎肯定是坏主意

问:一个进程可以同时监听多个端口吗? A:是的。顺便说一下,HTTPS是端口443. HTTP是端口80.

问:多个进程可以在同一个端口上侦听(使用相同协议,在同一地址上)?
答:不可以。其他进程可能能够窃听并接收数据包,但它们不会直接绑定到端口。通常,只有一个进程可以绑定到给定的协议/端口/地址三元组。

问:在监听套接字时如何实现阻塞?答:由操作系统,以自己的方式。通常情况下,当线程在非就绪套接字上调用acceptreadpoll/select时,线程会进入“阻塞”状态,并且在某些数据到达之前不会接收CPU时间。

+0

如果是这样,我的谷歌浏览器firefox如何能够同时获取http请求。 – mousey 2010-08-14 06:43:56

+0

@mousey他们不是网络服务器,所以他们不听端口80.另一端。 – 2010-08-14 16:37:18

+0

为了澄清上述说法,Chrome和Firefox正在侦听(不同的)随机高编号端口,而不是端口80. – Borealid 2010-08-14 16:42:35

1

1)进程如何执行从网络上不同计算机发送的代码。通常一个进程的代码段在加载后不能被改变以确保保护。

这与网络无关。一旦你通过套接字接收到数据,它就在你的本地存储器中。之后你做的是特定操作系统。例如,在Windows上,您可以使用VirtualProtect将页面标记为可执行文件。

2)也可以听到多个端口的进程?

当然,只需为每个您想要听的端口创建一个不同的套接字。当然,要同时使用它们,您需要使用非阻塞套接字或者在单独的线程中运行每个套接字。

3)另外,我想知道如何在套接字中实现监听。它们是作为软件中断实现的吗?

这完全是OS特有的。 listen只是设置套接字,以便它可以接受连接。在此之后到达的任何连接请求(这可能发生在TCP/IP驱动程序的某处)由操作系统放入队列中。当你稍后调用accept时,操作系统从这个队列中抽出第一个挂起的连接并返回一个套接字。

+0

其实,我不认为'听'是一个阻止呼叫。你可能会想到“接受”。 – Borealid 2010-08-14 06:36:32

+0

是的监听不是阻止呼叫。接受或recv全部阻止 – mousey 2010-08-14 06:40:13

+0

糟糕,固定。当我写这些时,我不知道我在想什么。 :) – casablanca 2010-08-14 16:19:37

相关问题