Application Architecture
Network application은 Client-server architecture와 P2P architecture 두 종류가 존재한다.
Client-Server는 말 그대로 server와 client가 나뉘어져 있으며, Server는 영구적인 IP address를 가지면서 data center의 역할을 수행한다.
Client는 server와 커뮤니케이션하는 주체로, 다른 client와 통신할 때 반드시 서버를 통해서 소통하게된다.
반면 P2P는 유저끼리 직접 커뮤니케이션을 수행하며, 이들을 `Peer`라고 한다.
Socket
application layer에서 만든 application message는 transport 계층에 의하여 전송된다.
다만 위의 그림에서 살펴볼 수 있듯, application layer은 developer에 의하여 컨트롤 되는 영역이며
transport 이하의 계층은 OS에 의하여 컨트롤되는 계층이다.
따라서 이 두 계층간의 데이터 교환을 위한 통로가 필요한데, 이를 `socket`이라고 한다.
Addressing Process
IP주소는 host device를 식별하기 위해 사용되는 정보로, 32bit의 값을 갖는다.
Port 주소는 host device에서 실행 중인 process를 식별하기 위한 정보로,
HTTP server의 경우 port number 80, mail server의 경우 port number 25를 갖는다.
transport 계층의 service
1. data integrity
데이터가 손상되지 않고 전달되는 것을 의미한다.
파일의 전송이나, web transaction의 경우 데이터가 온전하게 전달되는 것이 매우 중요하다.
다만 audio와 같은 데이터의 경우 사람이 인지할 수 없을 정도의 손상은 크게 문제가 되지 않는다.
2. timing
delay 없이 데이터가 전송되는 것을 의미한다.
인터넷 게임 등의 case에서 매우 중요시 되는 service이다.
3. throughput
단위 시간 당 얼마나 많은 데이터를 전송할 수 있는지에 대한 지표이다.
multimedia 앱 등의 경우 데이터가 전송되는 양에 따라 재생이 이루어질 수 있기 때문에 매우 중요하지만,
파일 다운로드의 경우 throughput이 낮아지면 단순히 파일 다운로드 속도만 낮아지고 다른 문제는 발생하지 않기 때문에 비교적 문제가 크지 않은 case에 속한다.
4. security
데이터가 탈취되지 않거나, 탈취되더라도 데이터를 암호화하여 안전하게 전송하는 것을 말한다.
Transport 계층의 protocol
TCP
reliable transport service를 제공하는 프로토콜이다. 즉, 애플리케이션이 TCP 프로토콜을 이용하여 메세지를 전달하기로 한 경우, 자신이 전송한 메세지가 destination host에게 온전하게 전달될 것임을 신뢰할 수 있다.
TCP는 connection-oriented 서비스로, 전송전에 목적 host와 연결을 진행하는 handshaking 작업을 수행한다.
이러한 connection setup을 통해 flow control이나 congestion control이 가능하다.
여기서 `flow control`이란 buffer flow를 방지하기 위한 방법을 말한다.
TCP를 통해 데이터를 전송하는 경우, 양 쪽의 end system에는 TCP buffer가 존재한다.
데이터를 전송하는 측에서는 버퍼에 데이터를 담아 상대방에게 보내고, 데이터를 받는 측에서는 버퍼에 데이터가 담기면 이를 application 계층으로 올려주는 역할을 한다.
이 때, 데이터를 전송하는 측에서 너무 빨리 데이터를 전송하면 데이터를 받는 측의 buffer에 계속해서 데이터가 쌓이게 되고, overflow가 발생하여 데이터 손실이 발생할 수 있다.
따라서 Receiving TCP에서 상대측에게 데이터를 천천히 보내라는 요청을 하게 되는데 이를 flow control이라고 한다.
congestion control이란 앞서 살펴보았던 packet loss를 해결하기 위한 방법으로, 네트워크의 congestion을 방지하기 위해 데이터 전송 속도를 조절하는 메커니즘을 말한다.
UDP
UDP는 TCP와 달리 reliable transport를 보장하지 않는다.
단순히 application 계층에서 내려보낸 메시지를 네트워크로 emit하는 기능을 수행한다.
그럼 TCP만 쓰면 되는데 왜 UDP를 쓰나요?
이렇게 살펴보면 굳이 TCP를 놔두고 왜 UDP를 사용하는지에 대한 의문이 생길 수 있는데, 이러한 서비스를 제공하기 위해 양 측의 연결을 괸리하는 것은 생각보다 큰 overhead로 작용한다.
따라서 데이터의 전송 속도가 압도적으로 중요하거나, 한 두번만 전송하고 더 이상 데이터를 주고받지 않을 관계라면 굳이 TCP를 사용할 이유가 없다. 따라서 이러한 경우는 UDP protocol을 사용하여 데이터를 전송한다.
TCP와 UDP 모두 보장하지 않는 service
timing, minimum, throughput, guarantee, security 등의 service는 TCP와 UDP 모두에서 보장되지 않는 service에 해당한다.
Application Layer Protocol
Application Layer Protocol에서는 주고받는 메세지의 타입을 정의한다.
예를 들어 request, response와 같은 메세지가 존재한다.
또한 메시지의 syntax나, 전송 rule, semantics 등을 정의한다.
대표적으로 HTTP, SMTP와 같은 프로토콜이 존재한다.
자세한 내용은 다음 장에서 다루려고 한다.
'Network' 카테고리의 다른 글
[Computer Network] Transport Layer(UDP와 TCP) (0) | 2023.11.01 |
---|---|
[Computer Network] Socket Programming (0) | 2023.11.01 |
[Computer Network] DNS (Domain Name System) (0) | 2023.10.31 |
[Computer Network] Application 계층의 Protocol (0) | 2023.10.31 |
[Computer Network] Introduction (0) | 2023.10.27 |