TCP 协议中socket、port和进程的对应关系

转载自:https://blog.csdn.net/m0_51218245/article/details/120938107

 

=======================

 

前言:最近再看计算机网络,作为一个菜鸡一开始对socket和port(端口)一直分不清楚,查了各种资料,算是明白了,怕忘记于是就记录下来。

首先提出我一开始的几个问题:

什么是socket(套接字)
什么是端口
port和socket的关系是什么
port、socket和进程的关系又是什么
1.什么是socket?

关于这个问题我现在也没办法给出一个很具体的定义,网上找的对于socket的定义都是很抽象的,我也一直没明白,为什么socket要翻译成“套接字”,这个翻译让我一开始愚蠢的以为它就是一种“字”,《自顶向下》给出的定义是:

套接字是同一台主机内应用层与运输层之间的接口
当然不同OS对于socket的定义也是五花八门,这里就不说了。我还看见过“socket = ip + port” 这样的解释,显然这个解释真的是一种“字”,但是其实不太妥当。

socket其实可以理解是TCP连接的两个endpoint,即在客户端和服务器端的一条TCP连接中有两个socket,一个在客户端的运输层与应用层之间,一个在服务器端的运输层与应用层之间。发送方应用层的进程把要发送的信息推入到socket里,信息就会经过一系列复杂的传输到达接收方的对应socket“门口”,然后被推进这头门,到达对应的接收进程。先解释到这,后面还会解释。

 

 

2.什么是端口 ?

个人理解:端口就是用来标识进程的(后面再说线程)一个标识符,是一个16位的二进制数,其范围从0~65535。运输层在网络层的上面,网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供了逻辑通信,不同的主机用ip地址来区分,一个主机上的不同进程用端口来区分。经常听到什么“http协议默认是80端口”,这个可以粗略理解为用来处理http报文的进程运行在服务器的80端口。

3.port和socket的关系是什么?

在同一台主机上,一个socket包含一个端口,一个端口可以被写进多个socket,端口和socket是1对多的关系。

4.port、socket和进程的关系又是什么

一个进程可以对应多个端口,但是一个端口只能被用于标识一个进程。一个进程可以对应多个socket,但是一个socket只能归属一个进程。

5.结合TCP来解释上面的关系

一个服务器上会有一个监听socket,顾名思义就是监听有没有客户端的连接,这个socket的端口是预先分配的,比如用于HTTP服务的就是80,这个80号端口上有一个用于服务HTTP的进程,当客户端一个请求过来的时候,这个监听socket会生成一个新的socket,由这新的socket与客户端的socket相连接,这个新的socket并不会换一个端口,还是80,于是在服务器端的80端口上就有2个socket了。随着更多的客户端向这台服务器发来连接请求(假设连接都是用于HTTP),服务器80端口就会有更多的socket,这也就说明了 第三个问题 和 第四个问题 。

 

这图片我第一次看因为新生成的socket和监听socket不是一个端口。。。

但是问题又来了,客户端和服务器端的socket都是相互对应的,他们是如何区分的?TCP连接的socket会通过<协议,源ip,源port,目的ip,目的port>做为唯一的主键,来区分彼此,这些挤在80端口的socket的目的ip,目的port自然是一样的,他们的源ip,源port会不一样,这自然就区分开来了。

最后真么多socket都想往一个进程里传递信息,那这个进程岂不是忙死了,这时候就要说到线程了,如果可以的话,服务器可以为每个socket再开辟一条线程,这样理解的话线程和socket是一一对应,但是我目前还没找到依据,欢迎大家补充。

 

 

 

以上截图都来自《计算机网络-自顶向下方法第七版》

本人第一次写博客,欢迎大家发现、指出错误,互相促进,我会及时修改 。最后祝大家1024快乐!

一些参考

https://stackoverflow.com/questions/3638953/do-tcp-connections-get-moved-to-another-port-after-they-are-opened

network programming - Does the port change when a server accepts a TCP connection? - Stack Overflow
————————————————
版权声明:本文为CSDN博主「hehaonan~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_51218245/article/details/120938107

posted @ 2022-11-17 23:09  larybird  阅读(375)  评论(0编辑  收藏  举报