当前位置:首页 > 公众号精选 > CPP开发者
[导读]在TCP连接中,客户端在发起连接请求前会先确定一个客户端端口,然后用这个端口去和服务器端进行握手建立连接。那么在Linux上,客户端的端口到底是如何被确定下来的呢?事实上很多我们平时遇到的问题都和这个端口选择过程相关,如果能深度理解这个过程,将有助于我们对这些问题的深刻理解。Ca...

TCP 连接中,客户端在发起连接请求前会先确定一个客户端端口,然后用这个端口去和服务器端进行握手建立连接。那么在 Linux 上,客户端的端口到底是如何被确定下来的呢?

事实上很多我们平时遇到的问题都和这个端口选择过程相关,如果能深度理解这个过程,将有助于我们对这些问题的深刻理解。

  • Cannot assign requested address 报错是怎么回事?
  • 一个客户端端口可以同时用在两条 TCP 连接上吗?
还是让我们借助一段简单到只有两句的代码,从这个来讲起!

int main(){
 fd = socket(AF_INET,SOCK_STREAM, 0);
 connect(fd, ...);
 ...
}

一、创建 socket

客户端在发起连接的时候,需要事先创建一个 socket。在 c 语言中,就是调用 socket 函数,例如 socket(AF_INET,SOCK_STREAM, 0) 这句。

socket 函数执行完毕后,在用户层视角我们是看到返回了一个文件描述符 fd。但在内核中其实是一套内核对象组合,大体结构如下。

从上图我们看到,socket 在内核里并不是一个内核对象。而是包含 file、socket、sock 等多个相关内核对象构成,每个内核对象还定义了 ops 操作函数集合。在后面的内核源码执行过程中,我们需要时不时回头来看这些内核对象,这里先简单了解一下就行。

这些内核对象都是在 socket 系统调用执行过程中创建出来的。为了避免喧宾夺主,这里只列出入口代码,详细过程就不展开介绍了。

//file: net/socket.c
SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
{
 //创建 socket、sock 等内核对象,并初始化
 sock_create(family, type, protocol, 
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在这篇文章中,小编将对端口的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: 端口 控制端口

端口隔离是为了实现报文之间的二层隔离,可以将不同的端口加入不同的VLAN,但会浪费有限的VLAN资源。采用端口隔离特性,可以实现同一VLAN内端口之间的隔离。

关键字: 数字 端口 隔离?

上海2022年12月24日 /美通社/ -- 近日多名专家预测新冠疫情可能在一个月内达到感染峰值,新冠线上咨询、问诊服务需求继续激增。12月24日,中国平安宣布,以平安健康(港股上市名称:平安好医生)为旗舰的各大免费抗疫...

关键字: 防护 移动 端口 医疗服务

新竹2022年12月13日 /美通社/ -- MPI Corporation的先进半导体测试部门是半导体射频测试解决方案的市场领导者及创新先锋,该部门演示了无人值守的四端口射频校准和量测,由MPI完全集成的射频校准和探针...

关键字: 射频 端口 自动校准 TI

TCP 是基于连接的数据流的协议,先建立连接再进行通信,而且在通信过程中会检查数据是否发送成功。优点就是保证数据的完整性和准确性,缺点就是效率较低。

关键字: TCP 数据流 协议

(全球TMT2022年10月31日讯)在第八届全球超宽带高峰论坛(UBBF 2022)期间,华为光产品线总裁靳玉志发表了题为"释放光纤潜能,迈向F5.5G"的主题演讲,深刻阐述了光纤通信技术在社会发展中发挥的关键作用,...

关键字: 华为 5G 带宽 端口

在进行socket通信开发时,一般会用到TCP或UDP这两种传输层协议,UDP(User Datagram Protocol)是一种面向无连接的协议,在数据发送前,不需要提前建立连接,它可以更高效地传输数据,但可靠性无法...

关键字: socket TCP UDP

客户端主动调用关闭连接的函数,于是就会发送 FIN 报文,这个 FIN 报文代表客户端不会再发送数据了,进入 FIN_WAIT_1 状态;

关键字: 客户端 TCP

之前写过 TCP 三次握手和四次挥手过程中,途中某一步的报文丢失会发生什么的文章。

关键字: TCP 服务端

北京2022年8月22日 /美通社/ -- 8月19日,在"新新向上 智汇同行"2022年浪潮网络合作伙伴大会上,浪潮网络发布400G云中心网络核心交换机产品——CN12900E,拥有400...

关键字: 交换机 端口 数据中心
关闭
关闭