如何通过港口沟通工程

我正在研究套接字编程,并且出现了一些问题。 这些是一些初学者的疑虑

  1. 对于特定的应用程序使用众所周知的端口是强制性的吗? 例如,如果我使用SSL,我可以devise一个服务器来听1000而不是443。

  2. 对于http,我们从其他任意端口连接到端口80。 没有任何港口80港口80通信。

  3. 服务器如何响应来自不同端口到其端口80的连接。

  4. 有多less连接是可能的一个particul

  1. 不,它不是强制性的,但是一些应用程序默认会预期这种行为(它使得应用程序更加可用,因为你不需要明确指定端口)。 例如,当您浏览网站example.com时,您不需要指定端口,因为默认端口是80.如果要连接到另一个端口上的Web服务器,则需要明确声明该端口。 有时候人们会故意改变端口,比如SSH端口22,以减less对互联网背景噪音的干扰。
  2. 没有理由为什么要这样做,build议你在80端口上运行一个web服务器,并且想冲浪到一个网站,否则你将无法做到这一点,因为另一个服务正在使用该端口。 正如我在1中所说的,端口就在那里,所以当你想连接到一个服务时,你不需要指定它们,除非这个服务在一个非默认的端口上运行。
  3. 这将取决于在端口80上监听的内容,networking服务器将使用HTTP协议进行响应。 如果由于某种原因,您在该端口上运行SSH,它将使用SSH进行响应。
  4. 然而对特定端口没有限制。 然而,并发连接的数量是有限的,通常受内核支持的文件描述符数量的限制(如2048)。 ( 计算器 )

1 – 这只是关于“标准”。 默认情况下,如果您指定https,则浏览器将到达端口443;如果http为例,则浏览器将到达端口80。 你可以做任何你想要的特定用途,但是你将需要像这样指定你的自定义端口:some.place.to.go:1000你可以使用“保留和众所周知的”端口(0-1023)相应的服务,但如果你需要/想要使用另一个,这取决于你…记得你有超过65K的:)

因为端口<1024是保留的,不能用来发起连接

3-我们正在谈论TCP连接…在特定的机器上,与机器的IP地址相连的端口号称为套接字。 客户端和服务器上的IP和端口的组合称为四元组。 这四个元组唯一标识一个连接。 因此,服务器可以与许多客户端交谈,因为每个客户端都与服务器build立了独特的连接以便与之通信。

例如:客户端(cli)从客户端端口(5432)连接到服务器(srv)到服务器端口(80)cli:5432 – > srv:80

服务器将响应客户端在同一个客户端端口上:srv:80 – > cli:5432等等…

所以对于这个问题: – 想象一下客户端有一个HTTP服务器在运行,“本地”端口80已经被使用了。 – 想象一下路由器后面有几个客户端(只有一个IP …),那么许多客户端如何使用相同的始发端口?

如果连接是从端口80而不是从任意端口进行的,则这两种情况都不起作用。 这就是为什么我们需要使用任意端口来发起请求!

4-从一个IP到全世界,最大65535(因为你只能绑定65k的sockets……因为你只有65k的端口)

如果你想进一步了解这一点,我鼓励你阅读这些东西:

http://en.wikipedia.org/wiki/Internet_protocol_suite (和相关文章…)

http://www.thegeekstuff.com/2011/11/tcp-ip-fundamentals/