TCP/IP 5계층 모델에서 제일 상위 Layer에 해당한다.
Transport / Network / Link / Physical Layer는 모두 운영체제에 구현이 되어있다.
Client-Server
네트워크 Application Layer에서 가장 일반적으로 사용되는 모델이다.
- 서버(Server):
- 서버는 항상 켜져 있는(Always-on) 호스트로, 고정된 IP 주소를 가지고 있음.
- 서버는 클라이언트의 요청을 받아 처리하고 응답을 반환하는 역할을 함.
- 대규모의 트래픽을 처리하거나 여러 사용자의 요청을 동시에 처리하기 위해, 서버들은 종종 데이터 센터에 배치됨. (Scailing)
- 클라이언트(Client):
- 클라이언트는 사용자의 디바이스에서 실행되는 프로그램으로, 필요한 정보를 얻기 위해 서버에 연결함.
- 클라이언트는 꼭 항상 연결된 상태는 아님.
- 동적 IP 주소를 가질 수 있으며, 이 경우 IP 주소는 네트워크에 연결할 때마다 변경될 수 있음.
- 일반적으로 클라이언트들은 직접 통신하지 않음.
- HTTP, IMAP, FTP
Peer-peer (P2P)
모든 참여자가 동등한 관계를 가지며 서로 직접 통신하는 네트워크 구조를 의미한다.
- 컴퓨터 간 양방향 파일 전송 구조
- 중앙 데이터센터 (서버) 없이 각각의 컴퓨터들이 서버와 클라이언트가 됨.
- 모든 단말이 동등한 관계, 특별한 기능이나 역할을 지닌 단말은 존재하지 않음.
- 사용자 수가 방대해져도 특정 참여자에 부하가 집중되지 않음. - 확장성 (self scalability)
- 설치와 관리가 간편하고 고가의 서버 등을 구입할 필요가 없음.
- 백업 작업 불편함.
- 유지 보수 및 관리가 어려움.
- 동적 IP 할당이라 매번 IP 주소가 변경될 수 있음.
- P2P file sharing, Blockchain ...
Process Communicate
- 동일 호스트 내 프로세스 통신: 같은 호스트 내에서 두 프로세스는 운영체제가 정의하는 '프로세스 간 통신(Inter-process communication, IPC)'을 사용하여 서로 통신합니다.
이는 공유 메모리, 파이프라인, 메시지 큐 등 다양한 형태를 가질 수 있습니다. - 다른 호스트 간 프로세스 통신: 서로 다른 호스트에 있는 프로세스들은 메시지를 교환함으로써 통신합니다.
이 경우 일반적으로 네트워크 프로토콜을 사용하여 데이터를 전송하게 됩니다.
Socket
메시지를 주고 받는 과정을 Socket을 사용해서 한다. (Different Host) != pipe (Same Host)
- 프로세스들은 소켓을 통해 메시지를 주고받음.
- Application Layer와 Transport Layer 사이의 인터페이스라고 보면 된다.
- 넓은 의미에서는 Application 간에 메시지를 보내는 인터페이스라고도 볼 수 있음.
Addressing Processes
Q. 프로세스의 식별을 위해 호스트의 IP 주소만으로 충분한가?
A. NO. 한 호스트 내에서 여러 프로세스가 동시에 실행될 수 있으므로, 단순히 IP 주소만으로는 특정 프로세스를 정확하게 구분할 수 없다.
- 식별자 구성: 따라서 프로세스의 식별자는 호스트의 IP 주소와 함께 해당 프로세스와 연결된 포트 번호도 포함한다. 이렇게 함으로써 네트워크 상에서 각각의 프로세스를 정확하게 지정할 수 있다.
- 예를 들어, HTTP 서버는 일반적으로 80번 포트를 사용하고, 메일 서버(SMTP)는 25번 포트를 사용한다.
따라서 gaia.cs.umass.edu 웹 서버에 HTTP 메시지를 보내려면, 해당 서버의 IP 주소인 128.119.245.12와 HTTP 서비스가 연결된 포트 번호인 80을 모두 사용하여 메시지 전송 대상을 지정한다. - 이처럼 네트워크 상에서 특정 프로세서(애플리케이션)에 데이터 패킷을 정확하게 전달하기 위해서는 IP주소와 포트번호 모두 필요.
Application-layer protocol defines..
- messages types 무슨 메세지가 전달 되는가(request, response 등)
- message syntax (필드에 대한 내용 - 앞에 몇비트는 뭘 나타내고 등)
- message semantics(필드가 의미하는 바가 무엇인지)
- rules 프로세스들이 언제 메세지를 보내고 받으면 어떻게 처리할지 등
- 스카이프를 만들었다? -> 프로토콜들을 디자인하거나 open protocols 사용(http, smtp 등) -> 어떤 웹을 만들어도 웹서버들과 통신할 수 있도록 하기 위해 open protocols 사용함
어떤 Transport Service가 앱한테 필요한가?
- data integrity : 신뢰적 데이터 전송(데이터가 중간에 새면 안된다)
- timing : 시간을 보장해야 한다. 실시간 애플리케이션(게임)은 더더욱!
- throughput : 처리량. 대역폭은 많으면 많을수록 좋지만 탄력적 애플리케이션(elastic application)보다 대역폭 민감 애플리케이션(bandwidth-sensitive application)에서 더욱 많이 필요하다.
- security : 보안은 당연히 지켜져야 한다.
Internet transport protocols services
TCP
- 신뢰성 있는 전송(Reliable transport)
- TCP는 보내는 프로세스와 받는 프로세스 사이에서 신뢰성 있는 데이터 전송을 보장한다. 데이터 패킷이 손실되거나 순서가 뒤바뀌었을 때, TCP는 재전송 요청하거나 순서를 다시 맞추는 등의 조치를 취한다.
- 흐름 제어(Flow Control)
- TCP는 송신자가 수신자를 넘어서지 않도록 한다. 즉, 수신자가 처리할 수 있는 속도보다 빠르게 데이터를 보내지 않게 한다.
- 혼잡 제어(Congestion Control)
- 네트워크가 과부하 상태일 때, TCP는 송신자의 데이터 전송 속도를 조절하여 네트워크 혼잡을 관리한다.
- 하지만, TCP는 타이밍, 최소 처리량 보장, 보안 등을 직접 제공하지 않는다.
- 또한, TCP는 연결 지향적이다. 즉 클라이언트와 서버 프로세스 사이에 데이터 교환을 시작하기 전에 연결 설정 과정이 필요하다.
UDP
- UDP는 신뢰성 없는(unreliable) 데이터 전송 방식이다. 즉 패킷의 도착 순서나 패킷의 유실에 대해 보장하지 않는다.
- UDP 자체적으로 흐름 제어나 혼잡 제어 기능을 가지고 있지 않으며, 타이밍, 처리량 보장 및 보안 기능 역시 없다.
- 그리고 UDP에선 별도의 연결 설정 과정 없이 바로 데이터 패킷을 교환할 수 있다.
왜 UDP를 사용하는 걸까?
- UDP의 장점은 그 간단함과 낮은 지연 시간에 있다. 복잡한 흐름 제어나 혼잡 제어 메커니즘이 없기 때문에, UDP는 빠른 데이터 전송이 필요하고 일부 패킷 손실이 허용되는 상황에서 유용하다.
- 예를 들어, 실시간 오디오/비디오 스트리밍, VoIP(Voice over IP), 온라인 게임 등에서는 패킷의 즉각적인 전송이 중요하며 일부 패킷의 손실은 허용될 수 있다. 이런 경우에 UDP를 사용하면 TCP보다 낮은 지연 시간을 달성할 수 있다.
참고
Computer Networking: A Top-Down Approach 8th edition / Kurose, Ross / Pearson
'🤔 컴공 지식 > 네트워크' 카테고리의 다른 글
[네트워크] DNS: Domain Name System (1) | 2023.10.08 |
---|---|
[네트워크] Web and HTTP (0) | 2023.10.08 |
[네트워크] Protocol Layers, Service Models (0) | 2023.10.08 |
[네트워크] Packet Switch Delay, Loss, Throughput (1) | 2023.10.06 |
[네크워크] Network Edge & Access Networks & Network Core (0) | 2023.09.21 |