首页 > 系统相关 >TCP 协议中socket、port和进程的对应关系

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

时间:2022-11-17 23:26:08浏览次数:73  
标签:socket 端口 TCP 进程 80 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

标签:socket,端口,TCP,进程,80,port
From: https://www.cnblogs.com/hd92/p/16901752.html

相关文章

  • 升级node.js造成vue启动报错:digital envelope routines::unsupported
    原文:https://blog.csdn.net/qq_45039822/article/details/126195373今天把node.js升级到了最新版v18.12.1,启动vue项目时报错:digitalenveloperoutines::unsupported,在网......
  • intellij springmvc项目报错:[RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.se
    idea部署项目报错信息:[RMITCPConnection(3)-127.0.0.1]org.apache.jasper.servlet.TldScanner.scanJarsAtleastoneJARwasscannedforTLDsyetcontainednoTLDs.......
  • TCP协议中的三次握手和四次挥手
    理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信......
  • TCP的四次挥手
    什么是四次挥手?由于TCP连接是全双工的,断开一个TCP连接,需要客户端与服务器发送四个包来确认连接的断开。简述四次挥手的过程:因为TCP是++全双工++的,因此,每个方向都要......
  • WebSocket
    1<?php23/*4BasedonPHPWebSocketServer0.25-http://code.google.com/p/php-websocket-server/6-http://code.google.com/p/......
  • Linux网络编程 使用socket实现简单服务器——多进程&多线程版本
    1.多进程版服务端#include<stdio.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<signal.h>#include<wait.h>#include......
  • Linux网络编程 Socket
    预备知识 1.网络字节序我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分。 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络......
  • socket 客户端服务端代码优化
    #服务端:importsocketserver=socket.socket()server.bind(('127.0.0.1',8081))server.listen(5)whileTrue:sock,addr=server.accept()whileTrue......
  • 传输层之TCP与UDP协议 socket模块
    今日内容传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的 通信的时候可以随心所欲的聊也可以遵循一些协议符合要求的聊随心所欲的聊:文字、图片、视频......
  • socket模块(套字节)、通信循环、链接循环
    今日内容socket模块(套接字)实际应用通讯循环代码优化和链接循环半连接池socket模块(套接字)如果我们需要编写基于网络进行数据交互的程序意味着我们......