

IP주소는 부호가 없는 32비트 정수이다. 즉, 음수가 아닌 32비트 정수이다. IP주소는 IP주소 구조체 in_addr에 저장된다.
구조체에서 IP주소는 s_addr에 담기는데 이는 빅엔디안 바이트순서를 따른다. 서로 다르게 정의 된 IP주소를 하나의 형식으로 통일시키기 위해서다.

리틀 엔디안과 빅엔디안은 데이터의 바이트 순서를 정하는 방식이다. 리틀 엔디안은 숫자의 낮은 자리수부터 메모리 주소가 낮은 곳에 저장하는 방식이다. 빅 엔디안은 가장 중요한 바이트부터 메모리의 낮은 주소에 저장하는 방식이다.
리틀엔디안 방식은 개인 컴퓨터에서 유리한 방식이다. CPU는 낮은 자리 부터 접근하기 때문이다. 빅 엔디안 방식은 네트워크 통신에서 유리한 방식이다. 통신 프로토콜에서 데이터의 일관성을 유지하기 위해서다.
따라서 호스트 바이트 오더는 리틀 엔디안을, 네트워크 바이트 오더는 빅 엔디안 방식을 사용한다.
네트워크 통신을 위해 호스트 바이트 오더를 네트워크 바이트 오더로 변환하는 기능과 방향이 반대인 기능이 필요하다. 유닉스에서는 다음의 함수들을 통해 네트워크 바이트 오더를 호스트 바이트 오더로 변환할 수 있다.

IP주소는 32비트 정수이다. 하지만 사람은 32비트 정수를 일일이 읽을 수 없다. IP주소를 dotted-decimal로 표기하면 사람은 IP주소를 쉽게 읽을 수 있다. dotted-decimal 표기법은 32비트 정수를 8비트씩 4구간으로 나눠서 10진수로 표기한다. 하나의 구간은 0부터 255까지 될 수 있다.
리눅스에서는 hostname -i 명령어를 통해 호스트의 IP주소를 확인할 수 있다. dotted-decimal 표기법을 통해 IP주소를 알려준다.
응용프로그램은 다음의 함수들을 통해 IP주소를 dotted-decimal로 상호 변환할 수 있다.

AF_INET은 32비트 정수로 표현 된 IP주소값을 갖는다.
도메인 이름이란 단어들의 배열로 whaleshark.ics.cs.cmui.edu처럼 점으로 구분된다.
도메인 이름들의 집합은 계층구조를 이룬다. 아무것도 없는 것을 0번째 계층, 첫번째 단어부터 1, 2, 3순으로 계층이 내려간다.

인터넷은 도메인 이름 집합과 IP주소 집합 사이의 매핑을 정의한다. 현재 인터넷은 DNS(Domain Name System)에 수백만개의 호스트 엔트리를 정의있다.
도메인 이름과 IP주소 사이에 1:1 관게부터 다대다 관계까지 존재할 수 있다.
nslookup localhost
nslookup 뒤에 도메인 이름을 넣어서 명령어를 실행하면 IP주소를 알 수 있다. localhost는 호스트의 도메인이름으로 127.0.0.1이다.

클라이언트의 프로세스는 서버의 프로세스로 연결한다. 연결은 클라이언트 프로세스과 서버 프로세스가 각각 연결 된는 점에서 point to point 연결이다. 클라이언트와 서버는 서로 연결되어 데이터를 송수신하기 때문에 양방향 연결이다. 데이터는 보내진 순서대로 도착하기 때문에 안정적이다.
소켓은 연결에서의 종착점이다. 각 소켓은 소켓주소를 가진다. 소켓주소는 인터넷주소와 16비트 정수 포트로 이뤄져 있다. address:port로 구성된다.
클라이언트의 경우 연결을 요청을 할 때 커널에게 포트번호를 자동으로 할당받는다. 해당 포트를 단기포트라고 한다.
서버의 소켓은 클라이언트와 달리 포트 번호가 정해져 있다. 영구포트라고도 한다. 일반적인 서비스의 경우, 포트번호가 관례적으로 정해져 있는 경우도 있다. 웹 서비스의 경우는 포트번호를 80, 메일 서비스는 포트번호가 25이다.