客户端与服务端通信,如何找到服务端

问题遇到的现象和发生背景
在学习客户端与服务端的网络通信时遇到一个疑问。
遇到的现象和发生背景,请写出第一个错误信息
 客户端的connect()函数的第二个参数  const struct sockaddr *addr  ,里面有服务端的ip和端口号,
  但是没有子网掩码,(不同的局域网下ip是可以一样的),那凭什么有ip就能找到服务端呢?
用代码块功能插入代码
        struct sockaddr_in serv;
    serv.sin_family = AF_INET;
    serv.sin_port = htons(8888);
    inet_pton(AF_INET, "127.0.0.1", &serv.sin_addr.s_addr);
    int ret = connect(cfd, (struct sockaddr *)&serv, sizeof(serv));
我的解答思路和尝试过的方法
是不是 AF_INET所对应的Ipv4协议里面有所规定,让客户端可以找到服务端?
又或者是connect()函数的底层进行了什么操作?

ip地址类似于服务器在网络上的身份证号码,知道ip就能对应到一台服务器。其次,服务器上有多个端口,每个应用程序使用的端口不一样,知道端口就可以和服务器上指定的应用交互数据。所以只需要知道ip和端口就行。
或者举个更通俗的例子,假如我要和你沟通,那我就需要知道你的csdn账号名称,才能找到你的主页,然后在你的主页上要找到和你聊天的那个图标点进去才能和你聊天,这里的csdn账号相当于就是ip的功能,那个聊天入口的图标相当于就是端口。所以知道ip和端口就能找到服务器上的那个应用并进行通信,至于如何找,找的过程由网络上的交换机,路由器和dns域名解析器去做就行。
望采纳!!!