Finding the Server
このコンテンツはまだ日本語訳がありません。
Module 2 of 5 in the chapter The Client and Server, chapter 2 of the Integration Architect course. Each module stands on its own. Previous: Who Dials the Phone · Next: Knocking on the Door
The question this module answers: What does a client need to know to reach a server, and what has to be true on the server’s side?
Here’s the question I ask the room. For a client to call a server, what does it have to have?
The first answer is usually authentication: it needs some way to prove who it is. Good. The next one is an IP address, or a domain. Also good. And then: it needs to know what language the server speaks.
So the client needs three things: where the server is, how to prove who it is, and how to talk to it. This module is the first one, where. Module 3 is how it knocks on the door, and chapter 3 is the language.
An Address
Section titled “An Address”Which kind of address the client uses depends on how far away the server is. There are three distances worth knowing.
Inside one machine: localhost. When one process on a machine needs to reach another process on the same machine, it calls localhost. That’s a special address that always loops back to the machine you’re on, 127.0.0.1. Because both processes are on the same machine, the address alone doesn’t say which one you want, so localhost almost always comes with a port, such as localhost:5000 (ports are next). A developer running a server on their laptop and calling it from the same laptop is doing exactly this. It’s the shortest possible integration: two processes on one machine, the case from the last module.
Inside one machine: localhost, and a port to say which process.
Inside your own network: an IP address. An IP address is a number that identifies a machine on a network, such as 203.0.113.10. That’s how computers find each other underneath everything else. Inside your own network, behind your own firewalls, in your own data center, systems often call each other by IP address. That can work, because the people who run that network know when an address changes, and can change the callers with it.
The downside is that an IP address usually takes you to a single machine. If that machine goes down, the client is lost. It has the right address for a machine that isn’t there.
Inside your network: an IP address can work, but it’s one machine.
Outside, and at scale: a name. As soon as you’re talking across networks, to a partner or a cloud service, or you need more than one machine to carry the load, you want a name. A name can point to a load balancer: something that stands in front of several servers and spreads the calls across them, so that more calls can be handled, and one machine going down doesn’t stop the service. Behind the name, individual machines can be added, removed and replaced, and their IP addresses can change, while the client keeps calling the same name. That’s how a service stays up while the machines underneath it are rotated.
And not everyone knows the IP addresses anyway. People don’t remember numbers, and a partner shouldn’t have to know which machines you run.
A domain is a name like steve-trucking.example. A subdomain is where you put a name to the left of the dot: api.steve-trucking.example, portal.steve-trucking.example. Each one can point to a different place, a machine or a load balancer, and each one can have its own listeners responding to traffic.
What comes after the slash is different. api.steve-trucking.example/manifests and api.steve-trucking.example/orders go to the same place: the same service behind that name. It’s that service that decides what each path means. The name gets you to the building; the path is what you ask for once you’re inside.
And how does a name become an address? The client looks it up in DNS, the internet’s address book: it asks for the name and gets back an address to connect to. You met DNS in the last module of chapter 1, as one of the things that can stop an arrow when both systems are up. Now you can see why: if the client can’t look up the name, it never finds the address, and the call never starts.
Outside your network: look the name up, then call the name. Behind it, the machines can change.
Your Port Is Like the Phone Number
Section titled “Your Port Is Like the Phone Number”Finding the machine isn’t enough. One machine can run many services, and each one listens on its own port. If the IP address is the building, the port is the phone number inside it. You can reach the building and still dial the wrong number.
A few port numbers are an industry standard across the world, kept in a registry by IANA, the body that assigns them (Service Name and Transport Protocol Port Number Registry (opens in a new tab), checked 2026-11-01):
- 80 is plain HTTP, the web without encryption.
- 443 is HTTPS, the secure web.
If you leave the port out of an https:// address, 443 is implied. If a server listens somewhere else, you put the port after a colon: https://api.steve-trucking.example:8443.
One correction to something I’ve said in class. I’ve called 443 “authenticated.” That isn’t quite right, and it’s worth being precise. On 443, the traffic is encrypted with TLS (TLS 1.3, RFC 8446 (opens in a new tab)), and the server’s certificate proves to the client that it’s talking to the real server. But the port doesn’t check who’s calling. A client on 443 still has to prove who it is, and that’s the next module.
Here’s a Salesforce example of why ports matter on a real project. Salesforce’s Pub/Sub API, which we’ll use for events in chapter 11, has its own endpoint, and the quick start uses port 7443: “The gRPC channel points to the Pub/Sub API endpoint api.pubsub.salesforce.com:7443. In this quick start, we use port 7443, but you can alternatively use port 443.” It also asks you to make sure your firewall allows the Pub/Sub API endpoint. (Step 2: Build the Python Client (opens in a new tab), Pub/Sub API quick start, checked 2026-11-01.) If the network team only opened 443 and the developers wrote 7443, the client has the right name and the right address, and the call still never connects. Somebody has to decide the port, and tell the people who run the firewall.
Someone Has to Be Listening
Section titled “Someone Has to Be Listening”Now turn around and look from the server’s side. For any of this to work, the server has to make itself available, through an IP address or a domain, and it needs a process that’s up and running and listening for connections on that port. Most of the time, we call those web servers. If it’s secure, it listens on 443 or a port it has chosen and published.
If nothing is listening, it doesn’t matter how good the client’s address is. The call is refused, or it hangs until it gives up. And remember the rule from the last module: the server won’t call back. It’s the client that finds out, and the client that has to decide what to do: wait, retry, or tell someone.
Putting It Together
Section titled “Putting It Together”Here’s Redrock’s call from the last module, before anyone says a word.
A name, an address, a port, and someone listening.
Every one of those steps is something the client needs to know, and something that can fail. The name can be wrong, DNS can be down, the port can be blocked, the listener can be stopped. That’s why, on a project, I want them written down for every arrow, not left in someone’s head.
The names and the address in this module are reserved for examples (RFC 2606 (opens in a new tab), RFC 5737 (opens in a new tab)), so no real business is behind them.
What an Architect Decides Here
Section titled “What an Architect Decides Here”- For every arrow, the server’s name (domain or subdomain), and who owns it in DNS.
- The port each server listens on, and that every firewall in between allows it.
- Which server is listening, who keeps it running, and what the client does when it isn’t.
- Which kind of address each client uses: localhost within a machine, an IP address only inside a network you run, and a name for anything outside it or behind a load balancer.
- Separate names for separate services where it helps, so one can move without changing the others.
- That every one of these is written down for each arrow, not left in someone’s head.
Explore
Section titled “Explore”- IANA, Service Name and Transport Protocol Port Number Registry (opens in a new tab), checked 2026-11-01.
- IETF, The Transport Layer Security (TLS) Protocol Version 1.3 (RFC 8446) (opens in a new tab).
- IETF, Special-Use Domain Names (RFC 6761) (opens in a new tab):
localhost. - Salesforce, Pub/Sub API, Step 2: Build the Python Client (opens in a new tab), checked 2026-11-01.
- IETF, Reserved Top Level DNS Names (RFC 2606) (opens in a new tab) and IPv4 Address Blocks Reserved for Documentation (RFC 5737) (opens in a new tab): the names and addresses kept for examples, checked 2026-11-01.
- The next module, Knocking on the Door: how the client proves who it is.
