计算机对数据包封装TCP报文段时,是如何得知源端口号和目标端口号的?

当计算机A想要发送数据包给计算机B时,在传输层会封装TCP头部,内含源端口号和目标端口号,源端口号是进程告诉防火墙的,那目标端口号计算机是如何得知的呢?如果是访问网页,目的端口是80或443,那么如果是通过QQ,微信,发送数据时,目标端口号是如何知道的呢?

比如你用浏览器访问URL,如果不写端口号,默认就是80
如果要访问的端口不是80,那么你的URL最后就要加上端口号
再比如邮箱之类的其他应用,也都有自己默认的端口号
像mysql客户端之类的,允许你自定义端口号
而QQ之类的商业软件,服务端是人家自己开发的,你不能随便改,QQ客户端也不是一个简单的调试工具,所以端口号就写死在代码里了,不让改
那么其实在最顶层应用层就已经知道了对方的端口号了
而源端口号可以设置,也可以不设置,不设置的话,建立连接时会随机分配一个空端口

目的计算机开启了某项服务之后,会不断地侦听这个端口。发送到哪个端口就是应用进程自身规定的了